From e8089c7e7a0e5b7713419a74f4627f0e3230e720 Mon Sep 17 00:00:00 2001 From: Feiyang1 Date: Tue, 17 Aug 2021 23:51:40 -0700 Subject: [PATCH 01/38] rename folders --- .../demo/public/service-worker.js | 178 ---- .../auth-compat-exp/demo/public/web-worker.js | 210 ----- .../analytics}/.eslintrc.js | 0 .../analytics/CHANGELOG.md | 0 .../analytics}/README.md | 0 .../analytics/index.test.ts | 0 {packages => packages-old}/analytics/index.ts | 0 .../analytics}/karma.conf.js | 0 .../analytics}/karma.integration.conf.js | 0 .../analytics/package.json | 0 .../analytics/rollup.config.js | 0 .../analytics/src/constants.ts | 0 .../analytics/src/errors.ts | 0 .../analytics/src/factory.ts | 0 .../analytics/src/functions.test.ts | 0 .../analytics/src/functions.ts | 0 .../analytics/src/get-config.test.ts | 0 .../analytics/src/get-config.ts | 0 .../analytics/src/helpers.test.ts | 0 .../analytics/src/helpers.ts | 0 .../analytics/src/initialize-ids.test.ts | 0 .../analytics/src/initialize-ids.ts | 0 .../analytics}/src/logger.ts | 0 .../testing/get-fake-firebase-services.ts | 0 .../analytics}/testing/gtag-script-util.ts | 0 .../testing/integration-tests/integration.ts | 0 .../analytics}/testing/setup.ts | 0 .../analytics}/tsconfig.json | 0 .../app-check}/.eslintrc.js | 0 .../app-check/CHANGELOG.md | 0 .../app-check/README.md | 0 .../app-check/karma.conf.js | 0 .../app-check/package.json | 0 .../app-check/rollup.config.js | 0 .../app-check/src/api.test.ts | 0 .../app-check/src/api.ts | 0 .../app-check/src/client.test.ts | 0 .../app-check/src/client.ts | 0 .../app-check}/src/constants.ts | 0 .../app-check}/src/debug.test.ts | 0 .../app-check}/src/debug.ts | 0 .../app-check/src/errors.ts | 0 .../app-check/src/factory.ts | 0 .../app-check/src/index.ts | 0 .../app-check/src/indexeddb.ts | 0 .../app-check/src/internal-api.test.ts | 0 .../app-check/src/internal-api.ts | 0 .../app-check}/src/logger.ts | 0 .../app-check}/src/proactive-refresh.test.ts | 0 .../app-check}/src/proactive-refresh.ts | 0 .../app-check/src/providers.ts | 0 .../app-check/src/recaptcha.test.ts | 0 .../app-check/src/recaptcha.ts | 0 .../app-check/src/state.ts | 0 .../app-check}/src/storage.test.ts | 0 .../app-check/src/storage.ts | 0 .../app-check/src/util.ts | 0 .../app-check}/test/setup.ts | 0 .../app-check/test/util.ts | 0 .../app-check}/tsconfig.json | 0 {packages => packages-old}/app/.eslintrc.js | 0 {packages => packages-old}/app/CHANGELOG.md | 0 {packages => packages-old}/app/README.md | 0 {packages => packages-old}/app/index.lite.ts | 0 {packages => packages-old}/app/index.node.ts | 0 {packages => packages-old}/app/index.rn.ts | 0 {packages => packages-old}/app/index.ts | 0 {packages => packages-old}/app/karma.conf.js | 0 {packages => packages-old}/app/package.json | 0 .../app/rollup.config.js | 0 .../app/src/constants.ts | 0 {packages => packages-old}/app/src/errors.ts | 0 .../app/src/firebaseApp.ts | 0 .../app/src/firebaseNamespace.ts | 0 .../app/src/firebaseNamespaceCore.ts | 0 .../app/src/lite/firebaseAppLite.ts | 0 .../app/src/lite/firebaseNamespaceLite.ts | 0 .../app}/src/logger.ts | 0 .../app/src/platformLoggerService.ts | 0 .../app/src/registerCoreComponents.ts | 0 .../app/test/clientLogger.test.ts | 0 .../app/test/firebaseApp.test.ts | 0 .../app/test/platformLogger.test.ts | 0 .../app}/test/setup.ts | 0 {packages => packages-old}/app/tsconfig.json | 0 {packages => packages-old}/auth/.gitignore | 0 {packages => packages-old}/auth/CHANGELOG.md | 0 .../auth/CONTRIBUTING.md | 0 {packages => packages-old}/auth/LICENSE | 0 {packages => packages-old}/auth/README.md | 0 {packages => packages-old}/auth/STYLEGUIDE.md | 0 .../auth/buildtools/all_tests.html | 0 .../auth/buildtools/common.py | 0 .../auth/buildtools/gen_all_tests_js.py | 0 .../auth/buildtools/gen_test_html.py | 0 .../auth/buildtools/generate_test_files.sh | 0 .../auth/buildtools/run_demo.sh | 0 .../auth/buildtools/run_tests.sh | 0 .../auth/buildtools/sauce_connect.sh | 0 .../auth/buildtools/test_template.html | 0 .../auth/demo/.gitignore | 0 .../auth/demo/README.md | 0 .../auth}/demo/database.rules.json | 0 .../auth/demo/firebase.json | 0 .../auth/demo/functions/index.js | 0 .../auth/demo/functions/package.json | 0 .../auth/demo/functions/yarn.lock | 0 .../auth/demo/public/common.js | 0 .../auth}/demo/public/index.html | 0 .../auth}/demo/public/manifest.json | 0 .../auth/demo/public/sample-config.js | 0 .../auth/demo/public/script.js | 0 .../auth/demo/public/service-worker.js | 0 .../auth}/demo/public/style.css | 0 .../auth/demo/public/web-worker.js | 0 .../auth/externs/externs.js | 0 .../auth/externs/gapi.iframes.js | 0 .../auth/externs/grecaptcha.js | 0 {packages => packages-old}/auth/gulpfile.js | 0 {packages => packages-old}/auth/index.d.ts | 0 {packages => packages-old}/auth/package.json | 0 .../auth/protractor.conf.js | 0 .../auth/protractor_spec.js | 0 .../auth/sauce_browsers.json | 0 .../auth/src/actioncodeinfo.js | 0 .../auth/src/actioncodesettings.js | 0 .../auth/src/actioncodeurl.js | 0 .../auth/src/additionaluserinfo.js | 0 {packages => packages-old}/auth/src/args.js | 0 {packages => packages-old}/auth/src/auth.js | 0 .../auth/src/authcredential.js | 0 .../auth/src/authevent.js | 0 .../auth/src/autheventmanager.js | 0 .../auth/src/authsettings.js | 0 .../auth/src/authstorage.js | 0 .../auth/src/authuser.js | 0 .../auth/src/cacherequest.js | 0 .../auth/src/confirmationresult.js | 0 .../auth/src/cordovahandler.js | 0 {packages => packages-old}/auth/src/debug.js | 0 .../auth/src/defines.js | 0 .../auth/src/deprecation.js | 0 .../auth/src/dynamiclink.js | 0 .../auth/src/error_auth.js | 0 .../auth/src/error_invalidorigin.js | 0 .../auth/src/error_withcredential.js | 0 .../auth/src/exports_auth.js | 0 .../auth/src/exports_lib.js | 0 .../auth/src/exports_unreleased.js | 0 .../auth/src/externs.js | 0 {packages => packages-old}/auth/src/idp.js | 0 .../auth/src/idtoken.js | 0 .../auth/src/idtokenresult.js | 0 .../auth/src/iframeclient/ifchandler.js | 0 .../auth/src/iframeclient/iframewrapper.js | 0 .../auth/src/messagechannel/defines.js | 0 .../auth/src/messagechannel/postmessager.js | 0 .../auth/src/messagechannel/receiver.js | 0 .../auth/src/messagechannel/sender.js | 0 .../auth/src/multifactorassertion.js | 0 .../auth/src/multifactorauthcredential.js | 0 .../auth/src/multifactorerror.js | 0 .../auth/src/multifactorgenerator.js | 0 .../auth/src/multifactorinfo.js | 0 .../auth/src/multifactorresolver.js | 0 .../auth/src/multifactorsession.js | 0 .../auth/src/multifactoruser.js | 0 .../auth/src/oauthhelperstate.js | 0 .../auth/src/oauthsigninhandler.js | 0 {packages => packages-old}/auth/src/object.js | 0 .../auth/src/proactiverefresh.js | 0 .../auth/src/recaptchaverifier/grecaptcha.js | 0 .../src/recaptchaverifier/grecaptchamock.js | 0 .../auth/src/recaptchaverifier/loader.js | 0 .../auth/src/recaptchaverifier/mockloader.js | 0 .../auth/src/recaptchaverifier/realloader.js | 0 .../recaptchaverifier/recaptchaverifier.js | 0 .../auth/src/rpchandler.js | 0 .../auth/src/storage/asyncstorage.js | 0 .../auth/src/storage/factory.js | 0 .../auth/src/storage/hybridindexeddb.js | 0 .../auth/src/storage/indexeddb.js | 0 .../auth/src/storage/inmemorystorage.js | 0 .../auth/src/storage/localstorage.js | 0 .../auth/src/storage/mockstorage.js | 0 .../auth/src/storage/nullstorage.js | 0 .../auth/src/storage/sessionstorage.js | 0 .../auth/src/storage/storage.js | 0 .../auth/src/storageautheventmanager.js | 0 .../auth/src/storageoauthhandlermanager.js | 0 .../auth/src/storagependingredirectmanager.js | 0 .../auth/src/storageredirectusermanager.js | 0 .../auth/src/storageusermanager.js | 0 {packages => packages-old}/auth/src/token.js | 0 .../auth/src/universallinksubscriber.js | 0 .../auth/src/userevent.js | 0 {packages => packages-old}/auth/src/utils.js | 0 .../auth/test/actioncodeinfo_test.js | 0 .../auth/test/actioncodesettings_test.js | 0 .../auth/test/actioncodeurl_test.js | 0 .../auth/test/additionaluserinfo_test.js | 0 .../auth/test/args_test.js | 0 .../auth/test/auth_test.js | 0 .../auth/test/authcredential_test.js | 0 .../auth/test/authevent_test.js | 0 .../auth/test/autheventmanager_test.js | 0 .../auth/test/authsettings_test.js | 0 .../auth/test/authstorage_test.js | 0 .../auth/test/authuser_test.js | 0 .../auth/test/cacherequest_test.js | 0 .../auth/test/confirmationresult_test.js | 0 .../auth/test/cordovahandler_test.js | 0 .../auth/test/defines_test.js | 0 .../auth/test/deprecation_test.js | 0 .../auth/test/dynamiclink_test.js | 0 .../auth/test/error_test.js | 0 .../auth/test/exports_lib_test.js | 0 .../auth/test/idp_test.js | 0 .../auth/test/idtoken_test.js | 0 .../auth/test/idtokenresult_test.js | 0 .../auth/test/iframeclient/ifchandler_test.js | 0 .../test/iframeclient/iframewrapper_test.js | 0 .../test/messagechannel/postmessager_test.js | 0 .../auth/test/messagechannel/receiver_test.js | 0 .../auth/test/messagechannel/sender_test.js | 0 .../auth/test/multifactorassertion_test.js | 0 .../auth/test/multifactorerror_test.js | 0 .../auth/test/multifactorgenerator_test.js | 0 .../auth/test/multifactorinfo_test.js | 0 .../auth/test/multifactorresolver_test.js | 0 .../auth/test/multifactorsession_test.js | 0 .../auth/test/multifactoruser_test.js | 0 .../auth/test/oauthhelperstate_test.js | 0 .../auth/test/object_test.js | 0 .../auth/test/proactiverefresh_test.js | 0 .../recaptchaverifier/grecaptchamock_test.js | 0 .../test/recaptchaverifier/mockloader_test.js | 0 .../test/recaptchaverifier/realloader_test.js | 0 .../recaptchaverifier_test.js | 0 .../auth/test/rpchandler_test.js | 0 .../auth/test/storage/asyncstorage_test.js | 0 .../auth/test/storage/factory_test.js | 0 .../auth/test/storage/hybridindexeddb_test.js | 0 .../auth/test/storage/indexeddb_test.js | 0 .../auth/test/storage/inmemorystorage_test.js | 0 .../auth/test/storage/localstorage_test.js | 0 .../auth/test/storage/mockstorage_test.js | 0 .../auth/test/storage/nullstorage_test.js | 0 .../auth/test/storage/sessionstorage_test.js | 0 .../auth/test/storage/testhelper.js | 0 .../auth/test/storageautheventmanager_test.js | 0 .../test/storageoauthhandlermanager_test.js | 0 .../storagependingredirectmanager_test.js | 0 .../test/storageredirectusermanager_test.js | 0 .../auth/test/storageusermanager_test.js | 0 .../auth/test/testhelper.js | 0 .../auth/test/token_test.js | 0 .../auth/test/universallinksubscriber_test.js | 0 .../auth/test/userevent_test.js | 0 .../auth/test/utils_test.js | 0 .../firebase}/.gitignore | 0 .../firebase/CHANGELOG.md | 0 {packages => packages-old}/firebase/README.md | 0 .../firebase/analytics/index.ts | 0 .../firebase/analytics/package.json | 0 .../firebase/app-check/index.ts | 0 .../firebase/app-check/package.json | 0 .../firebase/app/index.ts | 0 .../firebase/app/package.json | 0 .../firebase/auth/index.ts | 0 .../firebase/auth/package.json | 0 .../firebase/database/index.ts | 0 .../firebase/database/package.json | 0 .../firebase/empty-import.d.ts | 0 .../firebase/externs/firebase-app-externs.js | 0 .../externs/firebase-app-internal-externs.js | 0 .../firebase/externs/firebase-auth-externs.js | 0 .../externs/firebase-client-auth-externs.js | 0 .../externs/firebase-database-externs.js | 0 .../firebase-database-internal-externs.js | 0 .../externs/firebase-error-externs.js | 0 .../firebase/externs/firebase-externs.js | 0 .../externs/firebase-firestore-externs.js | 0 .../externs/firebase-messaging-externs.js | 0 .../externs/firebase-storage-externs.js | 0 .../firebase/firestore/bundle/index.ts | 0 .../firebase/firestore/bundle/package.json | 0 .../firebase/firestore/index.cdn.ts | 0 .../firebase/firestore/index.ts | 0 .../firebase/firestore/memory/bundle/index.ts | 0 .../firestore/memory/bundle/package.json | 0 .../firebase/firestore/memory/index.cdn.ts | 0 .../firebase/firestore/memory/index.ts | 0 .../firebase/firestore/memory/package.json | 0 .../firebase/firestore/package.json | 0 .../firebase/functions/index.ts | 0 .../firebase/functions/package.json | 0 .../firebase/index.d.ts | 0 .../firebase/index.html | 0 .../firebase/installations/index.ts | 0 .../firebase/installations/package.json | 0 .../firebase/messaging/index.ts | 0 .../firebase/messaging/package.json | 0 .../firebase/package.json | 0 .../firebase/performance/index.ts | 0 .../firebase/performance/package.json | 0 .../firebase/remote-config/index.ts | 0 .../firebase/remote-config/package.json | 0 .../firebase/rollup-internal.config.js | 0 .../firebase/rollup.config.js | 0 .../firebase/src/index.cdn.ts | 0 .../firebase/src/index.node.ts | 0 .../firebase/src/index.perf.ts | 0 .../firebase/src/index.rn.ts | 0 .../firebase/src/index.ts | 0 .../firebase/storage/index.ts | 0 .../firebase/storage/package.json | 0 .../firebase/tsconfig.json | 0 .../functions/.eslintrc.js | 0 .../functions/.npmignore | 0 .../functions/CHANGELOG.md | 0 .../functions}/README.md | 0 .../functions/index.node.ts | 0 {packages => packages-old}/functions/index.ts | 0 .../functions/karma.conf.js | 0 .../functions/package.json | 0 .../functions/rollup.config.js | 0 .../functions/src/api/error.ts | 0 .../functions/src/api/service.ts | 0 .../functions/src/config.ts | 0 .../functions/src/context.ts | 0 .../functions/src/serializer.ts | 0 .../functions/test/browser/callable.test.ts | 0 .../functions/test/callable.test.ts | 0 .../functions/test/serializer.test.ts | 0 .../functions/test/service.test.ts | 0 .../functions/test/utils.ts | 0 .../functions}/tsconfig.json | 0 .../installations/.eslintrc.js | 0 .../installations/CHANGELOG.md | 0 .../installations/karma.conf.js | 0 .../installations/package.json | 0 .../installations/rollup.config.js | 0 .../installations/src/api}/common.test.ts | 0 .../installations/src/api/common.ts | 0 .../api/create-installation-request.test.ts | 0 .../src/api/create-installation-request.ts | 0 .../api/delete-installation-request.test.ts | 0 .../src/api/delete-installation-request.ts | 0 .../api/generate-auth-token-request.test.ts | 0 .../src/api/generate-auth-token-request.ts | 0 .../src/functions/delete-installation.test.ts | 0 .../src/functions/delete-installation.ts | 0 .../src/functions/get-id.test.ts | 0 .../installations/src/functions/get-id.ts | 0 .../src/functions/get-token.test.ts | 0 .../installations/src/functions/get-token.ts | 0 .../installations/src/functions/index.ts | 0 .../src/functions/on-id-change.test.ts | 0 .../src/functions/on-id-change.ts | 0 .../helpers/buffer-to-base64-url-safe.test.ts | 0 .../src/helpers/buffer-to-base64-url-safe.ts | 0 .../src/helpers/extract-app-config.test.ts | 0 .../src/helpers/extract-app-config.ts | 0 .../src/helpers/fid-changed.test.ts | 0 .../installations/src/helpers/fid-changed.ts | 0 .../src/helpers/generate-fid.test.ts | 0 .../src/helpers/generate-fid.ts | 0 .../helpers/get-installation-entry.test.ts | 0 .../src/helpers/get-installation-entry.ts | 0 .../src/helpers/idb-manager.test.ts | 0 .../installations/src/helpers/idb-manager.ts | 0 .../src/helpers/refresh-auth-token.test.ts | 0 .../src/helpers/refresh-auth-token.ts | 0 .../installations/src/index.ts | 0 .../src/interfaces/api-response.ts | 0 .../src/interfaces/app-config.ts | 0 .../src/interfaces/firebase-dependencies.ts | 0 .../src/interfaces/installation-entry.ts | 0 .../src/testing/compare-headers.test.ts | 0 .../src/testing/compare-headers.ts | 0 .../src/testing/fake-generators.ts | 0 .../installations}/src/testing/setup.ts | 0 .../installations}/src/util/constants.ts | 0 .../installations}/src/util/errors.ts | 0 .../installations/src/util/get-key.ts | 0 .../installations/src/util/sleep.test.ts | 0 .../installations/src/util/sleep.ts | 0 .../installations}/test-app/.gitignore | 0 .../installations/test-app/index.html | 0 .../installations/test-app/index.js | 0 .../installations/test-app/rollup.config.js | 0 .../installations/tsconfig.json | 0 .../messaging/.eslintrc.js | 0 .../messaging/.npmignore | 0 .../messaging/CHANGELOG.md | 0 .../messaging}/README.md | 0 .../messaging}/karma.conf.js | 0 .../messaging/package.json | 0 .../messaging/rollup.config.js | 0 .../src/controllers/sw-controller.test.ts | 0 .../src/controllers/sw-controller.ts | 0 .../src/controllers/window-controller.test.ts | 0 .../src/controllers/window-controller.ts | 0 .../messaging/src/core/api.test.ts | 0 .../messaging/src/core/api.ts | 0 .../src/core/token-management.test.ts | 0 .../messaging/src/core/token-management.ts | 0 .../helpers/array-base64-translator.test.ts | 0 .../src/helpers/array-base64-translator.ts | 0 .../src/helpers/externalizePayload.test.ts | 0 .../src/helpers/externalizePayload.ts | 0 .../src/helpers/extract-app-config.test.ts | 0 .../src/helpers/extract-app-config.ts | 0 .../messaging/src/helpers/idb-manager.test.ts | 0 .../messaging/src/helpers/idb-manager.ts | 0 .../src/helpers/is-console-message.ts | 0 .../src/helpers/migrate-old-database.test.ts | 0 .../src/helpers/migrate-old-database.ts | 0 .../messaging}/src/helpers/sleep.test.ts | 0 .../messaging/src/helpers}/sleep.ts | 0 .../messaging/src/index.ts | 0 .../messaging}/src/interfaces/app-config.ts | 0 .../src/interfaces/internal-dependencies.ts | 0 .../interfaces/internal-message-payload.ts | 0 .../src/interfaces/token-details.ts | 0 .../src/testing/compare-headers.test.ts | 0 .../messaging/src/testing/compare-headers.ts | 0 .../testing/fakes/firebase-dependencies.ts | 0 .../src/testing/fakes/service-worker.ts | 0 .../src/testing/fakes/token-details.ts | 0 .../messaging/src/testing/setup.ts | 0 .../messaging}/src/testing/sinon-types.ts | 0 .../messaging/src/util/constants.ts | 0 .../messaging/src/util/errors.ts | 0 .../messaging/src/util/sw-types.ts | 0 .../messaging}/tsconfig.json | 0 .../performance/.eslintrc.js | 0 .../performance/CHANGELOG.md | 0 .../performance/README.md | 0 .../performance/index.ts | 0 .../performance/karma.conf.js | 0 .../performance/package.json | 0 .../performance/rollup.config.js | 0 .../performance/src/constants.ts | 0 .../performance/src/controllers/perf.test.ts | 0 .../performance/src/controllers/perf.ts | 0 .../src/resources/network_request.test.ts | 0 .../src/resources/network_request.ts | 0 .../performance/src/resources/trace.test.ts | 0 .../performance/src/resources/trace.ts | 0 .../src/services/api_service.test.ts | 0 .../performance/src/services/api_service.ts | 0 .../src/services/iid_service.test.ts | 0 .../performance/src/services/iid_service.ts | 0 .../services/initialization_service.test.ts | 0 .../src/services/initialization_service.ts | 0 .../services/oob_resources_service.test.ts | 0 .../src/services/oob_resources_service.ts | 0 .../src/services/perf_logger.test.ts | 0 .../performance/src/services/perf_logger.ts | 0 .../services/remote_config_service.test.ts | 0 .../src/services/remote_config_service.ts | 0 .../src/services/settings_service.ts | 0 .../src/services/transport_service.test.ts | 0 .../src/services/transport_service.ts | 0 .../src/utils/attribute_utils.test.ts | 0 .../performance/src/utils/attributes_utils.ts | 0 .../performance/src/utils/console_logger.ts | 0 .../performance/src/utils/errors.ts | 0 .../src/utils/metric_utils.test.ts | 0 .../performance/src/utils/metric_utils.ts | 0 .../src/utils/string_merger.test.ts | 0 .../performance/src/utils/string_merger.ts | 0 .../performance/test/setup.ts | 0 .../performance}/tsconfig.json | 0 {packages => packages-old}/polyfill/README.md | 0 {packages => packages-old}/polyfill/index.ts | 0 .../polyfill/package.json | 0 .../polyfill/rollup.config.js | 0 .../polyfill/tsconfig.json | 0 .../remote-config/.eslintrc.js | 0 .../remote-config}/.npmignore | 0 .../remote-config/CHANGELOG.md | 0 .../remote-config}/README.md | 0 .../remote-config/index.ts | 0 .../remote-config}/karma.conf.js | 0 .../remote-config/package.json | 0 .../remote-config/rollup.config.js | 0 .../src/client/caching_client.ts | 0 .../src/client/remote_config_fetch_client.ts | 0 .../remote-config/src/client/rest_client.ts | 0 .../src/client/retrying_client.ts | 0 .../remote-config}/src/errors.ts | 0 .../remote-config}/src/language.ts | 0 .../remote-config/src/remote_config.ts | 0 .../remote-config}/src/storage/storage.ts | 0 .../src/storage/storage_cache.ts | 0 .../remote-config}/src/value.ts | 0 .../test/client/caching_client.test.ts | 0 .../test/client/rest_client.test.ts | 0 .../test/client/retrying_client.test.ts | 0 .../remote-config}/test/errors.test.ts | 0 .../remote-config}/test/language.test.ts | 0 .../remote-config/test/remote_config.test.ts | 0 .../remote-config}/test/setup.ts | 0 .../test/storage/storage.test.ts | 0 .../test/storage/storage_cache.test.ts | 0 .../remote-config}/test/value.test.ts | 0 .../remote-config/test_app/index.html | 0 .../remote-config/test_app/index.js | 0 .../remote-config}/tsconfig.json | 0 .../analytics-compat}/.eslintrc.js | 0 .../analytics-compat}/karma.conf.js | 0 .../analytics-compat/package.json | 0 .../analytics-compat/rollup.config.js | 0 .../analytics-compat/rollup.config.release.js | 0 .../analytics-compat/rollup.shared.js | 0 .../analytics-compat/src/constants.ts | 0 .../analytics-compat/src/index.ts | 0 .../analytics-compat/src/service.test.ts | 0 .../analytics-compat/src/service.ts | 0 .../analytics-compat}/tsconfig.json | 0 .../{analytics => analytics-exp}/.eslintrc.js | 0 .../{analytics => analytics-exp}/README.md | 0 .../analytics-exp/api-extractor.json | 0 .../karma.conf.js | 0 .../karma.integration.conf.js | 0 .../analytics-exp/package.json | 0 .../analytics-exp/rollup.config.js | 0 .../analytics-exp/rollup.config.release.js | 0 .../analytics-exp/rollup.shared.js | 0 .../analytics-exp/src/api.test.ts | 0 .../analytics-exp/src/api.ts | 0 .../analytics-exp/src/constants.ts | 0 .../analytics-exp/src/errors.ts | 0 .../analytics-exp/src/factory.ts | 0 .../analytics-exp/src/functions.test.ts | 0 .../analytics-exp/src/functions.ts | 0 .../analytics-exp/src/get-config.test.ts | 0 .../analytics-exp/src/get-config.ts | 0 .../analytics-exp/src/helpers.test.ts | 0 .../analytics-exp/src/helpers.ts | 0 .../analytics-exp/src/index.test.ts | 0 .../analytics-exp/src/index.ts | 0 .../src/initialize-analytics.test.ts | 0 .../analytics-exp/src/initialize-analytics.ts | 0 .../src/logger.ts | 0 .../analytics-exp/src/public-types.ts | 0 .../analytics-exp/src/types.ts | 0 .../testing/get-fake-firebase-services.ts | 0 .../testing/gtag-script-util.ts | 0 .../testing/integration-tests/integration.ts | 0 .../testing/setup.ts | 0 .../analytics-exp}/tsconfig.json | 0 .../app-check-compat/.eslintrc.js | 0 .../app-check-compat/README.md | 0 .../app-check-compat/karma.conf.js | 0 .../app-check-compat/package.json | 0 .../app-check-compat/rollup.config.js | 0 .../app-check-compat/rollup.config.release.js | 0 .../app-check-compat/rollup.shared.js | 0 .../app-check-compat/src/errors.ts | 0 .../app-check-compat/src/index.ts | 0 .../app-check-compat/src/service.test.ts | 0 .../app-check-compat/src/service.ts | 0 .../app-check-compat}/tsconfig.json | 0 .../app-check-exp/.eslintrc.js | 0 .../app-check-exp/README.md | 0 .../app-check-exp/api-extractor.json | 0 .../app-check-exp/karma.conf.js | 0 .../app-check-exp/package.json | 0 .../app-check-exp/rollup.config.js | 0 .../app-check-exp/rollup.config.release.js | 0 .../app-check-exp/rollup.shared.js | 0 .../app-check-exp/src/api.test.ts | 0 .../app-check-exp/src/api.ts | 0 .../app-check-exp/src/client.test.ts | 0 .../app-check-exp/src/client.ts | 0 .../src/constants.ts | 0 .../src/debug.test.ts | 0 .../{app-check => app-check-exp}/src/debug.ts | 0 .../app-check-exp/src/errors.ts | 0 .../app-check-exp/src/factory.ts | 0 .../app-check-exp/src/index.ts | 0 .../app-check-exp/src/indexeddb.ts | 0 .../app-check-exp/src/internal-api.test.ts | 0 .../app-check-exp/src/internal-api.ts | 0 .../src/logger.ts | 0 .../src/proactive-refresh.test.ts | 0 .../src/proactive-refresh.ts | 0 .../app-check-exp/src/providers.ts | 0 .../app-check-exp/src/public-types.ts | 0 .../app-check-exp/src/recaptcha.test.ts | 0 .../app-check-exp/src/recaptcha.ts | 0 .../app-check-exp/src/state.ts | 0 .../src/storage.test.ts | 0 .../app-check-exp/src/storage.ts | 0 .../app-check-exp/src/types.ts | 0 .../app-check-exp/src/util.ts | 0 .../test/setup.ts | 0 .../app-check-exp/test/util.ts | 0 .../tsconfig.json | 0 .../app-compat}/.eslintrc.js | 0 .../app-compat/README.md | 0 .../app-compat/karma.conf.js | 0 .../app-compat/package.json | 0 .../app-compat/rollup.config.js | 0 .../app-compat/rollup.config.release.js | 0 .../app-compat/src/errors.ts | 0 .../app-compat/src/firebaseApp.ts | 0 .../app-compat/src/firebaseNamespace.ts | 0 .../app-compat/src/firebaseNamespaceCore.ts | 0 .../app-compat/src/index.lite.ts | 0 .../app-compat/src/index.ts | 0 .../app-compat/src/lite/firebaseAppLite.ts | 0 .../src/lite/firebaseNamespaceLite.ts | 0 .../app-compat/src/logger.ts | 0 .../app-compat/src/public-types.ts | 0 .../app-compat/src/registerCoreComponents.ts | 0 .../app-compat/src/types.ts | 0 .../app-compat/test/firebaseAppCompat.test.ts | 0 .../app-compat}/test/setup.ts | 0 .../app-compat/test/util.ts | 0 .../app-compat/tsconfig.json | 0 .../app-exp}/.eslintrc.js | 0 {packages-exp => packages}/app-exp/README.md | 0 .../app-exp/api-extractor.json | 0 .../app-exp/karma.conf.js | 0 .../app-exp/package.json | 0 .../app-exp/rollup.config.js | 0 .../app-exp/rollup.config.release.js | 0 .../app-exp/rollup.shared.js | 0 .../app-exp/src/api.test.ts | 0 {packages-exp => packages}/app-exp/src/api.ts | 0 .../app-exp/src/constants.ts | 0 .../app-exp/src/errors.ts | 0 .../app-exp/src/firebaseApp.test.ts | 0 .../app-exp/src/firebaseApp.ts | 0 .../app-exp/src/index.ts | 0 .../app-exp/src/internal.test.ts | 0 .../app-exp/src/internal.ts | 0 packages/{app => app-exp}/src/logger.ts | 0 .../app-exp/src/platformLoggerService.test.ts | 0 .../app-exp/src/platformLoggerService.ts | 0 .../app-exp/src/public-types.ts | 0 .../app-exp/src/registerCoreComponents.ts | 0 .../app-exp/src/types.ts | 0 .../app-exp}/test/setup.ts | 0 .../app-exp/test/util.ts | 0 .../app-exp/tsconfig.json | 0 .../auth-compat-exp/.eslintrc.js | 0 .../auth-compat-exp/README.md | 0 .../auth-compat-exp/demo/.eslintignore | 0 .../auth-compat-exp/demo/.eslintrc.js | 0 .../auth-compat-exp/demo/.gitignore | 0 .../auth-compat-exp/demo/README.md | 0 .../auth-compat-exp}/demo/database.rules.json | 0 .../auth-compat-exp/demo/firebase.json | 0 .../auth-compat-exp/demo/functions/index.js | 0 .../demo/functions/package.json | 0 .../auth-compat-exp/demo/functions/yarn.lock | 0 .../auth-compat-exp/demo/package.json | 0 .../auth-compat-exp/demo/public/common.js | 0 .../demo/public/manifest.json | 0 .../demo/public/sample-config.js | 0 .../auth-compat-exp/demo/public/script.js | 0 .../auth-compat-exp}/demo/public/style.css | 0 .../auth-compat-exp/demo/rollup.config.js | 0 .../auth-compat-exp/demo/tsconfig.json | 0 .../auth-compat-exp/demo/yarn.lock | 0 .../auth-compat-exp/index.node.ts | 0 .../auth-compat-exp/index.ts | 0 .../auth-compat-exp/karma.conf.js | 0 .../auth-compat-exp/package.json | 0 .../auth-compat-exp/rollup.config.js | 0 .../auth-compat-exp/rollup.config.release.js | 0 .../auth-compat-exp/rollup.config.shared.js | 0 .../auth-compat-exp/scripts/run_node_tests.ts | 0 .../auth-compat-exp/src/auth.test.ts | 0 .../auth-compat-exp/src/auth.ts | 0 .../auth-compat-exp/src/persistence.ts | 0 .../src/phone_auth_provider.ts | 0 .../auth-compat-exp/src/platform.ts | 0 .../src/popup_redirect.test.ts | 0 .../auth-compat-exp/src/popup_redirect.ts | 0 .../auth-compat-exp/src/recaptcha_verifier.ts | 0 .../auth-compat-exp/src/user.ts | 0 .../auth-compat-exp/src/user_credential.ts | 0 .../auth-compat-exp/src/wrap.ts | 0 .../auth-compat-exp/test/helpers/helpers.ts | 0 .../test/integration/flows/anonymous.test.ts | 0 .../test/integration/flows/custom.test.ts | 0 .../test/integration/flows/email.test.ts | 0 .../test/integration/flows/idp.test.ts | 0 .../test/integration/flows/oob.test.ts | 0 .../test/integration/flows/phone.test.ts | 0 .../integration/webdriver/static/anonymous.js | 0 .../test/integration/webdriver/static/core.js | 0 .../integration/webdriver/static/email.js | 0 .../integration/webdriver/static/index.html | 0 .../integration/webdriver/static/index.js | 0 .../integration/webdriver/static/lazy_load.js | 0 .../webdriver/static/logged_in.html | 0 .../webdriver/static/persistence.js | 0 .../integration/webdriver/static/popup.js | 0 .../integration/webdriver/static/redirect.js | 0 .../webdriver/static/rollup.config.js | 0 .../test/integration/webdriver/static/ui.js | 0 .../auth-compat-exp}/tsconfig.json | 0 .../auth-exp/.eslintrc.js | 0 {packages-exp => packages}/auth-exp/README.md | 0 .../auth-exp/api-extractor.json | 0 .../auth-exp/cordova/demo/.gitignore | 0 .../auth-exp/cordova/demo/README.md | 0 .../auth-exp/cordova/demo/package.json | 0 .../auth-exp/cordova/demo/rollup.config.js | 0 .../auth-exp/cordova/demo/sample-config.xml | 0 .../auth-exp/cordova/demo/src/index.js | 0 .../auth-exp/cordova/demo/src/logging.js | 0 .../cordova/demo/src/sample-config.js | 0 .../auth-exp/cordova/demo/www/index.html | 0 .../auth-exp/cordova/demo/www/style.css | 0 .../auth-exp/cordova/package.json | 0 .../auth-exp/demo/.eslintignore | 0 .../auth-exp/demo/.eslintrc.js | 0 .../auth-exp/demo/.gitignore | 0 .../auth-exp/demo/README.md | 0 .../demo/database.rules.json | 0 .../auth-exp/demo/firebase.json | 0 .../auth-exp/demo/functions/index.js | 0 .../auth-exp/demo/functions/package.json | 0 .../auth-exp/demo/functions/yarn.lock | 0 .../auth-exp/demo/package.json | 0 .../auth-exp/demo/public/common.js | 0 .../auth-exp/demo/public/index.html | 0 .../demo/public/manifest.json | 0 .../{auth => auth-exp}/demo/public/style.css | 0 .../auth-exp/demo/rollup.config.js | 0 .../auth-exp/demo/src/config.d.ts | 0 .../auth-exp/demo/src/index.js | 0 .../auth-exp/demo/src/logging.js | 0 .../auth-exp/demo/src/sample-config.js | 0 .../demo/src/worker/service-worker.ts | 0 .../auth-exp/demo/src/worker/tsconfig.json | 0 .../auth-exp/demo/src/worker/web-worker.ts | 0 .../auth-exp/demo/tsconfig.json | 0 .../auth-exp/index.cordova.ts | 0 .../auth-exp/index.doc.ts | 0 .../auth-exp/index.node.ts | 0 .../auth-exp/index.rn.ts | 0 {packages-exp => packages}/auth-exp/index.ts | 0 .../auth-exp/index.webworker.ts | 0 .../auth-exp/internal/index.ts | 0 .../auth-exp/internal/package.json | 0 .../auth-exp/karma.conf.js | 0 .../auth-exp/package.json | 0 .../auth-exp/react-native/package.json | 0 .../auth-exp/rollup.config.js | 0 .../auth-exp/rollup.config.release.js | 0 .../auth-exp/rollup.config.shared.js | 0 .../auth-exp/scripts/run-node-tests.js | 0 .../auth-exp/scripts/run-node-tests.ts | 0 .../api/account_management/account.test.ts | 0 .../src/api/account_management/account.ts | 0 .../email_and_password.test.ts | 0 .../account_management/email_and_password.ts | 0 .../src/api/account_management/mfa.test.ts | 0 .../src/api/account_management/mfa.ts | 0 .../api/account_management/profile.test.ts | 0 .../src/api/account_management/profile.ts | 0 .../authentication/create_auth_uri.test.ts | 0 .../src/api/authentication/create_auth_uri.ts | 0 .../api/authentication/custom_token.test.ts | 0 .../src/api/authentication/custom_token.ts | 0 .../authentication/email_and_password.test.ts | 0 .../api/authentication/email_and_password.ts | 0 .../src/api/authentication/email_link.test.ts | 0 .../src/api/authentication/email_link.ts | 0 .../src/api/authentication/idp.test.ts | 0 .../auth-exp/src/api/authentication/idp.ts | 0 .../src/api/authentication/mfa.test.ts | 0 .../auth-exp/src/api/authentication/mfa.ts | 0 .../src/api/authentication/recaptcha.test.ts | 0 .../src/api/authentication/recaptcha.ts | 0 .../src/api/authentication/sign_up.test.ts | 0 .../src/api/authentication/sign_up.ts | 0 .../src/api/authentication/sms.test.ts | 0 .../auth-exp/src/api/authentication/sms.ts | 0 .../src/api/authentication/token.test.ts | 0 .../auth-exp/src/api/authentication/token.ts | 0 .../auth-exp/src/api/errors.ts | 0 .../auth-exp/src/api/index.test.ts | 0 .../auth-exp/src/api/index.ts | 0 .../project_config/get_project_config.test.ts | 0 .../api/project_config/get_project_config.ts | 0 .../auth-exp/src/core/action_code_url.test.ts | 0 .../auth-exp/src/core/action_code_url.ts | 0 .../src/core/auth/auth_event_manager.test.ts | 0 .../src/core/auth/auth_event_manager.ts | 0 .../auth-exp/src/core/auth/auth_impl.test.ts | 0 .../auth-exp/src/core/auth/auth_impl.ts | 0 .../auth-exp/src/core/auth/emulator.test.ts | 0 .../auth-exp/src/core/auth/emulator.ts | 0 .../src/core/auth/firebase_internal.test.ts | 0 .../src/core/auth/firebase_internal.ts | 0 .../auth-exp/src/core/auth/initialize.test.ts | 0 .../auth-exp/src/core/auth/initialize.ts | 0 .../auth-exp/src/core/auth/register.ts | 0 .../src/core/credentials/auth_credential.ts | 0 .../src/core/credentials/email.test.ts | 0 .../auth-exp/src/core/credentials/email.ts | 0 .../auth-exp/src/core/credentials/index.ts | 0 .../src/core/credentials/oauth.test.ts | 0 .../auth-exp/src/core/credentials/oauth.ts | 0 .../src/core/credentials/phone.test.ts | 0 .../auth-exp/src/core/credentials/phone.ts | 0 .../src/core/credentials/saml.test.ts | 0 .../auth-exp/src/core/credentials/saml.ts | 0 .../auth-exp/src/core/errors.test.ts | 0 .../auth-exp/src/core/errors.ts | 0 .../auth-exp/src/core/index.ts | 0 .../src/core/persistence/in_memory.test.ts | 0 .../src/core/persistence/in_memory.ts | 0 .../auth-exp/src/core/persistence/index.ts | 0 .../persistence_user_manager.test.ts | 0 .../persistence/persistence_user_manager.ts | 0 .../auth-exp/src/core/providers/email.test.ts | 0 .../auth-exp/src/core/providers/email.ts | 0 .../src/core/providers/facebook.test.ts | 0 .../auth-exp/src/core/providers/facebook.ts | 0 .../src/core/providers/federated.test.ts | 0 .../auth-exp/src/core/providers/federated.ts | 0 .../src/core/providers/github.test.ts | 0 .../auth-exp/src/core/providers/github.ts | 0 .../src/core/providers/google.test.ts | 0 .../auth-exp/src/core/providers/google.ts | 0 .../auth-exp/src/core/providers/oauth.test.ts | 0 .../auth-exp/src/core/providers/oauth.ts | 0 .../auth-exp/src/core/providers/saml.test.ts | 0 .../auth-exp/src/core/providers/saml.ts | 0 .../src/core/providers/twitter.test.ts | 0 .../auth-exp/src/core/providers/twitter.ts | 0 .../abstract_popup_redirect_operation.test.ts | 0 .../abstract_popup_redirect_operation.ts | 0 .../strategies/action_code_settings.test.ts | 0 .../core/strategies/action_code_settings.ts | 0 .../src/core/strategies/anonymous.test.ts | 0 .../auth-exp/src/core/strategies/anonymous.ts | 0 .../src/core/strategies/credential.test.ts | 0 .../src/core/strategies/credential.ts | 0 .../src/core/strategies/custom_token.test.ts | 0 .../src/core/strategies/custom_token.ts | 0 .../src/core/strategies/email.test.ts | 0 .../auth-exp/src/core/strategies/email.ts | 0 .../strategies/email_and_password.test.ts | 0 .../src/core/strategies/email_and_password.ts | 0 .../src/core/strategies/email_link.test.ts | 0 .../src/core/strategies/email_link.ts | 0 .../auth-exp/src/core/strategies/idp.test.ts | 0 .../auth-exp/src/core/strategies/idp.ts | 0 .../src/core/strategies/redirect.test.ts | 0 .../auth-exp/src/core/strategies/redirect.ts | 0 .../src/core/user/account_info.test.ts | 0 .../auth-exp/src/core/user/account_info.ts | 0 .../core/user/additional_user_info.test.ts | 0 .../src/core/user/additional_user_info.ts | 0 .../src/core/user/id_token_result.test.ts | 0 .../auth-exp/src/core/user/id_token_result.ts | 0 .../src/core/user/invalidation.test.ts | 0 .../auth-exp/src/core/user/invalidation.ts | 0 .../src/core/user/link_unlink.test.ts | 0 .../auth-exp/src/core/user/link_unlink.ts | 0 .../src/core/user/proactive_refresh.test.ts | 0 .../src/core/user/proactive_refresh.ts | 0 .../src/core/user/reauthenticate.test.ts | 0 .../auth-exp/src/core/user/reauthenticate.ts | 0 .../auth-exp/src/core/user/reload.test.ts | 0 .../auth-exp/src/core/user/reload.ts | 0 .../src/core/user/token_manager.test.ts | 0 .../auth-exp/src/core/user/token_manager.ts | 0 .../core/user/user_credential_impl.test.ts | 0 .../src/core/user/user_credential_impl.ts | 0 .../auth-exp/src/core/user/user_impl.test.ts | 0 .../auth-exp/src/core/user/user_impl.ts | 0 .../auth-exp/src/core/user/user_metadata.ts | 0 .../auth-exp/src/core/util/assert.test.ts | 0 .../auth-exp/src/core/util/assert.ts | 0 .../auth-exp/src/core/util/browser.test.ts | 0 .../auth-exp/src/core/util/browser.ts | 0 .../auth-exp/src/core/util/delay.test.ts | 0 .../auth-exp/src/core/util/delay.ts | 0 .../auth-exp/src/core/util/emulator.test.ts | 0 .../auth-exp/src/core/util/emulator.ts | 0 .../auth-exp/src/core/util/event_id.test.ts | 0 .../auth-exp/src/core/util/event_id.ts | 0 .../auth-exp/src/core/util/fetch_provider.ts | 0 .../auth-exp/src/core/util/handler.ts | 0 .../src/core/util/instantiator.test.ts | 0 .../auth-exp/src/core/util/instantiator.ts | 0 .../auth-exp/src/core/util/location.ts | 0 .../auth-exp/src/core/util/log.ts | 0 .../auth-exp/src/core/util/navigator.ts | 0 .../auth-exp/src/core/util/providers.ts | 0 .../auth-exp/src/core/util/resolver.ts | 0 .../auth-exp/src/core/util/time.ts | 0 .../src/core/util/validate_origin.test.ts | 0 .../auth-exp/src/core/util/validate_origin.ts | 0 .../auth-exp/src/core/util/version.test.ts | 0 .../auth-exp/src/core/util/version.ts | 0 .../auth-exp/src/index.ts | 0 .../auth-exp/src/mfa/index.ts | 0 .../auth-exp/src/mfa/mfa_assertion.ts | 0 .../auth-exp/src/mfa/mfa_error.ts | 0 .../auth-exp/src/mfa/mfa_info.test.ts | 0 .../auth-exp/src/mfa/mfa_info.ts | 0 .../auth-exp/src/mfa/mfa_resolver.test.ts | 0 .../auth-exp/src/mfa/mfa_resolver.ts | 0 .../auth-exp/src/mfa/mfa_session.test.ts | 0 .../auth-exp/src/mfa/mfa_session.ts | 0 .../auth-exp/src/mfa/mfa_user.test.ts | 0 .../auth-exp/src/mfa/mfa_user.ts | 0 .../src/model/application_verifier.ts | 0 .../auth-exp/src/model/auth.ts | 0 .../auth-exp/src/model/enum_maps.ts | 0 .../auth-exp/src/model/enums.ts | 0 .../auth-exp/src/model/id_token.ts | 0 .../auth-exp/src/model/popup_redirect.ts | 0 .../auth-exp/src/model/public_types.ts | 0 .../auth-exp/src/model/user.ts | 0 .../src/platform_browser/auth.test.ts | 0 .../src/platform_browser/auth_window.ts | 0 .../platform_browser/iframe/gapi.iframes.ts | 0 .../src/platform_browser/iframe/gapi.test.ts | 0 .../src/platform_browser/iframe/gapi.ts | 0 .../platform_browser/iframe/iframe.test.ts | 0 .../src/platform_browser/iframe/iframe.ts | 0 .../src/platform_browser/load_js.test.ts | 0 .../auth-exp/src/platform_browser/load_js.ts | 0 .../platform_browser/messagechannel/index.ts | 0 .../messagechannel/promise.test.ts | 0 .../messagechannel/promise.ts | 0 .../messagechannel/receiver.test.ts | 0 .../messagechannel/receiver.ts | 0 .../messagechannel/sender.test.ts | 0 .../platform_browser/messagechannel/sender.ts | 0 .../mfa/assertions/phone.test.ts | 0 .../platform_browser/mfa/assertions/phone.ts | 0 .../platform_browser/persistence/browser.ts | 0 .../persistence/indexed_db.test.ts | 0 .../persistence/indexed_db.ts | 0 .../persistence/local_storage.test.ts | 0 .../persistence/local_storage.ts | 0 .../persistence/session_storage.test.ts | 0 .../persistence/session_storage.ts | 0 .../platform_browser/popup_redirect.test.ts | 0 .../src/platform_browser/popup_redirect.ts | 0 .../platform_browser/providers/phone.test.ts | 0 .../src/platform_browser/providers/phone.ts | 0 .../platform_browser/recaptcha/recaptcha.ts | 0 .../recaptcha/recaptcha_loader.test.ts | 0 .../recaptcha/recaptcha_loader.ts | 0 .../recaptcha/recaptcha_mock.test.ts | 0 .../recaptcha/recaptcha_mock.ts | 0 .../recaptcha/recaptcha_verifier.test.ts | 0 .../recaptcha/recaptcha_verifier.ts | 0 .../platform_browser/strategies/phone.test.ts | 0 .../src/platform_browser/strategies/phone.ts | 0 .../platform_browser/strategies/popup.test.ts | 0 .../src/platform_browser/strategies/popup.ts | 0 .../strategies/redirect.test.ts | 0 .../platform_browser/strategies/redirect.ts | 0 .../src/platform_browser/util/popup.test.ts | 0 .../src/platform_browser/util/popup.ts | 0 .../src/platform_browser/util/worker.ts | 0 .../auth-exp/src/platform_cordova/plugins.ts | 0 .../popup_redirect/events.test.ts | 0 .../platform_cordova/popup_redirect/events.ts | 0 .../popup_redirect/popup_redirect.test.ts | 0 .../popup_redirect/popup_redirect.ts | 0 .../popup_redirect/utils.test.ts | 0 .../platform_cordova/popup_redirect/utils.ts | 0 .../platform_cordova/strategies/redirect.ts | 0 .../persistence/react_native.test.ts | 0 .../persistence/react_native.ts | 0 .../platform_react_native/react-native.d.ts | 0 .../auth-exp/test/helpers/api/helper.ts | 0 .../auth-exp/test/helpers/delay.ts | 0 .../test/helpers/fake_service_worker.ts | 0 .../test/helpers/id_token_response.ts | 0 .../auth-exp/test/helpers/iframe_event.ts | 0 .../integration/emulator_rest_helpers.ts | 0 .../test/helpers/integration/helpers.ts | 0 .../test/helpers/integration/settings.ts | 0 .../auth-exp/test/helpers/jwt.ts | 0 .../auth-exp/test/helpers/mock_auth.ts | 0 .../test/helpers/mock_auth_credential.ts | 0 .../auth-exp/test/helpers/mock_fetch.test.ts | 0 .../auth-exp/test/helpers/mock_fetch.ts | 0 .../helpers/mock_popup_redirect_resolver.ts | 0 .../test/helpers/redirect_persistence.ts | 0 .../auth-exp/test/helpers/timeout_stub.ts | 0 .../test/integration/flows/anonymous.test.ts | 0 .../integration/flows/custom.local.test.ts | 0 .../test/integration/flows/email.test.ts | 0 .../test/integration/flows/idp.local.test.ts | 0 .../test/integration/flows/oob.local.test.ts | 0 .../test/integration/flows/phone.test.ts | 0 .../integration/webdriver/anonymous.test.ts | 0 .../webdriver/compat/firebaseui.test.ts | 0 .../integration/webdriver/persistence.test.ts | 0 .../test/integration/webdriver/popup.test.ts | 0 .../integration/webdriver/redirect.test.ts | 0 .../integration/webdriver/static/anonymous.js | 0 .../test/integration/webdriver/static/core.js | 0 .../integration/webdriver/static/email.js | 0 .../integration/webdriver/static/index.html | 0 .../integration/webdriver/static/index.js | 0 .../webdriver/static/persistence.js | 0 .../integration/webdriver/static/popup.js | 0 .../integration/webdriver/static/redirect.js | 0 .../webdriver/static/rollup.config.js | 0 .../integration/webdriver/util/auth_driver.ts | 0 .../integration/webdriver/util/functions.ts | 0 .../integration/webdriver/util/idp_page.ts | 0 .../webdriver/util/js_load_condition.ts | 0 .../integration/webdriver/util/test_runner.ts | 0 .../integration/webdriver/util/test_server.ts | 0 .../integration/webdriver/util/ui_page.ts | 0 .../auth-exp/tsconfig.json | 0 packages/auth/demo/public/index.html | 767 ------------------ .../firebase-exp}/.eslintrc.js | 0 .../{firebase => firebase-exp}/.gitignore | 0 .../firebase-exp/README.md | 0 .../firebase-exp/analytics/index.ts | 0 .../firebase-exp/analytics/package.json | 0 .../firebase-exp/app-check/index.ts | 0 .../firebase-exp/app-check/package.json | 0 .../firebase-exp/app/index.cdn.ts | 0 .../firebase-exp/app/index.ts | 0 .../firebase-exp/app/package.json | 0 .../firebase-exp/auth/cordova/index.ts | 0 .../firebase-exp/auth/cordova/package.json | 0 .../firebase-exp/auth/index.ts | 0 .../firebase-exp/auth/package.json | 0 .../firebase-exp/auth/react-native/index.ts | 0 .../auth/react-native/package.json | 0 .../firebase-exp/compat/analytics/index.ts | 0 .../compat/analytics/package.json | 0 .../firebase-exp/compat/app-check/index.ts | 0 .../compat/app-check/package.json | 0 .../firebase-exp/compat/app/index.cdn.ts | 0 .../firebase-exp/compat/app/index.ts | 0 .../firebase-exp/compat/app/package.json | 0 .../firebase-exp/compat/auth/index.ts | 0 .../firebase-exp/compat/auth/package.json | 0 .../firebase-exp/compat/database/index.ts | 0 .../firebase-exp/compat/database/package.json | 0 .../firebase-exp/compat/firestore/index.ts | 0 .../compat/firestore/package.json | 0 .../firebase-exp/compat/functions/index.ts | 0 .../compat/functions/package.json | 0 .../firebase-exp/compat/index.cdn.ts | 0 .../firebase-exp/compat/index.d.ts | 0 .../firebase-exp/compat/index.node.ts | 0 .../firebase-exp/compat/index.perf.ts | 0 .../firebase-exp/compat/index.rn.ts | 0 .../firebase-exp/compat/index.ts | 0 .../firebase-exp/compat/messaging/index.ts | 0 .../compat/messaging/package.json | 0 .../firebase-exp/compat/package.json | 0 .../firebase-exp/compat/performance/index.ts | 0 .../compat/performance/package.json | 0 .../compat/remote-config/index.ts | 0 .../compat/remote-config/package.json | 0 .../firebase-exp/compat/rollup.config.js | 0 .../compat/rollup.config.release.js | 0 .../firebase-exp/compat/storage/index.ts | 0 .../firebase-exp/compat/storage/package.json | 0 .../firebase-exp/database/index.ts | 0 .../firebase-exp/database/package.json | 0 .../firebase-exp/firestore/index.ts | 0 .../firebase-exp/firestore/lite/index.ts | 0 .../firebase-exp/firestore/lite/package.json | 0 .../firebase-exp/firestore/package.json | 0 .../firebase-exp/functions/index.ts | 0 .../firebase-exp/functions/package.json | 0 .../firebase-exp/gulpfile.js | 0 .../firebase-exp/messaging/index.ts | 0 .../firebase-exp/messaging/package.json | 0 .../firebase-exp/messaging/sw/index.ts | 0 .../firebase-exp/messaging/sw/package.json | 0 .../firebase-exp/package.json | 0 .../firebase-exp/performance/index.ts | 0 .../firebase-exp/performance/package.json | 0 .../firebase-exp/remote-config/index.ts | 0 .../firebase-exp/remote-config/package.json | 0 .../firebase-exp/rollup.config.js | 0 .../firebase-exp/rollup.config.release.js | 0 .../firebase-exp/storage/index.ts | 0 .../firebase-exp/storage/package.json | 0 .../firebase-exp}/tsconfig.json | 0 .../functions-compat/.eslintrc.js | 0 .../functions-compat/karma.conf.js | 0 .../functions-compat/package.json | 0 .../functions-compat/rollup.config.base.js | 0 .../functions-compat/rollup.config.js | 0 .../functions-compat/rollup.config.release.js | 0 .../functions-compat/src/callable.test.ts | 0 .../functions-compat/src/index.node.ts | 0 .../functions-compat/src/index.ts | 0 .../functions-compat/src/register.ts | 0 .../functions-compat/src/service.test.ts | 0 .../functions-compat/src/service.ts | 0 .../functions-compat/test/utils.ts | 0 .../tsconfig.json | 0 .../functions-exp/.eslintrc.js | 0 .../{functions => functions-exp}/README.md | 0 .../functions-exp/api-extractor.json | 0 .../functions-exp/karma.conf.js | 0 .../functions-exp/package.json | 0 .../functions-exp/rollup.config.js | 0 .../functions-exp/rollup.config.release.js | 0 .../functions-exp/rollup.shared.js | 0 .../functions-exp/src/api.ts | 0 .../functions-exp/src/callable.test.ts | 0 .../functions-exp/src/config.ts | 0 .../functions-exp/src/constants.ts | 0 .../functions-exp/src/context.ts | 0 .../functions-exp/src/error.ts | 0 .../functions-exp/src/index.node.ts | 0 .../functions-exp/src/index.ts | 0 .../functions-exp/src/public-types.ts | 0 .../functions-exp/src/serializer.test.ts | 0 .../functions-exp/src/serializer.ts | 0 .../functions-exp/src/service.test.ts | 0 .../functions-exp/src/service.ts | 0 .../functions-exp/test/utils.ts | 0 .../tsconfig.json | 0 .../installations-compat}/.eslintrc.js | 0 .../installations-compat/karma.conf.js | 0 .../installations-compat/package.json | 0 .../installations-compat/rollup.config.js | 0 .../rollup.config.release.js | 0 .../installations-compat/rollup.shared.js | 0 .../installations-compat/src/index.ts | 0 .../src/installationsCompat.test.ts | 0 .../src/installationsCompat.ts | 0 .../installations-compat/src/testing/setup.ts | 0 .../installations-compat/src/testing/util.ts | 0 .../installations-compat/tsconfig.json | 0 .../installations-exp}/.eslintrc.js | 0 .../installations-exp/api-extractor.json | 0 .../installations-exp/karma.conf.js | 0 .../installations-exp/package.json | 0 .../installations-exp/rollup.config.js | 0 .../rollup.config.release.js | 0 .../installations-exp/rollup.shared.js | 0 .../src/api/delete-installations.test.ts | 0 .../src/api/delete-installations.ts | 0 .../installations-exp/src/api/get-id.test.ts | 0 .../installations-exp/src/api/get-id.ts | 0 .../src/api/get-installations.ts | 0 .../src/api/get-token.test.ts | 0 .../installations-exp/src/api/get-token.ts | 0 .../installations-exp/src/api/index.ts | 0 .../src/api/on-id-change.test.ts | 0 .../installations-exp/src/api/on-id-change.ts | 0 .../src/functions}/common.test.ts | 0 .../installations-exp/src/functions/common.ts | 0 .../installations-exp/src/functions/config.ts | 0 .../create-installation-request.test.ts | 0 .../functions/create-installation-request.ts | 0 .../delete-installation-request.test.ts | 0 .../functions/delete-installation-request.ts | 0 .../generate-auth-token-request.test.ts | 0 .../functions/generate-auth-token-request.ts | 0 .../helpers/buffer-to-base64-url-safe.test.ts | 0 .../src/helpers/buffer-to-base64-url-safe.ts | 0 .../src/helpers/extract-app-config.test.ts | 0 .../src/helpers/extract-app-config.ts | 0 .../src/helpers/fid-changed.test.ts | 0 .../src/helpers/fid-changed.ts | 0 .../src/helpers/generate-fid.test.ts | 0 .../src/helpers/generate-fid.ts | 0 .../helpers/get-installation-entry.test.ts | 0 .../src/helpers/get-installation-entry.ts | 0 .../src/helpers/idb-manager.test.ts | 0 .../src/helpers/idb-manager.ts | 0 .../src/helpers/refresh-auth-token.test.ts | 0 .../src/helpers/refresh-auth-token.ts | 0 .../installations-exp/src/index.ts | 0 .../src/interfaces/api-response.ts | 0 .../src/interfaces/installation-entry.ts | 0 .../src/interfaces/installation-impl.ts | 0 .../src/interfaces/public-types.ts | 0 .../src/testing/compare-headers.test.ts | 0 .../src/testing/compare-headers.ts | 0 .../src/testing/fake-generators.ts | 0 .../src/testing/setup.ts | 0 .../src/util/constants.ts | 0 .../src/util/errors.ts | 0 .../installations-exp/src/util/get-key.ts | 0 .../installations-exp/src/util/sleep.test.ts | 0 .../installations-exp/src/util}/sleep.ts | 0 .../test-app/.gitignore | 0 .../installations-exp/test-app/index.html | 0 .../installations-exp/test-app/index.js | 0 .../test-app/rollup.config.js | 0 .../installations-exp/tsconfig.json | 0 .../messaging-compat/.eslintrc.js | 0 .../messaging-compat/README.md | 0 .../messaging-compat/karma.conf.js | 0 .../messaging-compat/package.json | 0 .../messaging-compat/rollup.config.js | 0 .../messaging-compat/rollup.config.release.js | 0 .../messaging-compat/src/index.ts | 0 .../messaging-compat/src/messaging-compat.ts | 0 .../src/registerMessagingCompat.ts | 0 .../messaging-compat/test/fakes.ts | 0 .../test/messaging-compat.test.ts | 0 .../messaging-compat}/tsconfig.json | 0 .../messaging-exp}/.eslintrc.js | 0 .../{messaging => messaging-exp}/README.md | 0 .../messaging-exp/api-extractor.json | 0 .../karma.conf.js | 0 .../messaging-exp/package.json | 0 .../messaging-exp/rollup.config.js | 0 .../messaging-exp/rollup.config.release.js | 0 .../messaging-exp/src/api.ts | 0 .../messaging-exp/src/api/deleteToken.ts | 0 .../messaging-exp/src/api/getToken.ts | 0 .../messaging-exp/src/api/isSupported.ts | 0 .../src/api/onBackgroundMessage.ts | 0 .../messaging-exp/src/api/onMessage.ts | 0 ...eliveryMetricsExportedToBigQueryEnabled.ts | 0 .../helpers/array-base64-translator.test.ts | 0 .../src/helpers/array-base64-translator.ts | 0 .../src/helpers/externalizePayload.test.ts | 0 .../src/helpers/externalizePayload.ts | 0 .../src/helpers/extract-app-config.test.ts | 0 .../src/helpers/extract-app-config.ts | 0 .../src/helpers/is-console-message.ts | 0 .../src/helpers/logToFirelog.test.ts | 0 .../messaging-exp/src/helpers/logToFirelog.ts | 0 .../messaging-exp/src/helpers/logToScion.ts | 0 .../src/helpers/migrate-old-database.test.ts | 0 .../src/helpers/migrate-old-database.ts | 0 .../messaging-exp/src/helpers/register.ts | 0 .../src/helpers/registerDefaultSw.ts | 0 .../src/helpers/sleep.test.ts | 0 .../src/helpers/sleep.ts | 0 .../messaging-exp/src/helpers/updateSwReg.ts | 0 .../src/helpers/updateVapidKey.ts | 0 .../messaging-exp/src/index.sw.ts | 0 .../messaging-exp/src/index.ts | 0 .../src/interfaces/app-config.ts | 0 .../src/interfaces/internal-dependencies.ts | 0 .../interfaces/internal-message-payload.ts | 0 .../src/interfaces/logging-types.ts | 0 .../src/interfaces/public-types.ts | 0 .../src/interfaces/token-details.ts | 0 .../src/internals/idb-manager.test.ts | 0 .../src/internals/idb-manager.ts | 0 .../src/internals/requests.test.ts | 0 .../messaging-exp/src/internals/requests.ts | 0 .../src/internals/token-manager.test.ts | 0 .../src/internals/token-manager.ts | 0 .../src/listeners/sw-listeners.test.ts | 0 .../src/listeners/sw-listeners.ts | 0 .../src/listeners/window-listener.ts | 0 .../messaging-exp/src/messaging-service.ts | 0 .../src/testing/compare-headers.test.ts | 0 .../src/testing/compare-headers.ts | 0 .../testing/fakes/firebase-dependencies.ts | 0 .../src/testing/fakes/logging-object.ts | 0 .../src/testing/fakes/messaging-service.ts | 0 .../src/testing/fakes/service-worker.ts | 0 .../src/testing/fakes/token-details.ts | 0 .../messaging-exp/src/testing/setup.ts | 0 .../src/testing/sinon-types.ts | 0 .../messaging-exp/src/util/constants.ts | 0 .../messaging-exp/src/util/errors.ts | 0 .../messaging-exp/src/util/sw-types.ts | 0 .../messaging-exp/sw/package.json | 0 .../tsconfig.json | 0 .../performance-compat}/.eslintrc.js | 0 .../performance-compat/README.md | 0 .../performance-compat/karma.conf.js | 0 .../performance-compat/package.json | 0 .../performance-compat/rollup.config.js | 0 .../rollup.config.release.js | 0 .../performance-compat/rollup.shared.js | 0 .../performance-compat/src/index.ts | 0 .../src/performance.test.ts | 0 .../performance-compat/src/performance.ts | 0 .../performance-compat}/test/setup.ts | 0 .../performance-compat/test/util.ts | 0 .../performance-compat/tsconfig.json | 0 .../performance-exp}/.eslintrc.js | 0 .../performance-exp/README.md | 0 .../performance-exp/api-extractor.json | 0 .../performance-exp/karma.conf.js | 0 .../performance-exp/package.json | 0 .../performance-exp/rollup.config.js | 0 .../performance-exp/rollup.config.release.js | 0 .../performance-exp/rollup.shared.js | 0 .../performance-exp/src/constants.ts | 0 .../src/controllers/perf.test.ts | 0 .../performance-exp/src/controllers/perf.ts | 0 .../performance-exp/src/index.test.ts | 0 .../performance-exp/src/index.ts | 0 .../performance-exp/src/public_types.ts | 0 .../src/resources/network_request.test.ts | 0 .../src/resources/network_request.ts | 0 .../src/resources/trace.test.ts | 0 .../performance-exp/src/resources/trace.ts | 0 .../src/services/api_service.test.ts | 0 .../src/services/api_service.ts | 0 .../src/services/iid_service.test.ts | 0 .../src/services/iid_service.ts | 0 .../services/initialization_service.test.ts | 0 .../src/services/initialization_service.ts | 0 .../services/oob_resources_service.test.ts | 0 .../src/services/oob_resources_service.ts | 0 .../src/services/perf_logger.test.ts | 0 .../src/services/perf_logger.ts | 0 .../services/remote_config_service.test.ts | 0 .../src/services/remote_config_service.ts | 0 .../src/services/settings_service.ts | 0 .../src/services/transport_service.test.ts | 0 .../src/services/transport_service.ts | 0 .../performance-exp/src/utils/app_utils.ts | 0 .../src/utils/attribute_utils.test.ts | 0 .../src/utils/attributes_utils.ts | 0 .../src/utils/console_logger.ts | 0 .../performance-exp/src/utils/errors.ts | 0 .../src/utils/metric_utils.test.ts | 0 .../performance-exp/src/utils/metric_utils.ts | 0 .../src/utils/string_merger.test.ts | 0 .../src/utils/string_merger.ts | 0 .../performance-exp/test/setup.ts | 0 .../tsconfig.json | 0 .../.eslintrc.js | 0 .../remote-config-compat/README.md | 0 .../remote-config-compat/karma.conf.js | 0 .../remote-config-compat/package.json | 0 .../remote-config-compat/rollup.config.js | 0 .../rollup.config.release.js | 0 .../remote-config-compat/rollup.shared.js | 0 .../remote-config-compat/src/index.ts | 0 .../src/remoteConfig.test.ts | 0 .../remote-config-compat/src/remoteConfig.ts | 0 .../test/setup.ts | 0 .../remote-config-compat/test/util.ts | 0 .../remote-config-compat/tsconfig.json | 0 .../remote-config-exp/.eslintrc.js | 0 .../.npmignore | 0 .../README.md | 0 .../remote-config-exp/api-extractor.json | 0 .../karma.conf.js | 0 .../remote-config-exp/package.json | 0 .../remote-config-exp/rollup.config.js | 0 .../rollup.config.release.js | 0 .../remote-config-exp/rollup.shared.js | 0 .../remote-config-exp/src/api.ts | 0 .../remote-config-exp/src/api2.ts | 0 .../src/client/caching_client.ts | 0 .../src/client/remote_config_fetch_client.ts | 0 .../src/client/rest_client.ts | 0 .../src/client/retrying_client.ts | 0 .../remote-config-exp/src/constants.ts | 0 .../src/errors.ts | 0 .../remote-config-exp/src/index.ts | 0 .../src/language.ts | 0 .../remote-config-exp/src/public_types.ts | 0 .../remote-config-exp/src/register.ts | 0 .../remote-config-exp/src/remote_config.ts | 0 .../src/storage/storage.ts | 0 .../src/storage/storage_cache.ts | 0 .../src/value.ts | 0 .../test/client/caching_client.test.ts | 0 .../test/client/rest_client.test.ts | 0 .../test/client/retrying_client.test.ts | 0 .../test/errors.test.ts | 0 .../test/language.test.ts | 0 .../test/remote_config.test.ts | 0 .../test/setup.ts | 0 .../test/storage/storage.test.ts | 0 .../test/storage/storage_cache.test.ts | 0 .../test/value.test.ts | 0 .../remote-config-exp/test_app/index.html | 0 .../remote-config-exp/test_app/index.js | 0 .../tsconfig.json | 0 1394 files changed, 1155 deletions(-) delete mode 100644 packages-exp/auth-compat-exp/demo/public/service-worker.js delete mode 100644 packages-exp/auth-compat-exp/demo/public/web-worker.js rename {packages-exp/analytics-compat => packages-old/analytics}/.eslintrc.js (100%) rename {packages => packages-old}/analytics/CHANGELOG.md (100%) rename {packages-exp/analytics-exp => packages-old/analytics}/README.md (100%) rename {packages => packages-old}/analytics/index.test.ts (100%) rename {packages => packages-old}/analytics/index.ts (100%) rename {packages-exp/analytics-compat => packages-old/analytics}/karma.conf.js (100%) rename {packages-exp/analytics-exp => packages-old/analytics}/karma.integration.conf.js (100%) rename {packages => packages-old}/analytics/package.json (100%) rename {packages => packages-old}/analytics/rollup.config.js (100%) rename {packages => packages-old}/analytics/src/constants.ts (100%) rename {packages => packages-old}/analytics/src/errors.ts (100%) rename {packages => packages-old}/analytics/src/factory.ts (100%) rename {packages => packages-old}/analytics/src/functions.test.ts (100%) rename {packages => packages-old}/analytics/src/functions.ts (100%) rename {packages => packages-old}/analytics/src/get-config.test.ts (100%) rename {packages => packages-old}/analytics/src/get-config.ts (100%) rename {packages => packages-old}/analytics/src/helpers.test.ts (100%) rename {packages => packages-old}/analytics/src/helpers.ts (100%) rename {packages => packages-old}/analytics/src/initialize-ids.test.ts (100%) rename {packages => packages-old}/analytics/src/initialize-ids.ts (100%) rename {packages-exp/analytics-exp => packages-old/analytics}/src/logger.ts (100%) rename {packages => packages-old}/analytics/testing/get-fake-firebase-services.ts (100%) rename {packages-exp/analytics-exp => packages-old/analytics}/testing/gtag-script-util.ts (100%) rename {packages => packages-old}/analytics/testing/integration-tests/integration.ts (100%) rename {packages-exp/analytics-exp => packages-old/analytics}/testing/setup.ts (100%) rename {packages-exp/analytics-exp => packages-old/analytics}/tsconfig.json (100%) rename {packages-exp/app-compat => packages-old/app-check}/.eslintrc.js (100%) rename {packages => packages-old}/app-check/CHANGELOG.md (100%) rename {packages => packages-old}/app-check/README.md (100%) rename {packages => packages-old}/app-check/karma.conf.js (100%) rename {packages => packages-old}/app-check/package.json (100%) rename {packages => packages-old}/app-check/rollup.config.js (100%) rename {packages => packages-old}/app-check/src/api.test.ts (100%) rename {packages => packages-old}/app-check/src/api.ts (100%) rename {packages => packages-old}/app-check/src/client.test.ts (100%) rename {packages => packages-old}/app-check/src/client.ts (100%) rename {packages-exp/app-check-exp => packages-old/app-check}/src/constants.ts (100%) rename {packages-exp/app-check-exp => packages-old/app-check}/src/debug.test.ts (100%) rename {packages-exp/app-check-exp => packages-old/app-check}/src/debug.ts (100%) rename {packages => packages-old}/app-check/src/errors.ts (100%) rename {packages => packages-old}/app-check/src/factory.ts (100%) rename {packages => packages-old}/app-check/src/index.ts (100%) rename {packages => packages-old}/app-check/src/indexeddb.ts (100%) rename {packages => packages-old}/app-check/src/internal-api.test.ts (100%) rename {packages => packages-old}/app-check/src/internal-api.ts (100%) rename {packages-exp/app-check-exp => packages-old/app-check}/src/logger.ts (100%) rename {packages-exp/app-check-exp => packages-old/app-check}/src/proactive-refresh.test.ts (100%) rename {packages-exp/app-check-exp => packages-old/app-check}/src/proactive-refresh.ts (100%) rename {packages => packages-old}/app-check/src/providers.ts (100%) rename {packages => packages-old}/app-check/src/recaptcha.test.ts (100%) rename {packages => packages-old}/app-check/src/recaptcha.ts (100%) rename {packages => packages-old}/app-check/src/state.ts (100%) rename {packages-exp/app-check-exp => packages-old/app-check}/src/storage.test.ts (100%) rename {packages => packages-old}/app-check/src/storage.ts (100%) rename {packages => packages-old}/app-check/src/util.ts (100%) rename {packages-exp/app-check-exp => packages-old/app-check}/test/setup.ts (100%) rename {packages => packages-old}/app-check/test/util.ts (100%) rename {packages-exp/analytics-compat => packages-old/app-check}/tsconfig.json (100%) rename {packages => packages-old}/app/.eslintrc.js (100%) rename {packages => packages-old}/app/CHANGELOG.md (100%) rename {packages => packages-old}/app/README.md (100%) rename {packages => packages-old}/app/index.lite.ts (100%) rename {packages => packages-old}/app/index.node.ts (100%) rename {packages => packages-old}/app/index.rn.ts (100%) rename {packages => packages-old}/app/index.ts (100%) rename {packages => packages-old}/app/karma.conf.js (100%) rename {packages => packages-old}/app/package.json (100%) rename {packages => packages-old}/app/rollup.config.js (100%) rename {packages => packages-old}/app/src/constants.ts (100%) rename {packages => packages-old}/app/src/errors.ts (100%) rename {packages => packages-old}/app/src/firebaseApp.ts (100%) rename {packages => packages-old}/app/src/firebaseNamespace.ts (100%) rename {packages => packages-old}/app/src/firebaseNamespaceCore.ts (100%) rename {packages => packages-old}/app/src/lite/firebaseAppLite.ts (100%) rename {packages => packages-old}/app/src/lite/firebaseNamespaceLite.ts (100%) rename {packages-exp/app-exp => packages-old/app}/src/logger.ts (100%) rename {packages => packages-old}/app/src/platformLoggerService.ts (100%) rename {packages => packages-old}/app/src/registerCoreComponents.ts (100%) rename {packages => packages-old}/app/test/clientLogger.test.ts (100%) rename {packages => packages-old}/app/test/firebaseApp.test.ts (100%) rename {packages => packages-old}/app/test/platformLogger.test.ts (100%) rename {packages-exp/app-compat => packages-old/app}/test/setup.ts (100%) rename {packages => packages-old}/app/tsconfig.json (100%) rename {packages => packages-old}/auth/.gitignore (100%) rename {packages => packages-old}/auth/CHANGELOG.md (100%) rename {packages => packages-old}/auth/CONTRIBUTING.md (100%) rename {packages => packages-old}/auth/LICENSE (100%) rename {packages => packages-old}/auth/README.md (100%) rename {packages => packages-old}/auth/STYLEGUIDE.md (100%) rename {packages => packages-old}/auth/buildtools/all_tests.html (100%) rename {packages => packages-old}/auth/buildtools/common.py (100%) rename {packages => packages-old}/auth/buildtools/gen_all_tests_js.py (100%) rename {packages => packages-old}/auth/buildtools/gen_test_html.py (100%) rename {packages => packages-old}/auth/buildtools/generate_test_files.sh (100%) rename {packages => packages-old}/auth/buildtools/run_demo.sh (100%) rename {packages => packages-old}/auth/buildtools/run_tests.sh (100%) rename {packages => packages-old}/auth/buildtools/sauce_connect.sh (100%) rename {packages => packages-old}/auth/buildtools/test_template.html (100%) rename {packages => packages-old}/auth/demo/.gitignore (100%) rename {packages => packages-old}/auth/demo/README.md (100%) rename {packages-exp/auth-compat-exp => packages-old/auth}/demo/database.rules.json (100%) rename {packages => packages-old}/auth/demo/firebase.json (100%) rename {packages => packages-old}/auth/demo/functions/index.js (100%) rename {packages => packages-old}/auth/demo/functions/package.json (100%) rename {packages => packages-old}/auth/demo/functions/yarn.lock (100%) rename {packages => packages-old}/auth/demo/public/common.js (100%) rename {packages-exp/auth-compat-exp => packages-old/auth}/demo/public/index.html (100%) rename {packages-exp/auth-compat-exp => packages-old/auth}/demo/public/manifest.json (100%) rename {packages => packages-old}/auth/demo/public/sample-config.js (100%) rename {packages => packages-old}/auth/demo/public/script.js (100%) rename {packages => packages-old}/auth/demo/public/service-worker.js (100%) rename {packages-exp/auth-compat-exp => packages-old/auth}/demo/public/style.css (100%) rename {packages => packages-old}/auth/demo/public/web-worker.js (100%) rename {packages => packages-old}/auth/externs/externs.js (100%) rename {packages => packages-old}/auth/externs/gapi.iframes.js (100%) rename {packages => packages-old}/auth/externs/grecaptcha.js (100%) rename {packages => packages-old}/auth/gulpfile.js (100%) rename {packages => packages-old}/auth/index.d.ts (100%) rename {packages => packages-old}/auth/package.json (100%) rename {packages => packages-old}/auth/protractor.conf.js (100%) rename {packages => packages-old}/auth/protractor_spec.js (100%) rename {packages => packages-old}/auth/sauce_browsers.json (100%) rename {packages => packages-old}/auth/src/actioncodeinfo.js (100%) rename {packages => packages-old}/auth/src/actioncodesettings.js (100%) rename {packages => packages-old}/auth/src/actioncodeurl.js (100%) rename {packages => packages-old}/auth/src/additionaluserinfo.js (100%) rename {packages => packages-old}/auth/src/args.js (100%) rename {packages => packages-old}/auth/src/auth.js (100%) rename {packages => packages-old}/auth/src/authcredential.js (100%) rename {packages => packages-old}/auth/src/authevent.js (100%) rename {packages => packages-old}/auth/src/autheventmanager.js (100%) rename {packages => packages-old}/auth/src/authsettings.js (100%) rename {packages => packages-old}/auth/src/authstorage.js (100%) rename {packages => packages-old}/auth/src/authuser.js (100%) rename {packages => packages-old}/auth/src/cacherequest.js (100%) rename {packages => packages-old}/auth/src/confirmationresult.js (100%) rename {packages => packages-old}/auth/src/cordovahandler.js (100%) rename {packages => packages-old}/auth/src/debug.js (100%) rename {packages => packages-old}/auth/src/defines.js (100%) rename {packages => packages-old}/auth/src/deprecation.js (100%) rename {packages => packages-old}/auth/src/dynamiclink.js (100%) rename {packages => packages-old}/auth/src/error_auth.js (100%) rename {packages => packages-old}/auth/src/error_invalidorigin.js (100%) rename {packages => packages-old}/auth/src/error_withcredential.js (100%) rename {packages => packages-old}/auth/src/exports_auth.js (100%) rename {packages => packages-old}/auth/src/exports_lib.js (100%) rename {packages => packages-old}/auth/src/exports_unreleased.js (100%) rename {packages => packages-old}/auth/src/externs.js (100%) rename {packages => packages-old}/auth/src/idp.js (100%) rename {packages => packages-old}/auth/src/idtoken.js (100%) rename {packages => packages-old}/auth/src/idtokenresult.js (100%) rename {packages => packages-old}/auth/src/iframeclient/ifchandler.js (100%) rename {packages => packages-old}/auth/src/iframeclient/iframewrapper.js (100%) rename {packages => packages-old}/auth/src/messagechannel/defines.js (100%) rename {packages => packages-old}/auth/src/messagechannel/postmessager.js (100%) rename {packages => packages-old}/auth/src/messagechannel/receiver.js (100%) rename {packages => packages-old}/auth/src/messagechannel/sender.js (100%) rename {packages => packages-old}/auth/src/multifactorassertion.js (100%) rename {packages => packages-old}/auth/src/multifactorauthcredential.js (100%) rename {packages => packages-old}/auth/src/multifactorerror.js (100%) rename {packages => packages-old}/auth/src/multifactorgenerator.js (100%) rename {packages => packages-old}/auth/src/multifactorinfo.js (100%) rename {packages => packages-old}/auth/src/multifactorresolver.js (100%) rename {packages => packages-old}/auth/src/multifactorsession.js (100%) rename {packages => packages-old}/auth/src/multifactoruser.js (100%) rename {packages => packages-old}/auth/src/oauthhelperstate.js (100%) rename {packages => packages-old}/auth/src/oauthsigninhandler.js (100%) rename {packages => packages-old}/auth/src/object.js (100%) rename {packages => packages-old}/auth/src/proactiverefresh.js (100%) rename {packages => packages-old}/auth/src/recaptchaverifier/grecaptcha.js (100%) rename {packages => packages-old}/auth/src/recaptchaverifier/grecaptchamock.js (100%) rename {packages => packages-old}/auth/src/recaptchaverifier/loader.js (100%) rename {packages => packages-old}/auth/src/recaptchaverifier/mockloader.js (100%) rename {packages => packages-old}/auth/src/recaptchaverifier/realloader.js (100%) rename {packages => packages-old}/auth/src/recaptchaverifier/recaptchaverifier.js (100%) rename {packages => packages-old}/auth/src/rpchandler.js (100%) rename {packages => packages-old}/auth/src/storage/asyncstorage.js (100%) rename {packages => packages-old}/auth/src/storage/factory.js (100%) rename {packages => packages-old}/auth/src/storage/hybridindexeddb.js (100%) rename {packages => packages-old}/auth/src/storage/indexeddb.js (100%) rename {packages => packages-old}/auth/src/storage/inmemorystorage.js (100%) rename {packages => packages-old}/auth/src/storage/localstorage.js (100%) rename {packages => packages-old}/auth/src/storage/mockstorage.js (100%) rename {packages => packages-old}/auth/src/storage/nullstorage.js (100%) rename {packages => packages-old}/auth/src/storage/sessionstorage.js (100%) rename {packages => packages-old}/auth/src/storage/storage.js (100%) rename {packages => packages-old}/auth/src/storageautheventmanager.js (100%) rename {packages => packages-old}/auth/src/storageoauthhandlermanager.js (100%) rename {packages => packages-old}/auth/src/storagependingredirectmanager.js (100%) rename {packages => packages-old}/auth/src/storageredirectusermanager.js (100%) rename {packages => packages-old}/auth/src/storageusermanager.js (100%) rename {packages => packages-old}/auth/src/token.js (100%) rename {packages => packages-old}/auth/src/universallinksubscriber.js (100%) rename {packages => packages-old}/auth/src/userevent.js (100%) rename {packages => packages-old}/auth/src/utils.js (100%) rename {packages => packages-old}/auth/test/actioncodeinfo_test.js (100%) rename {packages => packages-old}/auth/test/actioncodesettings_test.js (100%) rename {packages => packages-old}/auth/test/actioncodeurl_test.js (100%) rename {packages => packages-old}/auth/test/additionaluserinfo_test.js (100%) rename {packages => packages-old}/auth/test/args_test.js (100%) rename {packages => packages-old}/auth/test/auth_test.js (100%) rename {packages => packages-old}/auth/test/authcredential_test.js (100%) rename {packages => packages-old}/auth/test/authevent_test.js (100%) rename {packages => packages-old}/auth/test/autheventmanager_test.js (100%) rename {packages => packages-old}/auth/test/authsettings_test.js (100%) rename {packages => packages-old}/auth/test/authstorage_test.js (100%) rename {packages => packages-old}/auth/test/authuser_test.js (100%) rename {packages => packages-old}/auth/test/cacherequest_test.js (100%) rename {packages => packages-old}/auth/test/confirmationresult_test.js (100%) rename {packages => packages-old}/auth/test/cordovahandler_test.js (100%) rename {packages => packages-old}/auth/test/defines_test.js (100%) rename {packages => packages-old}/auth/test/deprecation_test.js (100%) rename {packages => packages-old}/auth/test/dynamiclink_test.js (100%) rename {packages => packages-old}/auth/test/error_test.js (100%) rename {packages => packages-old}/auth/test/exports_lib_test.js (100%) rename {packages => packages-old}/auth/test/idp_test.js (100%) rename {packages => packages-old}/auth/test/idtoken_test.js (100%) rename {packages => packages-old}/auth/test/idtokenresult_test.js (100%) rename {packages => packages-old}/auth/test/iframeclient/ifchandler_test.js (100%) rename {packages => packages-old}/auth/test/iframeclient/iframewrapper_test.js (100%) rename {packages => packages-old}/auth/test/messagechannel/postmessager_test.js (100%) rename {packages => packages-old}/auth/test/messagechannel/receiver_test.js (100%) rename {packages => packages-old}/auth/test/messagechannel/sender_test.js (100%) rename {packages => packages-old}/auth/test/multifactorassertion_test.js (100%) rename {packages => packages-old}/auth/test/multifactorerror_test.js (100%) rename {packages => packages-old}/auth/test/multifactorgenerator_test.js (100%) rename {packages => packages-old}/auth/test/multifactorinfo_test.js (100%) rename {packages => packages-old}/auth/test/multifactorresolver_test.js (100%) rename {packages => packages-old}/auth/test/multifactorsession_test.js (100%) rename {packages => packages-old}/auth/test/multifactoruser_test.js (100%) rename {packages => packages-old}/auth/test/oauthhelperstate_test.js (100%) rename {packages => packages-old}/auth/test/object_test.js (100%) rename {packages => packages-old}/auth/test/proactiverefresh_test.js (100%) rename {packages => packages-old}/auth/test/recaptchaverifier/grecaptchamock_test.js (100%) rename {packages => packages-old}/auth/test/recaptchaverifier/mockloader_test.js (100%) rename {packages => packages-old}/auth/test/recaptchaverifier/realloader_test.js (100%) rename {packages => packages-old}/auth/test/recaptchaverifier/recaptchaverifier_test.js (100%) rename {packages => packages-old}/auth/test/rpchandler_test.js (100%) rename {packages => packages-old}/auth/test/storage/asyncstorage_test.js (100%) rename {packages => packages-old}/auth/test/storage/factory_test.js (100%) rename {packages => packages-old}/auth/test/storage/hybridindexeddb_test.js (100%) rename {packages => packages-old}/auth/test/storage/indexeddb_test.js (100%) rename {packages => packages-old}/auth/test/storage/inmemorystorage_test.js (100%) rename {packages => packages-old}/auth/test/storage/localstorage_test.js (100%) rename {packages => packages-old}/auth/test/storage/mockstorage_test.js (100%) rename {packages => packages-old}/auth/test/storage/nullstorage_test.js (100%) rename {packages => packages-old}/auth/test/storage/sessionstorage_test.js (100%) rename {packages => packages-old}/auth/test/storage/testhelper.js (100%) rename {packages => packages-old}/auth/test/storageautheventmanager_test.js (100%) rename {packages => packages-old}/auth/test/storageoauthhandlermanager_test.js (100%) rename {packages => packages-old}/auth/test/storagependingredirectmanager_test.js (100%) rename {packages => packages-old}/auth/test/storageredirectusermanager_test.js (100%) rename {packages => packages-old}/auth/test/storageusermanager_test.js (100%) rename {packages => packages-old}/auth/test/testhelper.js (100%) rename {packages => packages-old}/auth/test/token_test.js (100%) rename {packages => packages-old}/auth/test/universallinksubscriber_test.js (100%) rename {packages => packages-old}/auth/test/userevent_test.js (100%) rename {packages => packages-old}/auth/test/utils_test.js (100%) rename {packages-exp/firebase-exp => packages-old/firebase}/.gitignore (100%) rename {packages => packages-old}/firebase/CHANGELOG.md (100%) rename {packages => packages-old}/firebase/README.md (100%) rename {packages => packages-old}/firebase/analytics/index.ts (100%) rename {packages => packages-old}/firebase/analytics/package.json (100%) rename {packages => packages-old}/firebase/app-check/index.ts (100%) rename {packages => packages-old}/firebase/app-check/package.json (100%) rename {packages => packages-old}/firebase/app/index.ts (100%) rename {packages => packages-old}/firebase/app/package.json (100%) rename {packages => packages-old}/firebase/auth/index.ts (100%) rename {packages => packages-old}/firebase/auth/package.json (100%) rename {packages => packages-old}/firebase/database/index.ts (100%) rename {packages => packages-old}/firebase/database/package.json (100%) rename {packages => packages-old}/firebase/empty-import.d.ts (100%) rename {packages => packages-old}/firebase/externs/firebase-app-externs.js (100%) rename {packages => packages-old}/firebase/externs/firebase-app-internal-externs.js (100%) rename {packages => packages-old}/firebase/externs/firebase-auth-externs.js (100%) rename {packages => packages-old}/firebase/externs/firebase-client-auth-externs.js (100%) rename {packages => packages-old}/firebase/externs/firebase-database-externs.js (100%) rename {packages => packages-old}/firebase/externs/firebase-database-internal-externs.js (100%) rename {packages => packages-old}/firebase/externs/firebase-error-externs.js (100%) rename {packages => packages-old}/firebase/externs/firebase-externs.js (100%) rename {packages => packages-old}/firebase/externs/firebase-firestore-externs.js (100%) rename {packages => packages-old}/firebase/externs/firebase-messaging-externs.js (100%) rename {packages => packages-old}/firebase/externs/firebase-storage-externs.js (100%) rename {packages => packages-old}/firebase/firestore/bundle/index.ts (100%) rename {packages => packages-old}/firebase/firestore/bundle/package.json (100%) rename {packages => packages-old}/firebase/firestore/index.cdn.ts (100%) rename {packages => packages-old}/firebase/firestore/index.ts (100%) rename {packages => packages-old}/firebase/firestore/memory/bundle/index.ts (100%) rename {packages => packages-old}/firebase/firestore/memory/bundle/package.json (100%) rename {packages => packages-old}/firebase/firestore/memory/index.cdn.ts (100%) rename {packages => packages-old}/firebase/firestore/memory/index.ts (100%) rename {packages => packages-old}/firebase/firestore/memory/package.json (100%) rename {packages => packages-old}/firebase/firestore/package.json (100%) rename {packages => packages-old}/firebase/functions/index.ts (100%) rename {packages => packages-old}/firebase/functions/package.json (100%) rename {packages => packages-old}/firebase/index.d.ts (100%) rename {packages => packages-old}/firebase/index.html (100%) rename {packages => packages-old}/firebase/installations/index.ts (100%) rename {packages => packages-old}/firebase/installations/package.json (100%) rename {packages => packages-old}/firebase/messaging/index.ts (100%) rename {packages => packages-old}/firebase/messaging/package.json (100%) rename {packages => packages-old}/firebase/package.json (100%) rename {packages => packages-old}/firebase/performance/index.ts (100%) rename {packages => packages-old}/firebase/performance/package.json (100%) rename {packages => packages-old}/firebase/remote-config/index.ts (100%) rename {packages => packages-old}/firebase/remote-config/package.json (100%) rename {packages => packages-old}/firebase/rollup-internal.config.js (100%) rename {packages => packages-old}/firebase/rollup.config.js (100%) rename {packages => packages-old}/firebase/src/index.cdn.ts (100%) rename {packages => packages-old}/firebase/src/index.node.ts (100%) rename {packages => packages-old}/firebase/src/index.perf.ts (100%) rename {packages => packages-old}/firebase/src/index.rn.ts (100%) rename {packages => packages-old}/firebase/src/index.ts (100%) rename {packages => packages-old}/firebase/storage/index.ts (100%) rename {packages => packages-old}/firebase/storage/package.json (100%) rename {packages => packages-old}/firebase/tsconfig.json (100%) rename {packages => packages-old}/functions/.eslintrc.js (100%) rename {packages => packages-old}/functions/.npmignore (100%) rename {packages => packages-old}/functions/CHANGELOG.md (100%) rename {packages-exp/functions-exp => packages-old/functions}/README.md (100%) rename {packages => packages-old}/functions/index.node.ts (100%) rename {packages => packages-old}/functions/index.ts (100%) rename {packages => packages-old}/functions/karma.conf.js (100%) rename {packages => packages-old}/functions/package.json (100%) rename {packages => packages-old}/functions/rollup.config.js (100%) rename {packages => packages-old}/functions/src/api/error.ts (100%) rename {packages => packages-old}/functions/src/api/service.ts (100%) rename {packages => packages-old}/functions/src/config.ts (100%) rename {packages => packages-old}/functions/src/context.ts (100%) rename {packages => packages-old}/functions/src/serializer.ts (100%) rename {packages => packages-old}/functions/test/browser/callable.test.ts (100%) rename {packages => packages-old}/functions/test/callable.test.ts (100%) rename {packages => packages-old}/functions/test/serializer.test.ts (100%) rename {packages => packages-old}/functions/test/service.test.ts (100%) rename {packages => packages-old}/functions/test/utils.ts (100%) rename {packages-exp/auth-compat-exp => packages-old/functions}/tsconfig.json (100%) rename {packages => packages-old}/installations/.eslintrc.js (100%) rename {packages => packages-old}/installations/CHANGELOG.md (100%) rename {packages => packages-old}/installations/karma.conf.js (100%) rename {packages => packages-old}/installations/package.json (100%) rename {packages => packages-old}/installations/rollup.config.js (100%) rename {packages-exp/installations-exp/src/functions => packages-old/installations/src/api}/common.test.ts (100%) rename {packages => packages-old}/installations/src/api/common.ts (100%) rename {packages => packages-old}/installations/src/api/create-installation-request.test.ts (100%) rename {packages => packages-old}/installations/src/api/create-installation-request.ts (100%) rename {packages => packages-old}/installations/src/api/delete-installation-request.test.ts (100%) rename {packages => packages-old}/installations/src/api/delete-installation-request.ts (100%) rename {packages => packages-old}/installations/src/api/generate-auth-token-request.test.ts (100%) rename {packages => packages-old}/installations/src/api/generate-auth-token-request.ts (100%) rename {packages => packages-old}/installations/src/functions/delete-installation.test.ts (100%) rename {packages => packages-old}/installations/src/functions/delete-installation.ts (100%) rename {packages => packages-old}/installations/src/functions/get-id.test.ts (100%) rename {packages => packages-old}/installations/src/functions/get-id.ts (100%) rename {packages => packages-old}/installations/src/functions/get-token.test.ts (100%) rename {packages => packages-old}/installations/src/functions/get-token.ts (100%) rename {packages => packages-old}/installations/src/functions/index.ts (100%) rename {packages => packages-old}/installations/src/functions/on-id-change.test.ts (100%) rename {packages => packages-old}/installations/src/functions/on-id-change.ts (100%) rename {packages-exp/installations-exp => packages-old/installations}/src/helpers/buffer-to-base64-url-safe.test.ts (100%) rename {packages-exp/installations-exp => packages-old/installations}/src/helpers/buffer-to-base64-url-safe.ts (100%) rename {packages => packages-old}/installations/src/helpers/extract-app-config.test.ts (100%) rename {packages => packages-old}/installations/src/helpers/extract-app-config.ts (100%) rename {packages => packages-old}/installations/src/helpers/fid-changed.test.ts (100%) rename {packages => packages-old}/installations/src/helpers/fid-changed.ts (100%) rename {packages-exp/installations-exp => packages-old/installations}/src/helpers/generate-fid.test.ts (100%) rename {packages-exp/installations-exp => packages-old/installations}/src/helpers/generate-fid.ts (100%) rename {packages => packages-old}/installations/src/helpers/get-installation-entry.test.ts (100%) rename {packages => packages-old}/installations/src/helpers/get-installation-entry.ts (100%) rename {packages => packages-old}/installations/src/helpers/idb-manager.test.ts (100%) rename {packages => packages-old}/installations/src/helpers/idb-manager.ts (100%) rename {packages => packages-old}/installations/src/helpers/refresh-auth-token.test.ts (100%) rename {packages => packages-old}/installations/src/helpers/refresh-auth-token.ts (100%) rename {packages => packages-old}/installations/src/index.ts (100%) rename {packages-exp/installations-exp => packages-old/installations}/src/interfaces/api-response.ts (100%) rename {packages => packages-old}/installations/src/interfaces/app-config.ts (100%) rename {packages => packages-old}/installations/src/interfaces/firebase-dependencies.ts (100%) rename {packages-exp/installations-exp => packages-old/installations}/src/interfaces/installation-entry.ts (100%) rename {packages-exp/installations-exp => packages-old/installations}/src/testing/compare-headers.test.ts (100%) rename {packages-exp/installations-exp => packages-old/installations}/src/testing/compare-headers.ts (100%) rename {packages => packages-old}/installations/src/testing/fake-generators.ts (100%) rename {packages-exp/installations-exp => packages-old/installations}/src/testing/setup.ts (100%) rename {packages-exp/installations-exp => packages-old/installations}/src/util/constants.ts (100%) rename {packages-exp/installations-exp => packages-old/installations}/src/util/errors.ts (100%) rename {packages => packages-old}/installations/src/util/get-key.ts (100%) rename {packages => packages-old}/installations/src/util/sleep.test.ts (100%) rename {packages => packages-old}/installations/src/util/sleep.ts (100%) rename {packages-exp/installations-exp => packages-old/installations}/test-app/.gitignore (100%) rename {packages => packages-old}/installations/test-app/index.html (100%) rename {packages => packages-old}/installations/test-app/index.js (100%) rename {packages => packages-old}/installations/test-app/rollup.config.js (100%) rename {packages => packages-old}/installations/tsconfig.json (100%) rename {packages => packages-old}/messaging/.eslintrc.js (100%) rename {packages => packages-old}/messaging/.npmignore (100%) rename {packages => packages-old}/messaging/CHANGELOG.md (100%) rename {packages-exp/messaging-exp => packages-old/messaging}/README.md (100%) rename {packages-exp/messaging-exp => packages-old/messaging}/karma.conf.js (100%) rename {packages => packages-old}/messaging/package.json (100%) rename {packages => packages-old}/messaging/rollup.config.js (100%) rename {packages => packages-old}/messaging/src/controllers/sw-controller.test.ts (100%) rename {packages => packages-old}/messaging/src/controllers/sw-controller.ts (100%) rename {packages => packages-old}/messaging/src/controllers/window-controller.test.ts (100%) rename {packages => packages-old}/messaging/src/controllers/window-controller.ts (100%) rename {packages => packages-old}/messaging/src/core/api.test.ts (100%) rename {packages => packages-old}/messaging/src/core/api.ts (100%) rename {packages => packages-old}/messaging/src/core/token-management.test.ts (100%) rename {packages => packages-old}/messaging/src/core/token-management.ts (100%) rename {packages-exp/messaging-exp => packages-old/messaging}/src/helpers/array-base64-translator.test.ts (100%) rename {packages-exp/messaging-exp => packages-old/messaging}/src/helpers/array-base64-translator.ts (100%) rename {packages => packages-old}/messaging/src/helpers/externalizePayload.test.ts (100%) rename {packages => packages-old}/messaging/src/helpers/externalizePayload.ts (100%) rename {packages => packages-old}/messaging/src/helpers/extract-app-config.test.ts (100%) rename {packages => packages-old}/messaging/src/helpers/extract-app-config.ts (100%) rename {packages => packages-old}/messaging/src/helpers/idb-manager.test.ts (100%) rename {packages => packages-old}/messaging/src/helpers/idb-manager.ts (100%) rename {packages-exp/messaging-exp => packages-old/messaging}/src/helpers/is-console-message.ts (100%) rename {packages-exp/messaging-exp => packages-old/messaging}/src/helpers/migrate-old-database.test.ts (100%) rename {packages-exp/messaging-exp => packages-old/messaging}/src/helpers/migrate-old-database.ts (100%) rename {packages-exp/messaging-exp => packages-old/messaging}/src/helpers/sleep.test.ts (100%) rename {packages-exp/installations-exp/src/util => packages-old/messaging/src/helpers}/sleep.ts (100%) rename {packages => packages-old}/messaging/src/index.ts (100%) rename {packages-exp/messaging-exp => packages-old/messaging}/src/interfaces/app-config.ts (100%) rename {packages => packages-old}/messaging/src/interfaces/internal-dependencies.ts (100%) rename {packages-exp/messaging-exp => packages-old/messaging}/src/interfaces/internal-message-payload.ts (100%) rename {packages-exp/messaging-exp => packages-old/messaging}/src/interfaces/token-details.ts (100%) rename {packages => packages-old}/messaging/src/testing/compare-headers.test.ts (100%) rename {packages => packages-old}/messaging/src/testing/compare-headers.ts (100%) rename {packages => packages-old}/messaging/src/testing/fakes/firebase-dependencies.ts (100%) rename {packages => packages-old}/messaging/src/testing/fakes/service-worker.ts (100%) rename {packages-exp/messaging-exp => packages-old/messaging}/src/testing/fakes/token-details.ts (100%) rename {packages => packages-old}/messaging/src/testing/setup.ts (100%) rename {packages-exp/messaging-exp => packages-old/messaging}/src/testing/sinon-types.ts (100%) rename {packages => packages-old}/messaging/src/util/constants.ts (100%) rename {packages => packages-old}/messaging/src/util/errors.ts (100%) rename {packages => packages-old}/messaging/src/util/sw-types.ts (100%) rename {packages-exp/messaging-compat => packages-old/messaging}/tsconfig.json (100%) rename {packages => packages-old}/performance/.eslintrc.js (100%) rename {packages => packages-old}/performance/CHANGELOG.md (100%) rename {packages => packages-old}/performance/README.md (100%) rename {packages => packages-old}/performance/index.ts (100%) rename {packages => packages-old}/performance/karma.conf.js (100%) rename {packages => packages-old}/performance/package.json (100%) rename {packages => packages-old}/performance/rollup.config.js (100%) rename {packages => packages-old}/performance/src/constants.ts (100%) rename {packages => packages-old}/performance/src/controllers/perf.test.ts (100%) rename {packages => packages-old}/performance/src/controllers/perf.ts (100%) rename {packages => packages-old}/performance/src/resources/network_request.test.ts (100%) rename {packages => packages-old}/performance/src/resources/network_request.ts (100%) rename {packages => packages-old}/performance/src/resources/trace.test.ts (100%) rename {packages => packages-old}/performance/src/resources/trace.ts (100%) rename {packages => packages-old}/performance/src/services/api_service.test.ts (100%) rename {packages => packages-old}/performance/src/services/api_service.ts (100%) rename {packages => packages-old}/performance/src/services/iid_service.test.ts (100%) rename {packages => packages-old}/performance/src/services/iid_service.ts (100%) rename {packages => packages-old}/performance/src/services/initialization_service.test.ts (100%) rename {packages => packages-old}/performance/src/services/initialization_service.ts (100%) rename {packages => packages-old}/performance/src/services/oob_resources_service.test.ts (100%) rename {packages => packages-old}/performance/src/services/oob_resources_service.ts (100%) rename {packages => packages-old}/performance/src/services/perf_logger.test.ts (100%) rename {packages => packages-old}/performance/src/services/perf_logger.ts (100%) rename {packages => packages-old}/performance/src/services/remote_config_service.test.ts (100%) rename {packages => packages-old}/performance/src/services/remote_config_service.ts (100%) rename {packages => packages-old}/performance/src/services/settings_service.ts (100%) rename {packages => packages-old}/performance/src/services/transport_service.test.ts (100%) rename {packages => packages-old}/performance/src/services/transport_service.ts (100%) rename {packages => packages-old}/performance/src/utils/attribute_utils.test.ts (100%) rename {packages => packages-old}/performance/src/utils/attributes_utils.ts (100%) rename {packages => packages-old}/performance/src/utils/console_logger.ts (100%) rename {packages => packages-old}/performance/src/utils/errors.ts (100%) rename {packages => packages-old}/performance/src/utils/metric_utils.test.ts (100%) rename {packages => packages-old}/performance/src/utils/metric_utils.ts (100%) rename {packages => packages-old}/performance/src/utils/string_merger.test.ts (100%) rename {packages => packages-old}/performance/src/utils/string_merger.ts (100%) rename {packages => packages-old}/performance/test/setup.ts (100%) rename {packages-exp/performance-exp => packages-old/performance}/tsconfig.json (100%) rename {packages => packages-old}/polyfill/README.md (100%) rename {packages => packages-old}/polyfill/index.ts (100%) rename {packages => packages-old}/polyfill/package.json (100%) rename {packages => packages-old}/polyfill/rollup.config.js (100%) rename {packages => packages-old}/polyfill/tsconfig.json (100%) rename {packages => packages-old}/remote-config/.eslintrc.js (100%) rename {packages-exp/remote-config-exp => packages-old/remote-config}/.npmignore (100%) rename {packages => packages-old}/remote-config/CHANGELOG.md (100%) rename {packages-exp/remote-config-exp => packages-old/remote-config}/README.md (100%) rename {packages => packages-old}/remote-config/index.ts (100%) rename {packages-exp/remote-config-exp => packages-old/remote-config}/karma.conf.js (100%) rename {packages => packages-old}/remote-config/package.json (100%) rename {packages => packages-old}/remote-config/rollup.config.js (100%) rename {packages-exp/remote-config-exp => packages-old/remote-config}/src/client/caching_client.ts (100%) rename {packages-exp/remote-config-exp => packages-old/remote-config}/src/client/remote_config_fetch_client.ts (100%) rename {packages => packages-old}/remote-config/src/client/rest_client.ts (100%) rename {packages-exp/remote-config-exp => packages-old/remote-config}/src/client/retrying_client.ts (100%) rename {packages-exp/remote-config-exp => packages-old/remote-config}/src/errors.ts (100%) rename {packages-exp/remote-config-exp => packages-old/remote-config}/src/language.ts (100%) rename {packages => packages-old}/remote-config/src/remote_config.ts (100%) rename {packages-exp/remote-config-exp => packages-old/remote-config}/src/storage/storage.ts (100%) rename {packages-exp/remote-config-exp => packages-old/remote-config}/src/storage/storage_cache.ts (100%) rename {packages-exp/remote-config-exp => packages-old/remote-config}/src/value.ts (100%) rename {packages-exp/remote-config-exp => packages-old/remote-config}/test/client/caching_client.test.ts (100%) rename {packages-exp/remote-config-exp => packages-old/remote-config}/test/client/rest_client.test.ts (100%) rename {packages-exp/remote-config-exp => packages-old/remote-config}/test/client/retrying_client.test.ts (100%) rename {packages-exp/remote-config-exp => packages-old/remote-config}/test/errors.test.ts (100%) rename {packages-exp/remote-config-exp => packages-old/remote-config}/test/language.test.ts (100%) rename {packages => packages-old}/remote-config/test/remote_config.test.ts (100%) rename {packages-exp/remote-config-exp => packages-old/remote-config}/test/setup.ts (100%) rename {packages-exp/remote-config-exp => packages-old/remote-config}/test/storage/storage.test.ts (100%) rename {packages-exp/remote-config-exp => packages-old/remote-config}/test/storage/storage_cache.test.ts (100%) rename {packages-exp/remote-config-exp => packages-old/remote-config}/test/value.test.ts (100%) rename {packages => packages-old}/remote-config/test_app/index.html (100%) rename {packages => packages-old}/remote-config/test_app/index.js (100%) rename {packages-exp/remote-config-exp => packages-old/remote-config}/tsconfig.json (100%) rename {packages-exp/analytics-exp => packages/analytics-compat}/.eslintrc.js (100%) rename {packages-exp/analytics-exp => packages/analytics-compat}/karma.conf.js (100%) rename {packages-exp => packages}/analytics-compat/package.json (100%) rename {packages-exp => packages}/analytics-compat/rollup.config.js (100%) rename {packages-exp => packages}/analytics-compat/rollup.config.release.js (100%) rename {packages-exp => packages}/analytics-compat/rollup.shared.js (100%) rename {packages-exp => packages}/analytics-compat/src/constants.ts (100%) rename {packages-exp => packages}/analytics-compat/src/index.ts (100%) rename {packages-exp => packages}/analytics-compat/src/service.test.ts (100%) rename {packages-exp => packages}/analytics-compat/src/service.ts (100%) rename {packages-exp/firebase-exp => packages/analytics-compat}/tsconfig.json (100%) rename packages/{analytics => analytics-exp}/.eslintrc.js (100%) rename packages/{analytics => analytics-exp}/README.md (100%) rename {packages-exp => packages}/analytics-exp/api-extractor.json (100%) rename packages/{analytics => analytics-exp}/karma.conf.js (100%) rename packages/{analytics => analytics-exp}/karma.integration.conf.js (100%) rename {packages-exp => packages}/analytics-exp/package.json (100%) rename {packages-exp => packages}/analytics-exp/rollup.config.js (100%) rename {packages-exp => packages}/analytics-exp/rollup.config.release.js (100%) rename {packages-exp => packages}/analytics-exp/rollup.shared.js (100%) rename {packages-exp => packages}/analytics-exp/src/api.test.ts (100%) rename {packages-exp => packages}/analytics-exp/src/api.ts (100%) rename {packages-exp => packages}/analytics-exp/src/constants.ts (100%) rename {packages-exp => packages}/analytics-exp/src/errors.ts (100%) rename {packages-exp => packages}/analytics-exp/src/factory.ts (100%) rename {packages-exp => packages}/analytics-exp/src/functions.test.ts (100%) rename {packages-exp => packages}/analytics-exp/src/functions.ts (100%) rename {packages-exp => packages}/analytics-exp/src/get-config.test.ts (100%) rename {packages-exp => packages}/analytics-exp/src/get-config.ts (100%) rename {packages-exp => packages}/analytics-exp/src/helpers.test.ts (100%) rename {packages-exp => packages}/analytics-exp/src/helpers.ts (100%) rename {packages-exp => packages}/analytics-exp/src/index.test.ts (100%) rename {packages-exp => packages}/analytics-exp/src/index.ts (100%) rename {packages-exp => packages}/analytics-exp/src/initialize-analytics.test.ts (100%) rename {packages-exp => packages}/analytics-exp/src/initialize-analytics.ts (100%) rename packages/{analytics => analytics-exp}/src/logger.ts (100%) rename {packages-exp => packages}/analytics-exp/src/public-types.ts (100%) rename {packages-exp => packages}/analytics-exp/src/types.ts (100%) rename {packages-exp => packages}/analytics-exp/testing/get-fake-firebase-services.ts (100%) rename packages/{analytics => analytics-exp}/testing/gtag-script-util.ts (100%) rename {packages-exp => packages}/analytics-exp/testing/integration-tests/integration.ts (100%) rename packages/{analytics => analytics-exp}/testing/setup.ts (100%) rename {packages-exp/app-check-compat => packages/analytics-exp}/tsconfig.json (100%) rename {packages-exp => packages}/app-check-compat/.eslintrc.js (100%) rename {packages-exp => packages}/app-check-compat/README.md (100%) rename {packages-exp => packages}/app-check-compat/karma.conf.js (100%) rename {packages-exp => packages}/app-check-compat/package.json (100%) rename {packages-exp => packages}/app-check-compat/rollup.config.js (100%) rename {packages-exp => packages}/app-check-compat/rollup.config.release.js (100%) rename {packages-exp => packages}/app-check-compat/rollup.shared.js (100%) rename {packages-exp => packages}/app-check-compat/src/errors.ts (100%) rename {packages-exp => packages}/app-check-compat/src/index.ts (100%) rename {packages-exp => packages}/app-check-compat/src/service.test.ts (100%) rename {packages-exp => packages}/app-check-compat/src/service.ts (100%) rename {packages-exp/app-check-exp => packages/app-check-compat}/tsconfig.json (100%) rename {packages-exp => packages}/app-check-exp/.eslintrc.js (100%) rename {packages-exp => packages}/app-check-exp/README.md (100%) rename {packages-exp => packages}/app-check-exp/api-extractor.json (100%) rename {packages-exp => packages}/app-check-exp/karma.conf.js (100%) rename {packages-exp => packages}/app-check-exp/package.json (100%) rename {packages-exp => packages}/app-check-exp/rollup.config.js (100%) rename {packages-exp => packages}/app-check-exp/rollup.config.release.js (100%) rename {packages-exp => packages}/app-check-exp/rollup.shared.js (100%) rename {packages-exp => packages}/app-check-exp/src/api.test.ts (100%) rename {packages-exp => packages}/app-check-exp/src/api.ts (100%) rename {packages-exp => packages}/app-check-exp/src/client.test.ts (100%) rename {packages-exp => packages}/app-check-exp/src/client.ts (100%) rename packages/{app-check => app-check-exp}/src/constants.ts (100%) rename packages/{app-check => app-check-exp}/src/debug.test.ts (100%) rename packages/{app-check => app-check-exp}/src/debug.ts (100%) rename {packages-exp => packages}/app-check-exp/src/errors.ts (100%) rename {packages-exp => packages}/app-check-exp/src/factory.ts (100%) rename {packages-exp => packages}/app-check-exp/src/index.ts (100%) rename {packages-exp => packages}/app-check-exp/src/indexeddb.ts (100%) rename {packages-exp => packages}/app-check-exp/src/internal-api.test.ts (100%) rename {packages-exp => packages}/app-check-exp/src/internal-api.ts (100%) rename packages/{app-check => app-check-exp}/src/logger.ts (100%) rename packages/{app-check => app-check-exp}/src/proactive-refresh.test.ts (100%) rename packages/{app-check => app-check-exp}/src/proactive-refresh.ts (100%) rename {packages-exp => packages}/app-check-exp/src/providers.ts (100%) rename {packages-exp => packages}/app-check-exp/src/public-types.ts (100%) rename {packages-exp => packages}/app-check-exp/src/recaptcha.test.ts (100%) rename {packages-exp => packages}/app-check-exp/src/recaptcha.ts (100%) rename {packages-exp => packages}/app-check-exp/src/state.ts (100%) rename packages/{app-check => app-check-exp}/src/storage.test.ts (100%) rename {packages-exp => packages}/app-check-exp/src/storage.ts (100%) rename {packages-exp => packages}/app-check-exp/src/types.ts (100%) rename {packages-exp => packages}/app-check-exp/src/util.ts (100%) rename packages/{app-check => app-check-exp}/test/setup.ts (100%) rename {packages-exp => packages}/app-check-exp/test/util.ts (100%) rename packages/{analytics => app-check-exp}/tsconfig.json (100%) rename {packages-exp/app-exp => packages/app-compat}/.eslintrc.js (100%) rename {packages-exp => packages}/app-compat/README.md (100%) rename {packages-exp => packages}/app-compat/karma.conf.js (100%) rename {packages-exp => packages}/app-compat/package.json (100%) rename {packages-exp => packages}/app-compat/rollup.config.js (100%) rename {packages-exp => packages}/app-compat/rollup.config.release.js (100%) rename {packages-exp => packages}/app-compat/src/errors.ts (100%) rename {packages-exp => packages}/app-compat/src/firebaseApp.ts (100%) rename {packages-exp => packages}/app-compat/src/firebaseNamespace.ts (100%) rename {packages-exp => packages}/app-compat/src/firebaseNamespaceCore.ts (100%) rename {packages-exp => packages}/app-compat/src/index.lite.ts (100%) rename {packages-exp => packages}/app-compat/src/index.ts (100%) rename {packages-exp => packages}/app-compat/src/lite/firebaseAppLite.ts (100%) rename {packages-exp => packages}/app-compat/src/lite/firebaseNamespaceLite.ts (100%) rename {packages-exp => packages}/app-compat/src/logger.ts (100%) rename {packages-exp => packages}/app-compat/src/public-types.ts (100%) rename {packages-exp => packages}/app-compat/src/registerCoreComponents.ts (100%) rename {packages-exp => packages}/app-compat/src/types.ts (100%) rename {packages-exp => packages}/app-compat/test/firebaseAppCompat.test.ts (100%) rename {packages-exp/app-exp => packages/app-compat}/test/setup.ts (100%) rename {packages-exp => packages}/app-compat/test/util.ts (100%) rename {packages-exp => packages}/app-compat/tsconfig.json (100%) rename {packages-exp/firebase-exp => packages/app-exp}/.eslintrc.js (100%) rename {packages-exp => packages}/app-exp/README.md (100%) rename {packages-exp => packages}/app-exp/api-extractor.json (100%) rename {packages-exp => packages}/app-exp/karma.conf.js (100%) rename {packages-exp => packages}/app-exp/package.json (100%) rename {packages-exp => packages}/app-exp/rollup.config.js (100%) rename {packages-exp => packages}/app-exp/rollup.config.release.js (100%) rename {packages-exp => packages}/app-exp/rollup.shared.js (100%) rename {packages-exp => packages}/app-exp/src/api.test.ts (100%) rename {packages-exp => packages}/app-exp/src/api.ts (100%) rename {packages-exp => packages}/app-exp/src/constants.ts (100%) rename {packages-exp => packages}/app-exp/src/errors.ts (100%) rename {packages-exp => packages}/app-exp/src/firebaseApp.test.ts (100%) rename {packages-exp => packages}/app-exp/src/firebaseApp.ts (100%) rename {packages-exp => packages}/app-exp/src/index.ts (100%) rename {packages-exp => packages}/app-exp/src/internal.test.ts (100%) rename {packages-exp => packages}/app-exp/src/internal.ts (100%) rename packages/{app => app-exp}/src/logger.ts (100%) rename {packages-exp => packages}/app-exp/src/platformLoggerService.test.ts (100%) rename {packages-exp => packages}/app-exp/src/platformLoggerService.ts (100%) rename {packages-exp => packages}/app-exp/src/public-types.ts (100%) rename {packages-exp => packages}/app-exp/src/registerCoreComponents.ts (100%) rename {packages-exp => packages}/app-exp/src/types.ts (100%) rename {packages-exp/performance-compat => packages/app-exp}/test/setup.ts (100%) rename {packages-exp => packages}/app-exp/test/util.ts (100%) rename {packages-exp => packages}/app-exp/tsconfig.json (100%) rename {packages-exp => packages}/auth-compat-exp/.eslintrc.js (100%) rename {packages-exp => packages}/auth-compat-exp/README.md (100%) rename {packages-exp => packages}/auth-compat-exp/demo/.eslintignore (100%) rename {packages-exp => packages}/auth-compat-exp/demo/.eslintrc.js (100%) rename {packages-exp => packages}/auth-compat-exp/demo/.gitignore (100%) rename {packages-exp => packages}/auth-compat-exp/demo/README.md (100%) rename {packages-exp/auth-exp => packages/auth-compat-exp}/demo/database.rules.json (100%) rename {packages-exp => packages}/auth-compat-exp/demo/firebase.json (100%) rename {packages-exp => packages}/auth-compat-exp/demo/functions/index.js (100%) rename {packages-exp => packages}/auth-compat-exp/demo/functions/package.json (100%) rename {packages-exp => packages}/auth-compat-exp/demo/functions/yarn.lock (100%) rename {packages-exp => packages}/auth-compat-exp/demo/package.json (100%) rename {packages-exp => packages}/auth-compat-exp/demo/public/common.js (100%) rename {packages-exp/auth-exp => packages/auth-compat-exp}/demo/public/manifest.json (100%) rename {packages-exp => packages}/auth-compat-exp/demo/public/sample-config.js (100%) rename {packages-exp => packages}/auth-compat-exp/demo/public/script.js (100%) rename {packages-exp/auth-exp => packages/auth-compat-exp}/demo/public/style.css (100%) rename {packages-exp => packages}/auth-compat-exp/demo/rollup.config.js (100%) rename {packages-exp => packages}/auth-compat-exp/demo/tsconfig.json (100%) rename {packages-exp => packages}/auth-compat-exp/demo/yarn.lock (100%) rename {packages-exp => packages}/auth-compat-exp/index.node.ts (100%) rename {packages-exp => packages}/auth-compat-exp/index.ts (100%) rename {packages-exp => packages}/auth-compat-exp/karma.conf.js (100%) rename {packages-exp => packages}/auth-compat-exp/package.json (100%) rename {packages-exp => packages}/auth-compat-exp/rollup.config.js (100%) rename {packages-exp => packages}/auth-compat-exp/rollup.config.release.js (100%) rename {packages-exp => packages}/auth-compat-exp/rollup.config.shared.js (100%) rename {packages-exp => packages}/auth-compat-exp/scripts/run_node_tests.ts (100%) rename {packages-exp => packages}/auth-compat-exp/src/auth.test.ts (100%) rename {packages-exp => packages}/auth-compat-exp/src/auth.ts (100%) rename {packages-exp => packages}/auth-compat-exp/src/persistence.ts (100%) rename {packages-exp => packages}/auth-compat-exp/src/phone_auth_provider.ts (100%) rename {packages-exp => packages}/auth-compat-exp/src/platform.ts (100%) rename {packages-exp => packages}/auth-compat-exp/src/popup_redirect.test.ts (100%) rename {packages-exp => packages}/auth-compat-exp/src/popup_redirect.ts (100%) rename {packages-exp => packages}/auth-compat-exp/src/recaptcha_verifier.ts (100%) rename {packages-exp => packages}/auth-compat-exp/src/user.ts (100%) rename {packages-exp => packages}/auth-compat-exp/src/user_credential.ts (100%) rename {packages-exp => packages}/auth-compat-exp/src/wrap.ts (100%) rename {packages-exp => packages}/auth-compat-exp/test/helpers/helpers.ts (100%) rename {packages-exp => packages}/auth-compat-exp/test/integration/flows/anonymous.test.ts (100%) rename {packages-exp => packages}/auth-compat-exp/test/integration/flows/custom.test.ts (100%) rename {packages-exp => packages}/auth-compat-exp/test/integration/flows/email.test.ts (100%) rename {packages-exp => packages}/auth-compat-exp/test/integration/flows/idp.test.ts (100%) rename {packages-exp => packages}/auth-compat-exp/test/integration/flows/oob.test.ts (100%) rename {packages-exp => packages}/auth-compat-exp/test/integration/flows/phone.test.ts (100%) rename {packages-exp => packages}/auth-compat-exp/test/integration/webdriver/static/anonymous.js (100%) rename {packages-exp => packages}/auth-compat-exp/test/integration/webdriver/static/core.js (100%) rename {packages-exp => packages}/auth-compat-exp/test/integration/webdriver/static/email.js (100%) rename {packages-exp => packages}/auth-compat-exp/test/integration/webdriver/static/index.html (100%) rename {packages-exp => packages}/auth-compat-exp/test/integration/webdriver/static/index.js (100%) rename {packages-exp => packages}/auth-compat-exp/test/integration/webdriver/static/lazy_load.js (100%) rename {packages-exp => packages}/auth-compat-exp/test/integration/webdriver/static/logged_in.html (100%) rename {packages-exp => packages}/auth-compat-exp/test/integration/webdriver/static/persistence.js (100%) rename {packages-exp => packages}/auth-compat-exp/test/integration/webdriver/static/popup.js (100%) rename {packages-exp => packages}/auth-compat-exp/test/integration/webdriver/static/redirect.js (100%) rename {packages-exp => packages}/auth-compat-exp/test/integration/webdriver/static/rollup.config.js (100%) rename {packages-exp => packages}/auth-compat-exp/test/integration/webdriver/static/ui.js (100%) rename {packages-exp/functions-compat => packages/auth-compat-exp}/tsconfig.json (100%) rename {packages-exp => packages}/auth-exp/.eslintrc.js (100%) rename {packages-exp => packages}/auth-exp/README.md (100%) rename {packages-exp => packages}/auth-exp/api-extractor.json (100%) rename {packages-exp => packages}/auth-exp/cordova/demo/.gitignore (100%) rename {packages-exp => packages}/auth-exp/cordova/demo/README.md (100%) rename {packages-exp => packages}/auth-exp/cordova/demo/package.json (100%) rename {packages-exp => packages}/auth-exp/cordova/demo/rollup.config.js (100%) rename {packages-exp => packages}/auth-exp/cordova/demo/sample-config.xml (100%) rename {packages-exp => packages}/auth-exp/cordova/demo/src/index.js (100%) rename {packages-exp => packages}/auth-exp/cordova/demo/src/logging.js (100%) rename {packages-exp => packages}/auth-exp/cordova/demo/src/sample-config.js (100%) rename {packages-exp => packages}/auth-exp/cordova/demo/www/index.html (100%) rename {packages-exp => packages}/auth-exp/cordova/demo/www/style.css (100%) rename {packages-exp => packages}/auth-exp/cordova/package.json (100%) rename {packages-exp => packages}/auth-exp/demo/.eslintignore (100%) rename {packages-exp => packages}/auth-exp/demo/.eslintrc.js (100%) rename {packages-exp => packages}/auth-exp/demo/.gitignore (100%) rename {packages-exp => packages}/auth-exp/demo/README.md (100%) rename packages/{auth => auth-exp}/demo/database.rules.json (100%) rename {packages-exp => packages}/auth-exp/demo/firebase.json (100%) rename {packages-exp => packages}/auth-exp/demo/functions/index.js (100%) rename {packages-exp => packages}/auth-exp/demo/functions/package.json (100%) rename {packages-exp => packages}/auth-exp/demo/functions/yarn.lock (100%) rename {packages-exp => packages}/auth-exp/demo/package.json (100%) rename {packages-exp => packages}/auth-exp/demo/public/common.js (100%) rename {packages-exp => packages}/auth-exp/demo/public/index.html (100%) rename packages/{auth => auth-exp}/demo/public/manifest.json (100%) rename packages/{auth => auth-exp}/demo/public/style.css (100%) rename {packages-exp => packages}/auth-exp/demo/rollup.config.js (100%) rename {packages-exp => packages}/auth-exp/demo/src/config.d.ts (100%) rename {packages-exp => packages}/auth-exp/demo/src/index.js (100%) rename {packages-exp => packages}/auth-exp/demo/src/logging.js (100%) rename {packages-exp => packages}/auth-exp/demo/src/sample-config.js (100%) rename {packages-exp => packages}/auth-exp/demo/src/worker/service-worker.ts (100%) rename {packages-exp => packages}/auth-exp/demo/src/worker/tsconfig.json (100%) rename {packages-exp => packages}/auth-exp/demo/src/worker/web-worker.ts (100%) rename {packages-exp => packages}/auth-exp/demo/tsconfig.json (100%) rename {packages-exp => packages}/auth-exp/index.cordova.ts (100%) rename {packages-exp => packages}/auth-exp/index.doc.ts (100%) rename {packages-exp => packages}/auth-exp/index.node.ts (100%) rename {packages-exp => packages}/auth-exp/index.rn.ts (100%) rename {packages-exp => packages}/auth-exp/index.ts (100%) rename {packages-exp => packages}/auth-exp/index.webworker.ts (100%) rename {packages-exp => packages}/auth-exp/internal/index.ts (100%) rename {packages-exp => packages}/auth-exp/internal/package.json (100%) rename {packages-exp => packages}/auth-exp/karma.conf.js (100%) rename {packages-exp => packages}/auth-exp/package.json (100%) rename {packages-exp => packages}/auth-exp/react-native/package.json (100%) rename {packages-exp => packages}/auth-exp/rollup.config.js (100%) rename {packages-exp => packages}/auth-exp/rollup.config.release.js (100%) rename {packages-exp => packages}/auth-exp/rollup.config.shared.js (100%) rename {packages-exp => packages}/auth-exp/scripts/run-node-tests.js (100%) rename {packages-exp => packages}/auth-exp/scripts/run-node-tests.ts (100%) rename {packages-exp => packages}/auth-exp/src/api/account_management/account.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/api/account_management/account.ts (100%) rename {packages-exp => packages}/auth-exp/src/api/account_management/email_and_password.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/api/account_management/email_and_password.ts (100%) rename {packages-exp => packages}/auth-exp/src/api/account_management/mfa.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/api/account_management/mfa.ts (100%) rename {packages-exp => packages}/auth-exp/src/api/account_management/profile.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/api/account_management/profile.ts (100%) rename {packages-exp => packages}/auth-exp/src/api/authentication/create_auth_uri.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/api/authentication/create_auth_uri.ts (100%) rename {packages-exp => packages}/auth-exp/src/api/authentication/custom_token.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/api/authentication/custom_token.ts (100%) rename {packages-exp => packages}/auth-exp/src/api/authentication/email_and_password.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/api/authentication/email_and_password.ts (100%) rename {packages-exp => packages}/auth-exp/src/api/authentication/email_link.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/api/authentication/email_link.ts (100%) rename {packages-exp => packages}/auth-exp/src/api/authentication/idp.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/api/authentication/idp.ts (100%) rename {packages-exp => packages}/auth-exp/src/api/authentication/mfa.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/api/authentication/mfa.ts (100%) rename {packages-exp => packages}/auth-exp/src/api/authentication/recaptcha.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/api/authentication/recaptcha.ts (100%) rename {packages-exp => packages}/auth-exp/src/api/authentication/sign_up.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/api/authentication/sign_up.ts (100%) rename {packages-exp => packages}/auth-exp/src/api/authentication/sms.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/api/authentication/sms.ts (100%) rename {packages-exp => packages}/auth-exp/src/api/authentication/token.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/api/authentication/token.ts (100%) rename {packages-exp => packages}/auth-exp/src/api/errors.ts (100%) rename {packages-exp => packages}/auth-exp/src/api/index.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/api/index.ts (100%) rename {packages-exp => packages}/auth-exp/src/api/project_config/get_project_config.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/api/project_config/get_project_config.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/action_code_url.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/action_code_url.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/auth/auth_event_manager.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/auth/auth_event_manager.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/auth/auth_impl.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/auth/auth_impl.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/auth/emulator.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/auth/emulator.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/auth/firebase_internal.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/auth/firebase_internal.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/auth/initialize.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/auth/initialize.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/auth/register.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/credentials/auth_credential.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/credentials/email.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/credentials/email.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/credentials/index.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/credentials/oauth.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/credentials/oauth.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/credentials/phone.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/credentials/phone.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/credentials/saml.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/credentials/saml.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/errors.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/errors.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/index.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/persistence/in_memory.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/persistence/in_memory.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/persistence/index.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/persistence/persistence_user_manager.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/persistence/persistence_user_manager.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/providers/email.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/providers/email.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/providers/facebook.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/providers/facebook.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/providers/federated.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/providers/federated.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/providers/github.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/providers/github.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/providers/google.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/providers/google.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/providers/oauth.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/providers/oauth.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/providers/saml.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/providers/saml.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/providers/twitter.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/providers/twitter.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/strategies/abstract_popup_redirect_operation.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/strategies/abstract_popup_redirect_operation.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/strategies/action_code_settings.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/strategies/action_code_settings.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/strategies/anonymous.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/strategies/anonymous.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/strategies/credential.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/strategies/credential.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/strategies/custom_token.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/strategies/custom_token.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/strategies/email.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/strategies/email.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/strategies/email_and_password.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/strategies/email_and_password.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/strategies/email_link.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/strategies/email_link.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/strategies/idp.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/strategies/idp.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/strategies/redirect.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/strategies/redirect.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/user/account_info.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/user/account_info.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/user/additional_user_info.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/user/additional_user_info.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/user/id_token_result.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/user/id_token_result.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/user/invalidation.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/user/invalidation.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/user/link_unlink.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/user/link_unlink.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/user/proactive_refresh.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/user/proactive_refresh.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/user/reauthenticate.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/user/reauthenticate.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/user/reload.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/user/reload.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/user/token_manager.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/user/token_manager.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/user/user_credential_impl.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/user/user_credential_impl.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/user/user_impl.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/user/user_impl.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/user/user_metadata.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/util/assert.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/util/assert.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/util/browser.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/util/browser.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/util/delay.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/util/delay.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/util/emulator.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/util/emulator.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/util/event_id.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/util/event_id.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/util/fetch_provider.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/util/handler.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/util/instantiator.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/util/instantiator.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/util/location.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/util/log.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/util/navigator.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/util/providers.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/util/resolver.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/util/time.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/util/validate_origin.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/util/validate_origin.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/util/version.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/core/util/version.ts (100%) rename {packages-exp => packages}/auth-exp/src/index.ts (100%) rename {packages-exp => packages}/auth-exp/src/mfa/index.ts (100%) rename {packages-exp => packages}/auth-exp/src/mfa/mfa_assertion.ts (100%) rename {packages-exp => packages}/auth-exp/src/mfa/mfa_error.ts (100%) rename {packages-exp => packages}/auth-exp/src/mfa/mfa_info.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/mfa/mfa_info.ts (100%) rename {packages-exp => packages}/auth-exp/src/mfa/mfa_resolver.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/mfa/mfa_resolver.ts (100%) rename {packages-exp => packages}/auth-exp/src/mfa/mfa_session.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/mfa/mfa_session.ts (100%) rename {packages-exp => packages}/auth-exp/src/mfa/mfa_user.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/mfa/mfa_user.ts (100%) rename {packages-exp => packages}/auth-exp/src/model/application_verifier.ts (100%) rename {packages-exp => packages}/auth-exp/src/model/auth.ts (100%) rename {packages-exp => packages}/auth-exp/src/model/enum_maps.ts (100%) rename {packages-exp => packages}/auth-exp/src/model/enums.ts (100%) rename {packages-exp => packages}/auth-exp/src/model/id_token.ts (100%) rename {packages-exp => packages}/auth-exp/src/model/popup_redirect.ts (100%) rename {packages-exp => packages}/auth-exp/src/model/public_types.ts (100%) rename {packages-exp => packages}/auth-exp/src/model/user.ts (100%) rename {packages-exp => packages}/auth-exp/src/platform_browser/auth.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/platform_browser/auth_window.ts (100%) rename {packages-exp => packages}/auth-exp/src/platform_browser/iframe/gapi.iframes.ts (100%) rename {packages-exp => packages}/auth-exp/src/platform_browser/iframe/gapi.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/platform_browser/iframe/gapi.ts (100%) rename {packages-exp => packages}/auth-exp/src/platform_browser/iframe/iframe.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/platform_browser/iframe/iframe.ts (100%) rename {packages-exp => packages}/auth-exp/src/platform_browser/load_js.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/platform_browser/load_js.ts (100%) rename {packages-exp => packages}/auth-exp/src/platform_browser/messagechannel/index.ts (100%) rename {packages-exp => packages}/auth-exp/src/platform_browser/messagechannel/promise.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/platform_browser/messagechannel/promise.ts (100%) rename {packages-exp => packages}/auth-exp/src/platform_browser/messagechannel/receiver.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/platform_browser/messagechannel/receiver.ts (100%) rename {packages-exp => packages}/auth-exp/src/platform_browser/messagechannel/sender.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/platform_browser/messagechannel/sender.ts (100%) rename {packages-exp => packages}/auth-exp/src/platform_browser/mfa/assertions/phone.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/platform_browser/mfa/assertions/phone.ts (100%) rename {packages-exp => packages}/auth-exp/src/platform_browser/persistence/browser.ts (100%) rename {packages-exp => packages}/auth-exp/src/platform_browser/persistence/indexed_db.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/platform_browser/persistence/indexed_db.ts (100%) rename {packages-exp => packages}/auth-exp/src/platform_browser/persistence/local_storage.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/platform_browser/persistence/local_storage.ts (100%) rename {packages-exp => packages}/auth-exp/src/platform_browser/persistence/session_storage.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/platform_browser/persistence/session_storage.ts (100%) rename {packages-exp => packages}/auth-exp/src/platform_browser/popup_redirect.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/platform_browser/popup_redirect.ts (100%) rename {packages-exp => packages}/auth-exp/src/platform_browser/providers/phone.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/platform_browser/providers/phone.ts (100%) rename {packages-exp => packages}/auth-exp/src/platform_browser/recaptcha/recaptcha.ts (100%) rename {packages-exp => packages}/auth-exp/src/platform_browser/recaptcha/recaptcha_loader.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/platform_browser/recaptcha/recaptcha_loader.ts (100%) rename {packages-exp => packages}/auth-exp/src/platform_browser/recaptcha/recaptcha_mock.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/platform_browser/recaptcha/recaptcha_mock.ts (100%) rename {packages-exp => packages}/auth-exp/src/platform_browser/recaptcha/recaptcha_verifier.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/platform_browser/recaptcha/recaptcha_verifier.ts (100%) rename {packages-exp => packages}/auth-exp/src/platform_browser/strategies/phone.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/platform_browser/strategies/phone.ts (100%) rename {packages-exp => packages}/auth-exp/src/platform_browser/strategies/popup.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/platform_browser/strategies/popup.ts (100%) rename {packages-exp => packages}/auth-exp/src/platform_browser/strategies/redirect.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/platform_browser/strategies/redirect.ts (100%) rename {packages-exp => packages}/auth-exp/src/platform_browser/util/popup.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/platform_browser/util/popup.ts (100%) rename {packages-exp => packages}/auth-exp/src/platform_browser/util/worker.ts (100%) rename {packages-exp => packages}/auth-exp/src/platform_cordova/plugins.ts (100%) rename {packages-exp => packages}/auth-exp/src/platform_cordova/popup_redirect/events.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/platform_cordova/popup_redirect/events.ts (100%) rename {packages-exp => packages}/auth-exp/src/platform_cordova/popup_redirect/popup_redirect.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/platform_cordova/popup_redirect/popup_redirect.ts (100%) rename {packages-exp => packages}/auth-exp/src/platform_cordova/popup_redirect/utils.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/platform_cordova/popup_redirect/utils.ts (100%) rename {packages-exp => packages}/auth-exp/src/platform_cordova/strategies/redirect.ts (100%) rename {packages-exp => packages}/auth-exp/src/platform_react_native/persistence/react_native.test.ts (100%) rename {packages-exp => packages}/auth-exp/src/platform_react_native/persistence/react_native.ts (100%) rename {packages-exp => packages}/auth-exp/src/platform_react_native/react-native.d.ts (100%) rename {packages-exp => packages}/auth-exp/test/helpers/api/helper.ts (100%) rename {packages-exp => packages}/auth-exp/test/helpers/delay.ts (100%) rename {packages-exp => packages}/auth-exp/test/helpers/fake_service_worker.ts (100%) rename {packages-exp => packages}/auth-exp/test/helpers/id_token_response.ts (100%) rename {packages-exp => packages}/auth-exp/test/helpers/iframe_event.ts (100%) rename {packages-exp => packages}/auth-exp/test/helpers/integration/emulator_rest_helpers.ts (100%) rename {packages-exp => packages}/auth-exp/test/helpers/integration/helpers.ts (100%) rename {packages-exp => packages}/auth-exp/test/helpers/integration/settings.ts (100%) rename {packages-exp => packages}/auth-exp/test/helpers/jwt.ts (100%) rename {packages-exp => packages}/auth-exp/test/helpers/mock_auth.ts (100%) rename {packages-exp => packages}/auth-exp/test/helpers/mock_auth_credential.ts (100%) rename {packages-exp => packages}/auth-exp/test/helpers/mock_fetch.test.ts (100%) rename {packages-exp => packages}/auth-exp/test/helpers/mock_fetch.ts (100%) rename {packages-exp => packages}/auth-exp/test/helpers/mock_popup_redirect_resolver.ts (100%) rename {packages-exp => packages}/auth-exp/test/helpers/redirect_persistence.ts (100%) rename {packages-exp => packages}/auth-exp/test/helpers/timeout_stub.ts (100%) rename {packages-exp => packages}/auth-exp/test/integration/flows/anonymous.test.ts (100%) rename {packages-exp => packages}/auth-exp/test/integration/flows/custom.local.test.ts (100%) rename {packages-exp => packages}/auth-exp/test/integration/flows/email.test.ts (100%) rename {packages-exp => packages}/auth-exp/test/integration/flows/idp.local.test.ts (100%) rename {packages-exp => packages}/auth-exp/test/integration/flows/oob.local.test.ts (100%) rename {packages-exp => packages}/auth-exp/test/integration/flows/phone.test.ts (100%) rename {packages-exp => packages}/auth-exp/test/integration/webdriver/anonymous.test.ts (100%) rename {packages-exp => packages}/auth-exp/test/integration/webdriver/compat/firebaseui.test.ts (100%) rename {packages-exp => packages}/auth-exp/test/integration/webdriver/persistence.test.ts (100%) rename {packages-exp => packages}/auth-exp/test/integration/webdriver/popup.test.ts (100%) rename {packages-exp => packages}/auth-exp/test/integration/webdriver/redirect.test.ts (100%) rename {packages-exp => packages}/auth-exp/test/integration/webdriver/static/anonymous.js (100%) rename {packages-exp => packages}/auth-exp/test/integration/webdriver/static/core.js (100%) rename {packages-exp => packages}/auth-exp/test/integration/webdriver/static/email.js (100%) rename {packages-exp => packages}/auth-exp/test/integration/webdriver/static/index.html (100%) rename {packages-exp => packages}/auth-exp/test/integration/webdriver/static/index.js (100%) rename {packages-exp => packages}/auth-exp/test/integration/webdriver/static/persistence.js (100%) rename {packages-exp => packages}/auth-exp/test/integration/webdriver/static/popup.js (100%) rename {packages-exp => packages}/auth-exp/test/integration/webdriver/static/redirect.js (100%) rename {packages-exp => packages}/auth-exp/test/integration/webdriver/static/rollup.config.js (100%) rename {packages-exp => packages}/auth-exp/test/integration/webdriver/util/auth_driver.ts (100%) rename {packages-exp => packages}/auth-exp/test/integration/webdriver/util/functions.ts (100%) rename {packages-exp => packages}/auth-exp/test/integration/webdriver/util/idp_page.ts (100%) rename {packages-exp => packages}/auth-exp/test/integration/webdriver/util/js_load_condition.ts (100%) rename {packages-exp => packages}/auth-exp/test/integration/webdriver/util/test_runner.ts (100%) rename {packages-exp => packages}/auth-exp/test/integration/webdriver/util/test_server.ts (100%) rename {packages-exp => packages}/auth-exp/test/integration/webdriver/util/ui_page.ts (100%) rename {packages-exp => packages}/auth-exp/tsconfig.json (100%) delete mode 100644 packages/auth/demo/public/index.html rename {packages-exp/installations-compat => packages/firebase-exp}/.eslintrc.js (100%) rename packages/{firebase => firebase-exp}/.gitignore (100%) rename {packages-exp => packages}/firebase-exp/README.md (100%) rename {packages-exp => packages}/firebase-exp/analytics/index.ts (100%) rename {packages-exp => packages}/firebase-exp/analytics/package.json (100%) rename {packages-exp => packages}/firebase-exp/app-check/index.ts (100%) rename {packages-exp => packages}/firebase-exp/app-check/package.json (100%) rename {packages-exp => packages}/firebase-exp/app/index.cdn.ts (100%) rename {packages-exp => packages}/firebase-exp/app/index.ts (100%) rename {packages-exp => packages}/firebase-exp/app/package.json (100%) rename {packages-exp => packages}/firebase-exp/auth/cordova/index.ts (100%) rename {packages-exp => packages}/firebase-exp/auth/cordova/package.json (100%) rename {packages-exp => packages}/firebase-exp/auth/index.ts (100%) rename {packages-exp => packages}/firebase-exp/auth/package.json (100%) rename {packages-exp => packages}/firebase-exp/auth/react-native/index.ts (100%) rename {packages-exp => packages}/firebase-exp/auth/react-native/package.json (100%) rename {packages-exp => packages}/firebase-exp/compat/analytics/index.ts (100%) rename {packages-exp => packages}/firebase-exp/compat/analytics/package.json (100%) rename {packages-exp => packages}/firebase-exp/compat/app-check/index.ts (100%) rename {packages-exp => packages}/firebase-exp/compat/app-check/package.json (100%) rename {packages-exp => packages}/firebase-exp/compat/app/index.cdn.ts (100%) rename {packages-exp => packages}/firebase-exp/compat/app/index.ts (100%) rename {packages-exp => packages}/firebase-exp/compat/app/package.json (100%) rename {packages-exp => packages}/firebase-exp/compat/auth/index.ts (100%) rename {packages-exp => packages}/firebase-exp/compat/auth/package.json (100%) rename {packages-exp => packages}/firebase-exp/compat/database/index.ts (100%) rename {packages-exp => packages}/firebase-exp/compat/database/package.json (100%) rename {packages-exp => packages}/firebase-exp/compat/firestore/index.ts (100%) rename {packages-exp => packages}/firebase-exp/compat/firestore/package.json (100%) rename {packages-exp => packages}/firebase-exp/compat/functions/index.ts (100%) rename {packages-exp => packages}/firebase-exp/compat/functions/package.json (100%) rename {packages-exp => packages}/firebase-exp/compat/index.cdn.ts (100%) rename {packages-exp => packages}/firebase-exp/compat/index.d.ts (100%) rename {packages-exp => packages}/firebase-exp/compat/index.node.ts (100%) rename {packages-exp => packages}/firebase-exp/compat/index.perf.ts (100%) rename {packages-exp => packages}/firebase-exp/compat/index.rn.ts (100%) rename {packages-exp => packages}/firebase-exp/compat/index.ts (100%) rename {packages-exp => packages}/firebase-exp/compat/messaging/index.ts (100%) rename {packages-exp => packages}/firebase-exp/compat/messaging/package.json (100%) rename {packages-exp => packages}/firebase-exp/compat/package.json (100%) rename {packages-exp => packages}/firebase-exp/compat/performance/index.ts (100%) rename {packages-exp => packages}/firebase-exp/compat/performance/package.json (100%) rename {packages-exp => packages}/firebase-exp/compat/remote-config/index.ts (100%) rename {packages-exp => packages}/firebase-exp/compat/remote-config/package.json (100%) rename {packages-exp => packages}/firebase-exp/compat/rollup.config.js (100%) rename {packages-exp => packages}/firebase-exp/compat/rollup.config.release.js (100%) rename {packages-exp => packages}/firebase-exp/compat/storage/index.ts (100%) rename {packages-exp => packages}/firebase-exp/compat/storage/package.json (100%) rename {packages-exp => packages}/firebase-exp/database/index.ts (100%) rename {packages-exp => packages}/firebase-exp/database/package.json (100%) rename {packages-exp => packages}/firebase-exp/firestore/index.ts (100%) rename {packages-exp => packages}/firebase-exp/firestore/lite/index.ts (100%) rename {packages-exp => packages}/firebase-exp/firestore/lite/package.json (100%) rename {packages-exp => packages}/firebase-exp/firestore/package.json (100%) rename {packages-exp => packages}/firebase-exp/functions/index.ts (100%) rename {packages-exp => packages}/firebase-exp/functions/package.json (100%) rename {packages-exp => packages}/firebase-exp/gulpfile.js (100%) rename {packages-exp => packages}/firebase-exp/messaging/index.ts (100%) rename {packages-exp => packages}/firebase-exp/messaging/package.json (100%) rename {packages-exp => packages}/firebase-exp/messaging/sw/index.ts (100%) rename {packages-exp => packages}/firebase-exp/messaging/sw/package.json (100%) rename {packages-exp => packages}/firebase-exp/package.json (100%) rename {packages-exp => packages}/firebase-exp/performance/index.ts (100%) rename {packages-exp => packages}/firebase-exp/performance/package.json (100%) rename {packages-exp => packages}/firebase-exp/remote-config/index.ts (100%) rename {packages-exp => packages}/firebase-exp/remote-config/package.json (100%) rename {packages-exp => packages}/firebase-exp/rollup.config.js (100%) rename {packages-exp => packages}/firebase-exp/rollup.config.release.js (100%) rename {packages-exp => packages}/firebase-exp/storage/index.ts (100%) rename {packages-exp => packages}/firebase-exp/storage/package.json (100%) rename {packages-exp/functions-exp => packages/firebase-exp}/tsconfig.json (100%) rename {packages-exp => packages}/functions-compat/.eslintrc.js (100%) rename {packages-exp => packages}/functions-compat/karma.conf.js (100%) rename {packages-exp => packages}/functions-compat/package.json (100%) rename {packages-exp => packages}/functions-compat/rollup.config.base.js (100%) rename {packages-exp => packages}/functions-compat/rollup.config.js (100%) rename {packages-exp => packages}/functions-compat/rollup.config.release.js (100%) rename {packages-exp => packages}/functions-compat/src/callable.test.ts (100%) rename {packages-exp => packages}/functions-compat/src/index.node.ts (100%) rename {packages-exp => packages}/functions-compat/src/index.ts (100%) rename {packages-exp => packages}/functions-compat/src/register.ts (100%) rename {packages-exp => packages}/functions-compat/src/service.test.ts (100%) rename {packages-exp => packages}/functions-compat/src/service.ts (100%) rename {packages-exp => packages}/functions-compat/test/utils.ts (100%) rename packages/{app-check => functions-compat}/tsconfig.json (100%) rename {packages-exp => packages}/functions-exp/.eslintrc.js (100%) rename packages/{functions => functions-exp}/README.md (100%) rename {packages-exp => packages}/functions-exp/api-extractor.json (100%) rename {packages-exp => packages}/functions-exp/karma.conf.js (100%) rename {packages-exp => packages}/functions-exp/package.json (100%) rename {packages-exp => packages}/functions-exp/rollup.config.js (100%) rename {packages-exp => packages}/functions-exp/rollup.config.release.js (100%) rename {packages-exp => packages}/functions-exp/rollup.shared.js (100%) rename {packages-exp => packages}/functions-exp/src/api.ts (100%) rename {packages-exp => packages}/functions-exp/src/callable.test.ts (100%) rename {packages-exp => packages}/functions-exp/src/config.ts (100%) rename {packages-exp => packages}/functions-exp/src/constants.ts (100%) rename {packages-exp => packages}/functions-exp/src/context.ts (100%) rename {packages-exp => packages}/functions-exp/src/error.ts (100%) rename {packages-exp => packages}/functions-exp/src/index.node.ts (100%) rename {packages-exp => packages}/functions-exp/src/index.ts (100%) rename {packages-exp => packages}/functions-exp/src/public-types.ts (100%) rename {packages-exp => packages}/functions-exp/src/serializer.test.ts (100%) rename {packages-exp => packages}/functions-exp/src/serializer.ts (100%) rename {packages-exp => packages}/functions-exp/src/service.test.ts (100%) rename {packages-exp => packages}/functions-exp/src/service.ts (100%) rename {packages-exp => packages}/functions-exp/test/utils.ts (100%) rename packages/{functions => functions-exp}/tsconfig.json (100%) rename {packages-exp/installations-exp => packages/installations-compat}/.eslintrc.js (100%) rename {packages-exp => packages}/installations-compat/karma.conf.js (100%) rename {packages-exp => packages}/installations-compat/package.json (100%) rename {packages-exp => packages}/installations-compat/rollup.config.js (100%) rename {packages-exp => packages}/installations-compat/rollup.config.release.js (100%) rename {packages-exp => packages}/installations-compat/rollup.shared.js (100%) rename {packages-exp => packages}/installations-compat/src/index.ts (100%) rename {packages-exp => packages}/installations-compat/src/installationsCompat.test.ts (100%) rename {packages-exp => packages}/installations-compat/src/installationsCompat.ts (100%) rename {packages-exp => packages}/installations-compat/src/testing/setup.ts (100%) rename {packages-exp => packages}/installations-compat/src/testing/util.ts (100%) rename {packages-exp => packages}/installations-compat/tsconfig.json (100%) rename {packages-exp/messaging-exp => packages/installations-exp}/.eslintrc.js (100%) rename {packages-exp => packages}/installations-exp/api-extractor.json (100%) rename {packages-exp => packages}/installations-exp/karma.conf.js (100%) rename {packages-exp => packages}/installations-exp/package.json (100%) rename {packages-exp => packages}/installations-exp/rollup.config.js (100%) rename {packages-exp => packages}/installations-exp/rollup.config.release.js (100%) rename {packages-exp => packages}/installations-exp/rollup.shared.js (100%) rename {packages-exp => packages}/installations-exp/src/api/delete-installations.test.ts (100%) rename {packages-exp => packages}/installations-exp/src/api/delete-installations.ts (100%) rename {packages-exp => packages}/installations-exp/src/api/get-id.test.ts (100%) rename {packages-exp => packages}/installations-exp/src/api/get-id.ts (100%) rename {packages-exp => packages}/installations-exp/src/api/get-installations.ts (100%) rename {packages-exp => packages}/installations-exp/src/api/get-token.test.ts (100%) rename {packages-exp => packages}/installations-exp/src/api/get-token.ts (100%) rename {packages-exp => packages}/installations-exp/src/api/index.ts (100%) rename {packages-exp => packages}/installations-exp/src/api/on-id-change.test.ts (100%) rename {packages-exp => packages}/installations-exp/src/api/on-id-change.ts (100%) rename packages/{installations/src/api => installations-exp/src/functions}/common.test.ts (100%) rename {packages-exp => packages}/installations-exp/src/functions/common.ts (100%) rename {packages-exp => packages}/installations-exp/src/functions/config.ts (100%) rename {packages-exp => packages}/installations-exp/src/functions/create-installation-request.test.ts (100%) rename {packages-exp => packages}/installations-exp/src/functions/create-installation-request.ts (100%) rename {packages-exp => packages}/installations-exp/src/functions/delete-installation-request.test.ts (100%) rename {packages-exp => packages}/installations-exp/src/functions/delete-installation-request.ts (100%) rename {packages-exp => packages}/installations-exp/src/functions/generate-auth-token-request.test.ts (100%) rename {packages-exp => packages}/installations-exp/src/functions/generate-auth-token-request.ts (100%) rename packages/{installations => installations-exp}/src/helpers/buffer-to-base64-url-safe.test.ts (100%) rename packages/{installations => installations-exp}/src/helpers/buffer-to-base64-url-safe.ts (100%) rename {packages-exp => packages}/installations-exp/src/helpers/extract-app-config.test.ts (100%) rename {packages-exp => packages}/installations-exp/src/helpers/extract-app-config.ts (100%) rename {packages-exp => packages}/installations-exp/src/helpers/fid-changed.test.ts (100%) rename {packages-exp => packages}/installations-exp/src/helpers/fid-changed.ts (100%) rename packages/{installations => installations-exp}/src/helpers/generate-fid.test.ts (100%) rename packages/{installations => installations-exp}/src/helpers/generate-fid.ts (100%) rename {packages-exp => packages}/installations-exp/src/helpers/get-installation-entry.test.ts (100%) rename {packages-exp => packages}/installations-exp/src/helpers/get-installation-entry.ts (100%) rename {packages-exp => packages}/installations-exp/src/helpers/idb-manager.test.ts (100%) rename {packages-exp => packages}/installations-exp/src/helpers/idb-manager.ts (100%) rename {packages-exp => packages}/installations-exp/src/helpers/refresh-auth-token.test.ts (100%) rename {packages-exp => packages}/installations-exp/src/helpers/refresh-auth-token.ts (100%) rename {packages-exp => packages}/installations-exp/src/index.ts (100%) rename packages/{installations => installations-exp}/src/interfaces/api-response.ts (100%) rename packages/{installations => installations-exp}/src/interfaces/installation-entry.ts (100%) rename {packages-exp => packages}/installations-exp/src/interfaces/installation-impl.ts (100%) rename {packages-exp => packages}/installations-exp/src/interfaces/public-types.ts (100%) rename packages/{installations => installations-exp}/src/testing/compare-headers.test.ts (100%) rename packages/{installations => installations-exp}/src/testing/compare-headers.ts (100%) rename {packages-exp => packages}/installations-exp/src/testing/fake-generators.ts (100%) rename packages/{installations => installations-exp}/src/testing/setup.ts (100%) rename packages/{installations => installations-exp}/src/util/constants.ts (100%) rename packages/{installations => installations-exp}/src/util/errors.ts (100%) rename {packages-exp => packages}/installations-exp/src/util/get-key.ts (100%) rename {packages-exp => packages}/installations-exp/src/util/sleep.test.ts (100%) rename {packages-exp/messaging-exp/src/helpers => packages/installations-exp/src/util}/sleep.ts (100%) rename packages/{installations => installations-exp}/test-app/.gitignore (100%) rename {packages-exp => packages}/installations-exp/test-app/index.html (100%) rename {packages-exp => packages}/installations-exp/test-app/index.js (100%) rename {packages-exp => packages}/installations-exp/test-app/rollup.config.js (100%) rename {packages-exp => packages}/installations-exp/tsconfig.json (100%) rename {packages-exp => packages}/messaging-compat/.eslintrc.js (100%) rename {packages-exp => packages}/messaging-compat/README.md (100%) rename {packages-exp => packages}/messaging-compat/karma.conf.js (100%) rename {packages-exp => packages}/messaging-compat/package.json (100%) rename {packages-exp => packages}/messaging-compat/rollup.config.js (100%) rename {packages-exp => packages}/messaging-compat/rollup.config.release.js (100%) rename {packages-exp => packages}/messaging-compat/src/index.ts (100%) rename {packages-exp => packages}/messaging-compat/src/messaging-compat.ts (100%) rename {packages-exp => packages}/messaging-compat/src/registerMessagingCompat.ts (100%) rename {packages-exp => packages}/messaging-compat/test/fakes.ts (100%) rename {packages-exp => packages}/messaging-compat/test/messaging-compat.test.ts (100%) rename {packages-exp/messaging-exp => packages/messaging-compat}/tsconfig.json (100%) rename {packages-exp/performance-compat => packages/messaging-exp}/.eslintrc.js (100%) rename packages/{messaging => messaging-exp}/README.md (100%) rename {packages-exp => packages}/messaging-exp/api-extractor.json (100%) rename packages/{messaging => messaging-exp}/karma.conf.js (100%) rename {packages-exp => packages}/messaging-exp/package.json (100%) rename {packages-exp => packages}/messaging-exp/rollup.config.js (100%) rename {packages-exp => packages}/messaging-exp/rollup.config.release.js (100%) rename {packages-exp => packages}/messaging-exp/src/api.ts (100%) rename {packages-exp => packages}/messaging-exp/src/api/deleteToken.ts (100%) rename {packages-exp => packages}/messaging-exp/src/api/getToken.ts (100%) rename {packages-exp => packages}/messaging-exp/src/api/isSupported.ts (100%) rename {packages-exp => packages}/messaging-exp/src/api/onBackgroundMessage.ts (100%) rename {packages-exp => packages}/messaging-exp/src/api/onMessage.ts (100%) rename {packages-exp => packages}/messaging-exp/src/api/setDeliveryMetricsExportedToBigQueryEnabled.ts (100%) rename packages/{messaging => messaging-exp}/src/helpers/array-base64-translator.test.ts (100%) rename packages/{messaging => messaging-exp}/src/helpers/array-base64-translator.ts (100%) rename {packages-exp => packages}/messaging-exp/src/helpers/externalizePayload.test.ts (100%) rename {packages-exp => packages}/messaging-exp/src/helpers/externalizePayload.ts (100%) rename {packages-exp => packages}/messaging-exp/src/helpers/extract-app-config.test.ts (100%) rename {packages-exp => packages}/messaging-exp/src/helpers/extract-app-config.ts (100%) rename packages/{messaging => messaging-exp}/src/helpers/is-console-message.ts (100%) rename {packages-exp => packages}/messaging-exp/src/helpers/logToFirelog.test.ts (100%) rename {packages-exp => packages}/messaging-exp/src/helpers/logToFirelog.ts (100%) rename {packages-exp => packages}/messaging-exp/src/helpers/logToScion.ts (100%) rename packages/{messaging => messaging-exp}/src/helpers/migrate-old-database.test.ts (100%) rename packages/{messaging => messaging-exp}/src/helpers/migrate-old-database.ts (100%) rename {packages-exp => packages}/messaging-exp/src/helpers/register.ts (100%) rename {packages-exp => packages}/messaging-exp/src/helpers/registerDefaultSw.ts (100%) rename packages/{messaging => messaging-exp}/src/helpers/sleep.test.ts (100%) rename packages/{messaging => messaging-exp}/src/helpers/sleep.ts (100%) rename {packages-exp => packages}/messaging-exp/src/helpers/updateSwReg.ts (100%) rename {packages-exp => packages}/messaging-exp/src/helpers/updateVapidKey.ts (100%) rename {packages-exp => packages}/messaging-exp/src/index.sw.ts (100%) rename {packages-exp => packages}/messaging-exp/src/index.ts (100%) rename packages/{messaging => messaging-exp}/src/interfaces/app-config.ts (100%) rename {packages-exp => packages}/messaging-exp/src/interfaces/internal-dependencies.ts (100%) rename packages/{messaging => messaging-exp}/src/interfaces/internal-message-payload.ts (100%) rename {packages-exp => packages}/messaging-exp/src/interfaces/logging-types.ts (100%) rename {packages-exp => packages}/messaging-exp/src/interfaces/public-types.ts (100%) rename packages/{messaging => messaging-exp}/src/interfaces/token-details.ts (100%) rename {packages-exp => packages}/messaging-exp/src/internals/idb-manager.test.ts (100%) rename {packages-exp => packages}/messaging-exp/src/internals/idb-manager.ts (100%) rename {packages-exp => packages}/messaging-exp/src/internals/requests.test.ts (100%) rename {packages-exp => packages}/messaging-exp/src/internals/requests.ts (100%) rename {packages-exp => packages}/messaging-exp/src/internals/token-manager.test.ts (100%) rename {packages-exp => packages}/messaging-exp/src/internals/token-manager.ts (100%) rename {packages-exp => packages}/messaging-exp/src/listeners/sw-listeners.test.ts (100%) rename {packages-exp => packages}/messaging-exp/src/listeners/sw-listeners.ts (100%) rename {packages-exp => packages}/messaging-exp/src/listeners/window-listener.ts (100%) rename {packages-exp => packages}/messaging-exp/src/messaging-service.ts (100%) rename {packages-exp => packages}/messaging-exp/src/testing/compare-headers.test.ts (100%) rename {packages-exp => packages}/messaging-exp/src/testing/compare-headers.ts (100%) rename {packages-exp => packages}/messaging-exp/src/testing/fakes/firebase-dependencies.ts (100%) rename {packages-exp => packages}/messaging-exp/src/testing/fakes/logging-object.ts (100%) rename {packages-exp => packages}/messaging-exp/src/testing/fakes/messaging-service.ts (100%) rename {packages-exp => packages}/messaging-exp/src/testing/fakes/service-worker.ts (100%) rename packages/{messaging => messaging-exp}/src/testing/fakes/token-details.ts (100%) rename {packages-exp => packages}/messaging-exp/src/testing/setup.ts (100%) rename packages/{messaging => messaging-exp}/src/testing/sinon-types.ts (100%) rename {packages-exp => packages}/messaging-exp/src/util/constants.ts (100%) rename {packages-exp => packages}/messaging-exp/src/util/errors.ts (100%) rename {packages-exp => packages}/messaging-exp/src/util/sw-types.ts (100%) rename {packages-exp => packages}/messaging-exp/sw/package.json (100%) rename packages/{messaging => messaging-exp}/tsconfig.json (100%) rename {packages-exp/performance-exp => packages/performance-compat}/.eslintrc.js (100%) rename {packages-exp => packages}/performance-compat/README.md (100%) rename {packages-exp => packages}/performance-compat/karma.conf.js (100%) rename {packages-exp => packages}/performance-compat/package.json (100%) rename {packages-exp => packages}/performance-compat/rollup.config.js (100%) rename {packages-exp => packages}/performance-compat/rollup.config.release.js (100%) rename {packages-exp => packages}/performance-compat/rollup.shared.js (100%) rename {packages-exp => packages}/performance-compat/src/index.ts (100%) rename {packages-exp => packages}/performance-compat/src/performance.test.ts (100%) rename {packages-exp => packages}/performance-compat/src/performance.ts (100%) rename {packages-exp/remote-config-compat => packages/performance-compat}/test/setup.ts (100%) rename {packages-exp => packages}/performance-compat/test/util.ts (100%) rename {packages-exp => packages}/performance-compat/tsconfig.json (100%) rename {packages-exp/remote-config-compat => packages/performance-exp}/.eslintrc.js (100%) rename {packages-exp => packages}/performance-exp/README.md (100%) rename {packages-exp => packages}/performance-exp/api-extractor.json (100%) rename {packages-exp => packages}/performance-exp/karma.conf.js (100%) rename {packages-exp => packages}/performance-exp/package.json (100%) rename {packages-exp => packages}/performance-exp/rollup.config.js (100%) rename {packages-exp => packages}/performance-exp/rollup.config.release.js (100%) rename {packages-exp => packages}/performance-exp/rollup.shared.js (100%) rename {packages-exp => packages}/performance-exp/src/constants.ts (100%) rename {packages-exp => packages}/performance-exp/src/controllers/perf.test.ts (100%) rename {packages-exp => packages}/performance-exp/src/controllers/perf.ts (100%) rename {packages-exp => packages}/performance-exp/src/index.test.ts (100%) rename {packages-exp => packages}/performance-exp/src/index.ts (100%) rename {packages-exp => packages}/performance-exp/src/public_types.ts (100%) rename {packages-exp => packages}/performance-exp/src/resources/network_request.test.ts (100%) rename {packages-exp => packages}/performance-exp/src/resources/network_request.ts (100%) rename {packages-exp => packages}/performance-exp/src/resources/trace.test.ts (100%) rename {packages-exp => packages}/performance-exp/src/resources/trace.ts (100%) rename {packages-exp => packages}/performance-exp/src/services/api_service.test.ts (100%) rename {packages-exp => packages}/performance-exp/src/services/api_service.ts (100%) rename {packages-exp => packages}/performance-exp/src/services/iid_service.test.ts (100%) rename {packages-exp => packages}/performance-exp/src/services/iid_service.ts (100%) rename {packages-exp => packages}/performance-exp/src/services/initialization_service.test.ts (100%) rename {packages-exp => packages}/performance-exp/src/services/initialization_service.ts (100%) rename {packages-exp => packages}/performance-exp/src/services/oob_resources_service.test.ts (100%) rename {packages-exp => packages}/performance-exp/src/services/oob_resources_service.ts (100%) rename {packages-exp => packages}/performance-exp/src/services/perf_logger.test.ts (100%) rename {packages-exp => packages}/performance-exp/src/services/perf_logger.ts (100%) rename {packages-exp => packages}/performance-exp/src/services/remote_config_service.test.ts (100%) rename {packages-exp => packages}/performance-exp/src/services/remote_config_service.ts (100%) rename {packages-exp => packages}/performance-exp/src/services/settings_service.ts (100%) rename {packages-exp => packages}/performance-exp/src/services/transport_service.test.ts (100%) rename {packages-exp => packages}/performance-exp/src/services/transport_service.ts (100%) rename {packages-exp => packages}/performance-exp/src/utils/app_utils.ts (100%) rename {packages-exp => packages}/performance-exp/src/utils/attribute_utils.test.ts (100%) rename {packages-exp => packages}/performance-exp/src/utils/attributes_utils.ts (100%) rename {packages-exp => packages}/performance-exp/src/utils/console_logger.ts (100%) rename {packages-exp => packages}/performance-exp/src/utils/errors.ts (100%) rename {packages-exp => packages}/performance-exp/src/utils/metric_utils.test.ts (100%) rename {packages-exp => packages}/performance-exp/src/utils/metric_utils.ts (100%) rename {packages-exp => packages}/performance-exp/src/utils/string_merger.test.ts (100%) rename {packages-exp => packages}/performance-exp/src/utils/string_merger.ts (100%) rename {packages-exp => packages}/performance-exp/test/setup.ts (100%) rename packages/{performance => performance-exp}/tsconfig.json (100%) rename packages/{app-check => remote-config-compat}/.eslintrc.js (100%) rename {packages-exp => packages}/remote-config-compat/README.md (100%) rename {packages-exp => packages}/remote-config-compat/karma.conf.js (100%) rename {packages-exp => packages}/remote-config-compat/package.json (100%) rename {packages-exp => packages}/remote-config-compat/rollup.config.js (100%) rename {packages-exp => packages}/remote-config-compat/rollup.config.release.js (100%) rename {packages-exp => packages}/remote-config-compat/rollup.shared.js (100%) rename {packages-exp => packages}/remote-config-compat/src/index.ts (100%) rename {packages-exp => packages}/remote-config-compat/src/remoteConfig.test.ts (100%) rename {packages-exp => packages}/remote-config-compat/src/remoteConfig.ts (100%) rename packages/{app => remote-config-compat}/test/setup.ts (100%) rename {packages-exp => packages}/remote-config-compat/test/util.ts (100%) rename {packages-exp => packages}/remote-config-compat/tsconfig.json (100%) rename {packages-exp => packages}/remote-config-exp/.eslintrc.js (100%) rename packages/{remote-config => remote-config-exp}/.npmignore (100%) rename packages/{remote-config => remote-config-exp}/README.md (100%) rename {packages-exp => packages}/remote-config-exp/api-extractor.json (100%) rename packages/{remote-config => remote-config-exp}/karma.conf.js (100%) rename {packages-exp => packages}/remote-config-exp/package.json (100%) rename {packages-exp => packages}/remote-config-exp/rollup.config.js (100%) rename {packages-exp => packages}/remote-config-exp/rollup.config.release.js (100%) rename {packages-exp => packages}/remote-config-exp/rollup.shared.js (100%) rename {packages-exp => packages}/remote-config-exp/src/api.ts (100%) rename {packages-exp => packages}/remote-config-exp/src/api2.ts (100%) rename packages/{remote-config => remote-config-exp}/src/client/caching_client.ts (100%) rename packages/{remote-config => remote-config-exp}/src/client/remote_config_fetch_client.ts (100%) rename {packages-exp => packages}/remote-config-exp/src/client/rest_client.ts (100%) rename packages/{remote-config => remote-config-exp}/src/client/retrying_client.ts (100%) rename {packages-exp => packages}/remote-config-exp/src/constants.ts (100%) rename packages/{remote-config => remote-config-exp}/src/errors.ts (100%) rename {packages-exp => packages}/remote-config-exp/src/index.ts (100%) rename packages/{remote-config => remote-config-exp}/src/language.ts (100%) rename {packages-exp => packages}/remote-config-exp/src/public_types.ts (100%) rename {packages-exp => packages}/remote-config-exp/src/register.ts (100%) rename {packages-exp => packages}/remote-config-exp/src/remote_config.ts (100%) rename packages/{remote-config => remote-config-exp}/src/storage/storage.ts (100%) rename packages/{remote-config => remote-config-exp}/src/storage/storage_cache.ts (100%) rename packages/{remote-config => remote-config-exp}/src/value.ts (100%) rename packages/{remote-config => remote-config-exp}/test/client/caching_client.test.ts (100%) rename packages/{remote-config => remote-config-exp}/test/client/rest_client.test.ts (100%) rename packages/{remote-config => remote-config-exp}/test/client/retrying_client.test.ts (100%) rename packages/{remote-config => remote-config-exp}/test/errors.test.ts (100%) rename packages/{remote-config => remote-config-exp}/test/language.test.ts (100%) rename {packages-exp => packages}/remote-config-exp/test/remote_config.test.ts (100%) rename packages/{remote-config => remote-config-exp}/test/setup.ts (100%) rename packages/{remote-config => remote-config-exp}/test/storage/storage.test.ts (100%) rename packages/{remote-config => remote-config-exp}/test/storage/storage_cache.test.ts (100%) rename packages/{remote-config => remote-config-exp}/test/value.test.ts (100%) rename {packages-exp => packages}/remote-config-exp/test_app/index.html (100%) rename {packages-exp => packages}/remote-config-exp/test_app/index.js (100%) rename packages/{remote-config => remote-config-exp}/tsconfig.json (100%) diff --git a/packages-exp/auth-compat-exp/demo/public/service-worker.js b/packages-exp/auth-compat-exp/demo/public/service-worker.js deleted file mode 100644 index c7c9a9ab49b..00000000000 --- a/packages-exp/auth-compat-exp/demo/public/service-worker.js +++ /dev/null @@ -1,178 +0,0 @@ -/** - * @license - * Copyright 2017 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * @fileoverview Service worker for Firebase Auth test app application. The - * service worker caches all content and only serves cached content in offline - * mode. - */ - -importScripts('/dist/firebase-app.js'); -importScripts('/dist/firebase-auth.js'); -importScripts('config.js'); - -// Initialize the Firebase app in the web worker. -firebase.initializeApp(config); - -var CACHE_NAME = 'cache-v1'; -var urlsToCache = [ - '/', - '/manifest.json', - '/config.js', - '/script.js', - '/common.js', - '/style.css', - '/dist/firebase-app.js', - '/dist/firebase-auth.js', - '/dist/firebase-database.js' -]; - -/** - * Returns a promise that resolves with an ID token if available. - * @return {!Promise} The promise that resolves with an ID token if - * available. Otherwise, the promise resolves with null. - */ -var getIdToken = function () { - return new Promise(function (resolve, reject) { - firebase.auth().onAuthStateChanged(function (user) { - if (user) { - user.getIdToken().then( - function (idToken) { - resolve(idToken); - }, - function (error) { - resolve(null); - } - ); - } else { - resolve(null); - } - }); - }).catch(function (error) { - console.log(error); - }); -}; - -/** - * @param {string} url The URL whose origin is to be returned. - * @return {string} The origin corresponding to given URL. - */ -var getOriginFromUrl = function (url) { - // https://stackoverflow.com/questions/1420881/how-to-extract-base-url-from-a-string-in-javascript - var pathArray = url.split('/'); - var protocol = pathArray[0]; - var host = pathArray[2]; - return protocol + '//' + host; -}; - -self.addEventListener('install', function (event) { - // Perform install steps. - event.waitUntil( - caches.open(CACHE_NAME).then(function (cache) { - // Add all URLs of resources we want to cache. - return cache.addAll(urlsToCache).catch(function (error) { - // Suppress error as some of the files may not be available for the - // current page. - }); - }) - ); -}); - -// As this is a test app, let's only return cached data when offline. -self.addEventListener('fetch', function (event) { - var fetchEvent = event; - var requestProcessor = function (idToken) { - var req = event.request; - // For same origin https requests, append idToken to header. - if ( - self.location.origin == getOriginFromUrl(event.request.url) && - (self.location.protocol == 'https:' || - self.location.hostname == 'localhost') && - idToken - ) { - // Clone headers as request headers are immutable. - var headers = new Headers(); - for (var entry of req.headers.entries()) { - headers.append(entry[0], entry[1]); - } - // Add ID token to header. We can't add to Authentication header as it - // will break HTTP basic authentication. - headers.append('x-id-token', idToken); - try { - req = new Request(req.url, { - method: req.method, - headers: headers, - mode: 'same-origin', - credentials: req.credentials, - cache: req.cache, - redirect: req.redirect, - referrer: req.referrer, - body: req.body, - bodyUsed: req.bodyUsed, - context: req.context - }); - } catch (e) { - // This will fail for CORS requests. We just continue with the - // fetch caching logic below and do not pass the ID token. - } - } - return fetch(req) - .then(function (response) { - // Check if we received a valid response. - // If not, just funnel the error response. - if (!response || response.status !== 200 || response.type !== 'basic') { - return response; - } - // If response is valid, clone it and save it to the cache. - var responseToCache = response.clone(); - // Save response to cache. - caches.open(CACHE_NAME).then(function (cache) { - cache.put(fetchEvent.request, responseToCache); - }); - // After caching, return response. - return response; - }) - .catch(function (error) { - // For fetch errors, attempt to retrieve the resource from cache. - return caches.match(fetchEvent.request.clone()); - }) - .catch(function (error) { - // If error getting resource from cache, do nothing. - console.log(error); - }); - }; - // Try to fetch the resource first after checking for the ID token. - event.respondWith(getIdToken().then(requestProcessor, requestProcessor)); -}); - -self.addEventListener('activate', function (event) { - // Update this list with all caches that need to remain cached. - var cacheWhitelist = ['cache-v1']; - event.waitUntil( - caches.keys().then(function (cacheNames) { - return Promise.all( - cacheNames.map(function (cacheName) { - // Check if cache is not whitelisted above. - if (cacheWhitelist.indexOf(cacheName) === -1) { - // If not whitelisted, delete it. - return caches.delete(cacheName); - } - }) - ); - }) - ); -}); diff --git a/packages-exp/auth-compat-exp/demo/public/web-worker.js b/packages-exp/auth-compat-exp/demo/public/web-worker.js deleted file mode 100644 index 9ce860cf0dc..00000000000 --- a/packages-exp/auth-compat-exp/demo/public/web-worker.js +++ /dev/null @@ -1,210 +0,0 @@ -/** - * @license - * Copyright 2018 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * @fileoverview Web worker for Firebase Auth test app application. The - * web worker tries to run operations on the Auth instance for testing purposes. - */ - -importScripts('/dist/firebase-app.js'); -importScripts('/dist/firebase-auth.js'); -importScripts('config.js'); - -// Initialize the Firebase app in the web worker. -firebase.initializeApp(config); - -/** - * Returns a promise that resolves with an ID token if available. - * @return {!Promise} The promise that resolves with an ID token if - * available. Otherwise, the promise resolves with null. - */ -var getIdToken = function () { - return new Promise(function (resolve, reject) { - firebase.auth().onAuthStateChanged(function (user) { - if (user) { - user.getIdToken().then( - function (idToken) { - resolve(idToken); - }, - function (error) { - resolve(null); - } - ); - } else { - resolve(null); - } - }); - }).catch(function (error) { - console.log(error); - }); -}; - -/** - * Runs various Firebase Auth tests in a web worker environment and confirms the - * expected behavior. This is useful for manual testing in different browsers. - * @param {string} googleIdToken The Google ID token to sign in with. - * @return {!Promise} A promise that resolves when all tests run - * successfully. - */ -var runWorkerTests = function (googleIdToken) { - var inMemoryPersistence = firebase.auth.Auth.Persistence.NONE; - var expectedDisplayName = 'Test User'; - var oauthCredential = firebase.auth.GoogleAuthProvider.credential( - googleIdToken - ); - var provider = new firebase.auth.GoogleAuthProvider(); - var OPERATION_NOT_SUPPORTED_CODE = - 'auth/operation-not-supported-in-this-environment'; - var email = - 'user' + - Math.floor(Math.random() * 10000000000).toString() + - '@example.com'; - var pass = 'password'; - return firebase - .auth() - .setPersistence(inMemoryPersistence) - .then(function () { - firebase.auth().useDeviceLanguage(); - return firebase.auth().signInAnonymously(); - }) - .then(function (result) { - if (!result.user.uid) { - throw new Error('signInAnonymously unexpectedly failed!'); - } - return result.user.updateProfile({ displayName: expectedDisplayName }); - }) - .then(function () { - if (firebase.auth().currentUser.displayName != expectedDisplayName) { - throw new Error('Profile update failed!'); - } - return firebase.auth().currentUser.delete(); - }) - .then(function () { - if (firebase.auth().currentUser) { - throw new Error('currentUser.delete unexpectedly failed!'); - } - return firebase.auth().createUserWithEmailAndPassword(email, pass); - }) - .then(function (result) { - if (result.user.email != email) { - throw new Error('createUserWithEmailAndPassword unexpectedly failed!'); - } - return firebase.auth().fetchProvidersForEmail(email); - }) - .then(function (providers) { - if (providers.length == 0 || providers[0] != 'password') { - throw new Error('fetchProvidersForEmail failed!'); - } - return firebase.auth().signInWithEmailAndPassword(email, pass); - }) - .then(function (result) { - if (result.user.email != email) { - throw new Error('signInWithEmailAndPassword unexpectedly failed!'); - } - return result.user.delete(); - }) - .then(function () { - return firebase - .auth() - .signInWithPopup(provider) - .catch(function (error) { - if (error.code != OPERATION_NOT_SUPPORTED_CODE) { - throw error; - } - }); - }) - .then(function () { - return firebase - .auth() - .signInWithRedirect(provider) - .catch(function (error) { - if (error.code != OPERATION_NOT_SUPPORTED_CODE) { - throw error; - } - }); - }) - .then(function () { - return Promise.resolve() - .then(function () { - return new firebase.auth.RecaptchaVerifier('id'); - }) - .then(function () { - throw new Error( - 'RecaptchaVerifer instantiation succeeded unexpectedly!' - ); - }) - .catch(function (error) { - if (error.code != OPERATION_NOT_SUPPORTED_CODE) { - throw error; - } - }); - }) - .then(function () { - return firebase.auth().signInWithCredential(oauthCredential); - }) - .then(function (result) { - if ( - !result.user || - !result.user.uid || - !result.credential || - !result.additionalUserInfo - ) { - throw new Error('signInWithCredential unexpectedly failed!'); - } - return firebase.auth().signOut(); - }) - .then(function () { - if (firebase.auth().currentUser) { - throw new Error('signOut unexpectedly failed!'); - } - }); -}; - -/** - * Handles the incoming message from the main script. - * @param {!Object} e The message event received. - */ -self.onmessage = function (e) { - if (e.data && e.data.type) { - var result = { type: e.data.type }; - switch (e.data.type) { - case 'GET_USER_INFO': - getIdToken().then(function (idToken) { - result.idToken = idToken; - result.uid = - firebase.auth().currentUser && firebase.auth().currentUser.uid; - self.postMessage(result); - }); - break; - case 'RUN_TESTS': - runWorkerTests(e.data.googleIdToken) - .then(function () { - result.status = 'success'; - self.postMessage(result); - }) - .catch(function (error) { - result.status = 'failure'; - // DataCloneError when postMessaging in IE11 and 10. - result.error = error.code ? error : error.message; - self.postMessage(result); - }); - break; - default: - self.postMessage({}); - } - } -}; diff --git a/packages-exp/analytics-compat/.eslintrc.js b/packages-old/analytics/.eslintrc.js similarity index 100% rename from packages-exp/analytics-compat/.eslintrc.js rename to packages-old/analytics/.eslintrc.js diff --git a/packages/analytics/CHANGELOG.md b/packages-old/analytics/CHANGELOG.md similarity index 100% rename from packages/analytics/CHANGELOG.md rename to packages-old/analytics/CHANGELOG.md diff --git a/packages-exp/analytics-exp/README.md b/packages-old/analytics/README.md similarity index 100% rename from packages-exp/analytics-exp/README.md rename to packages-old/analytics/README.md diff --git a/packages/analytics/index.test.ts b/packages-old/analytics/index.test.ts similarity index 100% rename from packages/analytics/index.test.ts rename to packages-old/analytics/index.test.ts diff --git a/packages/analytics/index.ts b/packages-old/analytics/index.ts similarity index 100% rename from packages/analytics/index.ts rename to packages-old/analytics/index.ts diff --git a/packages-exp/analytics-compat/karma.conf.js b/packages-old/analytics/karma.conf.js similarity index 100% rename from packages-exp/analytics-compat/karma.conf.js rename to packages-old/analytics/karma.conf.js diff --git a/packages-exp/analytics-exp/karma.integration.conf.js b/packages-old/analytics/karma.integration.conf.js similarity index 100% rename from packages-exp/analytics-exp/karma.integration.conf.js rename to packages-old/analytics/karma.integration.conf.js diff --git a/packages/analytics/package.json b/packages-old/analytics/package.json similarity index 100% rename from packages/analytics/package.json rename to packages-old/analytics/package.json diff --git a/packages/analytics/rollup.config.js b/packages-old/analytics/rollup.config.js similarity index 100% rename from packages/analytics/rollup.config.js rename to packages-old/analytics/rollup.config.js diff --git a/packages/analytics/src/constants.ts b/packages-old/analytics/src/constants.ts similarity index 100% rename from packages/analytics/src/constants.ts rename to packages-old/analytics/src/constants.ts diff --git a/packages/analytics/src/errors.ts b/packages-old/analytics/src/errors.ts similarity index 100% rename from packages/analytics/src/errors.ts rename to packages-old/analytics/src/errors.ts diff --git a/packages/analytics/src/factory.ts b/packages-old/analytics/src/factory.ts similarity index 100% rename from packages/analytics/src/factory.ts rename to packages-old/analytics/src/factory.ts diff --git a/packages/analytics/src/functions.test.ts b/packages-old/analytics/src/functions.test.ts similarity index 100% rename from packages/analytics/src/functions.test.ts rename to packages-old/analytics/src/functions.test.ts diff --git a/packages/analytics/src/functions.ts b/packages-old/analytics/src/functions.ts similarity index 100% rename from packages/analytics/src/functions.ts rename to packages-old/analytics/src/functions.ts diff --git a/packages/analytics/src/get-config.test.ts b/packages-old/analytics/src/get-config.test.ts similarity index 100% rename from packages/analytics/src/get-config.test.ts rename to packages-old/analytics/src/get-config.test.ts diff --git a/packages/analytics/src/get-config.ts b/packages-old/analytics/src/get-config.ts similarity index 100% rename from packages/analytics/src/get-config.ts rename to packages-old/analytics/src/get-config.ts diff --git a/packages/analytics/src/helpers.test.ts b/packages-old/analytics/src/helpers.test.ts similarity index 100% rename from packages/analytics/src/helpers.test.ts rename to packages-old/analytics/src/helpers.test.ts diff --git a/packages/analytics/src/helpers.ts b/packages-old/analytics/src/helpers.ts similarity index 100% rename from packages/analytics/src/helpers.ts rename to packages-old/analytics/src/helpers.ts diff --git a/packages/analytics/src/initialize-ids.test.ts b/packages-old/analytics/src/initialize-ids.test.ts similarity index 100% rename from packages/analytics/src/initialize-ids.test.ts rename to packages-old/analytics/src/initialize-ids.test.ts diff --git a/packages/analytics/src/initialize-ids.ts b/packages-old/analytics/src/initialize-ids.ts similarity index 100% rename from packages/analytics/src/initialize-ids.ts rename to packages-old/analytics/src/initialize-ids.ts diff --git a/packages-exp/analytics-exp/src/logger.ts b/packages-old/analytics/src/logger.ts similarity index 100% rename from packages-exp/analytics-exp/src/logger.ts rename to packages-old/analytics/src/logger.ts diff --git a/packages/analytics/testing/get-fake-firebase-services.ts b/packages-old/analytics/testing/get-fake-firebase-services.ts similarity index 100% rename from packages/analytics/testing/get-fake-firebase-services.ts rename to packages-old/analytics/testing/get-fake-firebase-services.ts diff --git a/packages-exp/analytics-exp/testing/gtag-script-util.ts b/packages-old/analytics/testing/gtag-script-util.ts similarity index 100% rename from packages-exp/analytics-exp/testing/gtag-script-util.ts rename to packages-old/analytics/testing/gtag-script-util.ts diff --git a/packages/analytics/testing/integration-tests/integration.ts b/packages-old/analytics/testing/integration-tests/integration.ts similarity index 100% rename from packages/analytics/testing/integration-tests/integration.ts rename to packages-old/analytics/testing/integration-tests/integration.ts diff --git a/packages-exp/analytics-exp/testing/setup.ts b/packages-old/analytics/testing/setup.ts similarity index 100% rename from packages-exp/analytics-exp/testing/setup.ts rename to packages-old/analytics/testing/setup.ts diff --git a/packages-exp/analytics-exp/tsconfig.json b/packages-old/analytics/tsconfig.json similarity index 100% rename from packages-exp/analytics-exp/tsconfig.json rename to packages-old/analytics/tsconfig.json diff --git a/packages-exp/app-compat/.eslintrc.js b/packages-old/app-check/.eslintrc.js similarity index 100% rename from packages-exp/app-compat/.eslintrc.js rename to packages-old/app-check/.eslintrc.js diff --git a/packages/app-check/CHANGELOG.md b/packages-old/app-check/CHANGELOG.md similarity index 100% rename from packages/app-check/CHANGELOG.md rename to packages-old/app-check/CHANGELOG.md diff --git a/packages/app-check/README.md b/packages-old/app-check/README.md similarity index 100% rename from packages/app-check/README.md rename to packages-old/app-check/README.md diff --git a/packages/app-check/karma.conf.js b/packages-old/app-check/karma.conf.js similarity index 100% rename from packages/app-check/karma.conf.js rename to packages-old/app-check/karma.conf.js diff --git a/packages/app-check/package.json b/packages-old/app-check/package.json similarity index 100% rename from packages/app-check/package.json rename to packages-old/app-check/package.json diff --git a/packages/app-check/rollup.config.js b/packages-old/app-check/rollup.config.js similarity index 100% rename from packages/app-check/rollup.config.js rename to packages-old/app-check/rollup.config.js diff --git a/packages/app-check/src/api.test.ts b/packages-old/app-check/src/api.test.ts similarity index 100% rename from packages/app-check/src/api.test.ts rename to packages-old/app-check/src/api.test.ts diff --git a/packages/app-check/src/api.ts b/packages-old/app-check/src/api.ts similarity index 100% rename from packages/app-check/src/api.ts rename to packages-old/app-check/src/api.ts diff --git a/packages/app-check/src/client.test.ts b/packages-old/app-check/src/client.test.ts similarity index 100% rename from packages/app-check/src/client.test.ts rename to packages-old/app-check/src/client.test.ts diff --git a/packages/app-check/src/client.ts b/packages-old/app-check/src/client.ts similarity index 100% rename from packages/app-check/src/client.ts rename to packages-old/app-check/src/client.ts diff --git a/packages-exp/app-check-exp/src/constants.ts b/packages-old/app-check/src/constants.ts similarity index 100% rename from packages-exp/app-check-exp/src/constants.ts rename to packages-old/app-check/src/constants.ts diff --git a/packages-exp/app-check-exp/src/debug.test.ts b/packages-old/app-check/src/debug.test.ts similarity index 100% rename from packages-exp/app-check-exp/src/debug.test.ts rename to packages-old/app-check/src/debug.test.ts diff --git a/packages-exp/app-check-exp/src/debug.ts b/packages-old/app-check/src/debug.ts similarity index 100% rename from packages-exp/app-check-exp/src/debug.ts rename to packages-old/app-check/src/debug.ts diff --git a/packages/app-check/src/errors.ts b/packages-old/app-check/src/errors.ts similarity index 100% rename from packages/app-check/src/errors.ts rename to packages-old/app-check/src/errors.ts diff --git a/packages/app-check/src/factory.ts b/packages-old/app-check/src/factory.ts similarity index 100% rename from packages/app-check/src/factory.ts rename to packages-old/app-check/src/factory.ts diff --git a/packages/app-check/src/index.ts b/packages-old/app-check/src/index.ts similarity index 100% rename from packages/app-check/src/index.ts rename to packages-old/app-check/src/index.ts diff --git a/packages/app-check/src/indexeddb.ts b/packages-old/app-check/src/indexeddb.ts similarity index 100% rename from packages/app-check/src/indexeddb.ts rename to packages-old/app-check/src/indexeddb.ts diff --git a/packages/app-check/src/internal-api.test.ts b/packages-old/app-check/src/internal-api.test.ts similarity index 100% rename from packages/app-check/src/internal-api.test.ts rename to packages-old/app-check/src/internal-api.test.ts diff --git a/packages/app-check/src/internal-api.ts b/packages-old/app-check/src/internal-api.ts similarity index 100% rename from packages/app-check/src/internal-api.ts rename to packages-old/app-check/src/internal-api.ts diff --git a/packages-exp/app-check-exp/src/logger.ts b/packages-old/app-check/src/logger.ts similarity index 100% rename from packages-exp/app-check-exp/src/logger.ts rename to packages-old/app-check/src/logger.ts diff --git a/packages-exp/app-check-exp/src/proactive-refresh.test.ts b/packages-old/app-check/src/proactive-refresh.test.ts similarity index 100% rename from packages-exp/app-check-exp/src/proactive-refresh.test.ts rename to packages-old/app-check/src/proactive-refresh.test.ts diff --git a/packages-exp/app-check-exp/src/proactive-refresh.ts b/packages-old/app-check/src/proactive-refresh.ts similarity index 100% rename from packages-exp/app-check-exp/src/proactive-refresh.ts rename to packages-old/app-check/src/proactive-refresh.ts diff --git a/packages/app-check/src/providers.ts b/packages-old/app-check/src/providers.ts similarity index 100% rename from packages/app-check/src/providers.ts rename to packages-old/app-check/src/providers.ts diff --git a/packages/app-check/src/recaptcha.test.ts b/packages-old/app-check/src/recaptcha.test.ts similarity index 100% rename from packages/app-check/src/recaptcha.test.ts rename to packages-old/app-check/src/recaptcha.test.ts diff --git a/packages/app-check/src/recaptcha.ts b/packages-old/app-check/src/recaptcha.ts similarity index 100% rename from packages/app-check/src/recaptcha.ts rename to packages-old/app-check/src/recaptcha.ts diff --git a/packages/app-check/src/state.ts b/packages-old/app-check/src/state.ts similarity index 100% rename from packages/app-check/src/state.ts rename to packages-old/app-check/src/state.ts diff --git a/packages-exp/app-check-exp/src/storage.test.ts b/packages-old/app-check/src/storage.test.ts similarity index 100% rename from packages-exp/app-check-exp/src/storage.test.ts rename to packages-old/app-check/src/storage.test.ts diff --git a/packages/app-check/src/storage.ts b/packages-old/app-check/src/storage.ts similarity index 100% rename from packages/app-check/src/storage.ts rename to packages-old/app-check/src/storage.ts diff --git a/packages/app-check/src/util.ts b/packages-old/app-check/src/util.ts similarity index 100% rename from packages/app-check/src/util.ts rename to packages-old/app-check/src/util.ts diff --git a/packages-exp/app-check-exp/test/setup.ts b/packages-old/app-check/test/setup.ts similarity index 100% rename from packages-exp/app-check-exp/test/setup.ts rename to packages-old/app-check/test/setup.ts diff --git a/packages/app-check/test/util.ts b/packages-old/app-check/test/util.ts similarity index 100% rename from packages/app-check/test/util.ts rename to packages-old/app-check/test/util.ts diff --git a/packages-exp/analytics-compat/tsconfig.json b/packages-old/app-check/tsconfig.json similarity index 100% rename from packages-exp/analytics-compat/tsconfig.json rename to packages-old/app-check/tsconfig.json diff --git a/packages/app/.eslintrc.js b/packages-old/app/.eslintrc.js similarity index 100% rename from packages/app/.eslintrc.js rename to packages-old/app/.eslintrc.js diff --git a/packages/app/CHANGELOG.md b/packages-old/app/CHANGELOG.md similarity index 100% rename from packages/app/CHANGELOG.md rename to packages-old/app/CHANGELOG.md diff --git a/packages/app/README.md b/packages-old/app/README.md similarity index 100% rename from packages/app/README.md rename to packages-old/app/README.md diff --git a/packages/app/index.lite.ts b/packages-old/app/index.lite.ts similarity index 100% rename from packages/app/index.lite.ts rename to packages-old/app/index.lite.ts diff --git a/packages/app/index.node.ts b/packages-old/app/index.node.ts similarity index 100% rename from packages/app/index.node.ts rename to packages-old/app/index.node.ts diff --git a/packages/app/index.rn.ts b/packages-old/app/index.rn.ts similarity index 100% rename from packages/app/index.rn.ts rename to packages-old/app/index.rn.ts diff --git a/packages/app/index.ts b/packages-old/app/index.ts similarity index 100% rename from packages/app/index.ts rename to packages-old/app/index.ts diff --git a/packages/app/karma.conf.js b/packages-old/app/karma.conf.js similarity index 100% rename from packages/app/karma.conf.js rename to packages-old/app/karma.conf.js diff --git a/packages/app/package.json b/packages-old/app/package.json similarity index 100% rename from packages/app/package.json rename to packages-old/app/package.json diff --git a/packages/app/rollup.config.js b/packages-old/app/rollup.config.js similarity index 100% rename from packages/app/rollup.config.js rename to packages-old/app/rollup.config.js diff --git a/packages/app/src/constants.ts b/packages-old/app/src/constants.ts similarity index 100% rename from packages/app/src/constants.ts rename to packages-old/app/src/constants.ts diff --git a/packages/app/src/errors.ts b/packages-old/app/src/errors.ts similarity index 100% rename from packages/app/src/errors.ts rename to packages-old/app/src/errors.ts diff --git a/packages/app/src/firebaseApp.ts b/packages-old/app/src/firebaseApp.ts similarity index 100% rename from packages/app/src/firebaseApp.ts rename to packages-old/app/src/firebaseApp.ts diff --git a/packages/app/src/firebaseNamespace.ts b/packages-old/app/src/firebaseNamespace.ts similarity index 100% rename from packages/app/src/firebaseNamespace.ts rename to packages-old/app/src/firebaseNamespace.ts diff --git a/packages/app/src/firebaseNamespaceCore.ts b/packages-old/app/src/firebaseNamespaceCore.ts similarity index 100% rename from packages/app/src/firebaseNamespaceCore.ts rename to packages-old/app/src/firebaseNamespaceCore.ts diff --git a/packages/app/src/lite/firebaseAppLite.ts b/packages-old/app/src/lite/firebaseAppLite.ts similarity index 100% rename from packages/app/src/lite/firebaseAppLite.ts rename to packages-old/app/src/lite/firebaseAppLite.ts diff --git a/packages/app/src/lite/firebaseNamespaceLite.ts b/packages-old/app/src/lite/firebaseNamespaceLite.ts similarity index 100% rename from packages/app/src/lite/firebaseNamespaceLite.ts rename to packages-old/app/src/lite/firebaseNamespaceLite.ts diff --git a/packages-exp/app-exp/src/logger.ts b/packages-old/app/src/logger.ts similarity index 100% rename from packages-exp/app-exp/src/logger.ts rename to packages-old/app/src/logger.ts diff --git a/packages/app/src/platformLoggerService.ts b/packages-old/app/src/platformLoggerService.ts similarity index 100% rename from packages/app/src/platformLoggerService.ts rename to packages-old/app/src/platformLoggerService.ts diff --git a/packages/app/src/registerCoreComponents.ts b/packages-old/app/src/registerCoreComponents.ts similarity index 100% rename from packages/app/src/registerCoreComponents.ts rename to packages-old/app/src/registerCoreComponents.ts diff --git a/packages/app/test/clientLogger.test.ts b/packages-old/app/test/clientLogger.test.ts similarity index 100% rename from packages/app/test/clientLogger.test.ts rename to packages-old/app/test/clientLogger.test.ts diff --git a/packages/app/test/firebaseApp.test.ts b/packages-old/app/test/firebaseApp.test.ts similarity index 100% rename from packages/app/test/firebaseApp.test.ts rename to packages-old/app/test/firebaseApp.test.ts diff --git a/packages/app/test/platformLogger.test.ts b/packages-old/app/test/platformLogger.test.ts similarity index 100% rename from packages/app/test/platformLogger.test.ts rename to packages-old/app/test/platformLogger.test.ts diff --git a/packages-exp/app-compat/test/setup.ts b/packages-old/app/test/setup.ts similarity index 100% rename from packages-exp/app-compat/test/setup.ts rename to packages-old/app/test/setup.ts diff --git a/packages/app/tsconfig.json b/packages-old/app/tsconfig.json similarity index 100% rename from packages/app/tsconfig.json rename to packages-old/app/tsconfig.json diff --git a/packages/auth/.gitignore b/packages-old/auth/.gitignore similarity index 100% rename from packages/auth/.gitignore rename to packages-old/auth/.gitignore diff --git a/packages/auth/CHANGELOG.md b/packages-old/auth/CHANGELOG.md similarity index 100% rename from packages/auth/CHANGELOG.md rename to packages-old/auth/CHANGELOG.md diff --git a/packages/auth/CONTRIBUTING.md b/packages-old/auth/CONTRIBUTING.md similarity index 100% rename from packages/auth/CONTRIBUTING.md rename to packages-old/auth/CONTRIBUTING.md diff --git a/packages/auth/LICENSE b/packages-old/auth/LICENSE similarity index 100% rename from packages/auth/LICENSE rename to packages-old/auth/LICENSE diff --git a/packages/auth/README.md b/packages-old/auth/README.md similarity index 100% rename from packages/auth/README.md rename to packages-old/auth/README.md diff --git a/packages/auth/STYLEGUIDE.md b/packages-old/auth/STYLEGUIDE.md similarity index 100% rename from packages/auth/STYLEGUIDE.md rename to packages-old/auth/STYLEGUIDE.md diff --git a/packages/auth/buildtools/all_tests.html b/packages-old/auth/buildtools/all_tests.html similarity index 100% rename from packages/auth/buildtools/all_tests.html rename to packages-old/auth/buildtools/all_tests.html diff --git a/packages/auth/buildtools/common.py b/packages-old/auth/buildtools/common.py similarity index 100% rename from packages/auth/buildtools/common.py rename to packages-old/auth/buildtools/common.py diff --git a/packages/auth/buildtools/gen_all_tests_js.py b/packages-old/auth/buildtools/gen_all_tests_js.py similarity index 100% rename from packages/auth/buildtools/gen_all_tests_js.py rename to packages-old/auth/buildtools/gen_all_tests_js.py diff --git a/packages/auth/buildtools/gen_test_html.py b/packages-old/auth/buildtools/gen_test_html.py similarity index 100% rename from packages/auth/buildtools/gen_test_html.py rename to packages-old/auth/buildtools/gen_test_html.py diff --git a/packages/auth/buildtools/generate_test_files.sh b/packages-old/auth/buildtools/generate_test_files.sh similarity index 100% rename from packages/auth/buildtools/generate_test_files.sh rename to packages-old/auth/buildtools/generate_test_files.sh diff --git a/packages/auth/buildtools/run_demo.sh b/packages-old/auth/buildtools/run_demo.sh similarity index 100% rename from packages/auth/buildtools/run_demo.sh rename to packages-old/auth/buildtools/run_demo.sh diff --git a/packages/auth/buildtools/run_tests.sh b/packages-old/auth/buildtools/run_tests.sh similarity index 100% rename from packages/auth/buildtools/run_tests.sh rename to packages-old/auth/buildtools/run_tests.sh diff --git a/packages/auth/buildtools/sauce_connect.sh b/packages-old/auth/buildtools/sauce_connect.sh similarity index 100% rename from packages/auth/buildtools/sauce_connect.sh rename to packages-old/auth/buildtools/sauce_connect.sh diff --git a/packages/auth/buildtools/test_template.html b/packages-old/auth/buildtools/test_template.html similarity index 100% rename from packages/auth/buildtools/test_template.html rename to packages-old/auth/buildtools/test_template.html diff --git a/packages/auth/demo/.gitignore b/packages-old/auth/demo/.gitignore similarity index 100% rename from packages/auth/demo/.gitignore rename to packages-old/auth/demo/.gitignore diff --git a/packages/auth/demo/README.md b/packages-old/auth/demo/README.md similarity index 100% rename from packages/auth/demo/README.md rename to packages-old/auth/demo/README.md diff --git a/packages-exp/auth-compat-exp/demo/database.rules.json b/packages-old/auth/demo/database.rules.json similarity index 100% rename from packages-exp/auth-compat-exp/demo/database.rules.json rename to packages-old/auth/demo/database.rules.json diff --git a/packages/auth/demo/firebase.json b/packages-old/auth/demo/firebase.json similarity index 100% rename from packages/auth/demo/firebase.json rename to packages-old/auth/demo/firebase.json diff --git a/packages/auth/demo/functions/index.js b/packages-old/auth/demo/functions/index.js similarity index 100% rename from packages/auth/demo/functions/index.js rename to packages-old/auth/demo/functions/index.js diff --git a/packages/auth/demo/functions/package.json b/packages-old/auth/demo/functions/package.json similarity index 100% rename from packages/auth/demo/functions/package.json rename to packages-old/auth/demo/functions/package.json diff --git a/packages/auth/demo/functions/yarn.lock b/packages-old/auth/demo/functions/yarn.lock similarity index 100% rename from packages/auth/demo/functions/yarn.lock rename to packages-old/auth/demo/functions/yarn.lock diff --git a/packages/auth/demo/public/common.js b/packages-old/auth/demo/public/common.js similarity index 100% rename from packages/auth/demo/public/common.js rename to packages-old/auth/demo/public/common.js diff --git a/packages-exp/auth-compat-exp/demo/public/index.html b/packages-old/auth/demo/public/index.html similarity index 100% rename from packages-exp/auth-compat-exp/demo/public/index.html rename to packages-old/auth/demo/public/index.html diff --git a/packages-exp/auth-compat-exp/demo/public/manifest.json b/packages-old/auth/demo/public/manifest.json similarity index 100% rename from packages-exp/auth-compat-exp/demo/public/manifest.json rename to packages-old/auth/demo/public/manifest.json diff --git a/packages/auth/demo/public/sample-config.js b/packages-old/auth/demo/public/sample-config.js similarity index 100% rename from packages/auth/demo/public/sample-config.js rename to packages-old/auth/demo/public/sample-config.js diff --git a/packages/auth/demo/public/script.js b/packages-old/auth/demo/public/script.js similarity index 100% rename from packages/auth/demo/public/script.js rename to packages-old/auth/demo/public/script.js diff --git a/packages/auth/demo/public/service-worker.js b/packages-old/auth/demo/public/service-worker.js similarity index 100% rename from packages/auth/demo/public/service-worker.js rename to packages-old/auth/demo/public/service-worker.js diff --git a/packages-exp/auth-compat-exp/demo/public/style.css b/packages-old/auth/demo/public/style.css similarity index 100% rename from packages-exp/auth-compat-exp/demo/public/style.css rename to packages-old/auth/demo/public/style.css diff --git a/packages/auth/demo/public/web-worker.js b/packages-old/auth/demo/public/web-worker.js similarity index 100% rename from packages/auth/demo/public/web-worker.js rename to packages-old/auth/demo/public/web-worker.js diff --git a/packages/auth/externs/externs.js b/packages-old/auth/externs/externs.js similarity index 100% rename from packages/auth/externs/externs.js rename to packages-old/auth/externs/externs.js diff --git a/packages/auth/externs/gapi.iframes.js b/packages-old/auth/externs/gapi.iframes.js similarity index 100% rename from packages/auth/externs/gapi.iframes.js rename to packages-old/auth/externs/gapi.iframes.js diff --git a/packages/auth/externs/grecaptcha.js b/packages-old/auth/externs/grecaptcha.js similarity index 100% rename from packages/auth/externs/grecaptcha.js rename to packages-old/auth/externs/grecaptcha.js diff --git a/packages/auth/gulpfile.js b/packages-old/auth/gulpfile.js similarity index 100% rename from packages/auth/gulpfile.js rename to packages-old/auth/gulpfile.js diff --git a/packages/auth/index.d.ts b/packages-old/auth/index.d.ts similarity index 100% rename from packages/auth/index.d.ts rename to packages-old/auth/index.d.ts diff --git a/packages/auth/package.json b/packages-old/auth/package.json similarity index 100% rename from packages/auth/package.json rename to packages-old/auth/package.json diff --git a/packages/auth/protractor.conf.js b/packages-old/auth/protractor.conf.js similarity index 100% rename from packages/auth/protractor.conf.js rename to packages-old/auth/protractor.conf.js diff --git a/packages/auth/protractor_spec.js b/packages-old/auth/protractor_spec.js similarity index 100% rename from packages/auth/protractor_spec.js rename to packages-old/auth/protractor_spec.js diff --git a/packages/auth/sauce_browsers.json b/packages-old/auth/sauce_browsers.json similarity index 100% rename from packages/auth/sauce_browsers.json rename to packages-old/auth/sauce_browsers.json diff --git a/packages/auth/src/actioncodeinfo.js b/packages-old/auth/src/actioncodeinfo.js similarity index 100% rename from packages/auth/src/actioncodeinfo.js rename to packages-old/auth/src/actioncodeinfo.js diff --git a/packages/auth/src/actioncodesettings.js b/packages-old/auth/src/actioncodesettings.js similarity index 100% rename from packages/auth/src/actioncodesettings.js rename to packages-old/auth/src/actioncodesettings.js diff --git a/packages/auth/src/actioncodeurl.js b/packages-old/auth/src/actioncodeurl.js similarity index 100% rename from packages/auth/src/actioncodeurl.js rename to packages-old/auth/src/actioncodeurl.js diff --git a/packages/auth/src/additionaluserinfo.js b/packages-old/auth/src/additionaluserinfo.js similarity index 100% rename from packages/auth/src/additionaluserinfo.js rename to packages-old/auth/src/additionaluserinfo.js diff --git a/packages/auth/src/args.js b/packages-old/auth/src/args.js similarity index 100% rename from packages/auth/src/args.js rename to packages-old/auth/src/args.js diff --git a/packages/auth/src/auth.js b/packages-old/auth/src/auth.js similarity index 100% rename from packages/auth/src/auth.js rename to packages-old/auth/src/auth.js diff --git a/packages/auth/src/authcredential.js b/packages-old/auth/src/authcredential.js similarity index 100% rename from packages/auth/src/authcredential.js rename to packages-old/auth/src/authcredential.js diff --git a/packages/auth/src/authevent.js b/packages-old/auth/src/authevent.js similarity index 100% rename from packages/auth/src/authevent.js rename to packages-old/auth/src/authevent.js diff --git a/packages/auth/src/autheventmanager.js b/packages-old/auth/src/autheventmanager.js similarity index 100% rename from packages/auth/src/autheventmanager.js rename to packages-old/auth/src/autheventmanager.js diff --git a/packages/auth/src/authsettings.js b/packages-old/auth/src/authsettings.js similarity index 100% rename from packages/auth/src/authsettings.js rename to packages-old/auth/src/authsettings.js diff --git a/packages/auth/src/authstorage.js b/packages-old/auth/src/authstorage.js similarity index 100% rename from packages/auth/src/authstorage.js rename to packages-old/auth/src/authstorage.js diff --git a/packages/auth/src/authuser.js b/packages-old/auth/src/authuser.js similarity index 100% rename from packages/auth/src/authuser.js rename to packages-old/auth/src/authuser.js diff --git a/packages/auth/src/cacherequest.js b/packages-old/auth/src/cacherequest.js similarity index 100% rename from packages/auth/src/cacherequest.js rename to packages-old/auth/src/cacherequest.js diff --git a/packages/auth/src/confirmationresult.js b/packages-old/auth/src/confirmationresult.js similarity index 100% rename from packages/auth/src/confirmationresult.js rename to packages-old/auth/src/confirmationresult.js diff --git a/packages/auth/src/cordovahandler.js b/packages-old/auth/src/cordovahandler.js similarity index 100% rename from packages/auth/src/cordovahandler.js rename to packages-old/auth/src/cordovahandler.js diff --git a/packages/auth/src/debug.js b/packages-old/auth/src/debug.js similarity index 100% rename from packages/auth/src/debug.js rename to packages-old/auth/src/debug.js diff --git a/packages/auth/src/defines.js b/packages-old/auth/src/defines.js similarity index 100% rename from packages/auth/src/defines.js rename to packages-old/auth/src/defines.js diff --git a/packages/auth/src/deprecation.js b/packages-old/auth/src/deprecation.js similarity index 100% rename from packages/auth/src/deprecation.js rename to packages-old/auth/src/deprecation.js diff --git a/packages/auth/src/dynamiclink.js b/packages-old/auth/src/dynamiclink.js similarity index 100% rename from packages/auth/src/dynamiclink.js rename to packages-old/auth/src/dynamiclink.js diff --git a/packages/auth/src/error_auth.js b/packages-old/auth/src/error_auth.js similarity index 100% rename from packages/auth/src/error_auth.js rename to packages-old/auth/src/error_auth.js diff --git a/packages/auth/src/error_invalidorigin.js b/packages-old/auth/src/error_invalidorigin.js similarity index 100% rename from packages/auth/src/error_invalidorigin.js rename to packages-old/auth/src/error_invalidorigin.js diff --git a/packages/auth/src/error_withcredential.js b/packages-old/auth/src/error_withcredential.js similarity index 100% rename from packages/auth/src/error_withcredential.js rename to packages-old/auth/src/error_withcredential.js diff --git a/packages/auth/src/exports_auth.js b/packages-old/auth/src/exports_auth.js similarity index 100% rename from packages/auth/src/exports_auth.js rename to packages-old/auth/src/exports_auth.js diff --git a/packages/auth/src/exports_lib.js b/packages-old/auth/src/exports_lib.js similarity index 100% rename from packages/auth/src/exports_lib.js rename to packages-old/auth/src/exports_lib.js diff --git a/packages/auth/src/exports_unreleased.js b/packages-old/auth/src/exports_unreleased.js similarity index 100% rename from packages/auth/src/exports_unreleased.js rename to packages-old/auth/src/exports_unreleased.js diff --git a/packages/auth/src/externs.js b/packages-old/auth/src/externs.js similarity index 100% rename from packages/auth/src/externs.js rename to packages-old/auth/src/externs.js diff --git a/packages/auth/src/idp.js b/packages-old/auth/src/idp.js similarity index 100% rename from packages/auth/src/idp.js rename to packages-old/auth/src/idp.js diff --git a/packages/auth/src/idtoken.js b/packages-old/auth/src/idtoken.js similarity index 100% rename from packages/auth/src/idtoken.js rename to packages-old/auth/src/idtoken.js diff --git a/packages/auth/src/idtokenresult.js b/packages-old/auth/src/idtokenresult.js similarity index 100% rename from packages/auth/src/idtokenresult.js rename to packages-old/auth/src/idtokenresult.js diff --git a/packages/auth/src/iframeclient/ifchandler.js b/packages-old/auth/src/iframeclient/ifchandler.js similarity index 100% rename from packages/auth/src/iframeclient/ifchandler.js rename to packages-old/auth/src/iframeclient/ifchandler.js diff --git a/packages/auth/src/iframeclient/iframewrapper.js b/packages-old/auth/src/iframeclient/iframewrapper.js similarity index 100% rename from packages/auth/src/iframeclient/iframewrapper.js rename to packages-old/auth/src/iframeclient/iframewrapper.js diff --git a/packages/auth/src/messagechannel/defines.js b/packages-old/auth/src/messagechannel/defines.js similarity index 100% rename from packages/auth/src/messagechannel/defines.js rename to packages-old/auth/src/messagechannel/defines.js diff --git a/packages/auth/src/messagechannel/postmessager.js b/packages-old/auth/src/messagechannel/postmessager.js similarity index 100% rename from packages/auth/src/messagechannel/postmessager.js rename to packages-old/auth/src/messagechannel/postmessager.js diff --git a/packages/auth/src/messagechannel/receiver.js b/packages-old/auth/src/messagechannel/receiver.js similarity index 100% rename from packages/auth/src/messagechannel/receiver.js rename to packages-old/auth/src/messagechannel/receiver.js diff --git a/packages/auth/src/messagechannel/sender.js b/packages-old/auth/src/messagechannel/sender.js similarity index 100% rename from packages/auth/src/messagechannel/sender.js rename to packages-old/auth/src/messagechannel/sender.js diff --git a/packages/auth/src/multifactorassertion.js b/packages-old/auth/src/multifactorassertion.js similarity index 100% rename from packages/auth/src/multifactorassertion.js rename to packages-old/auth/src/multifactorassertion.js diff --git a/packages/auth/src/multifactorauthcredential.js b/packages-old/auth/src/multifactorauthcredential.js similarity index 100% rename from packages/auth/src/multifactorauthcredential.js rename to packages-old/auth/src/multifactorauthcredential.js diff --git a/packages/auth/src/multifactorerror.js b/packages-old/auth/src/multifactorerror.js similarity index 100% rename from packages/auth/src/multifactorerror.js rename to packages-old/auth/src/multifactorerror.js diff --git a/packages/auth/src/multifactorgenerator.js b/packages-old/auth/src/multifactorgenerator.js similarity index 100% rename from packages/auth/src/multifactorgenerator.js rename to packages-old/auth/src/multifactorgenerator.js diff --git a/packages/auth/src/multifactorinfo.js b/packages-old/auth/src/multifactorinfo.js similarity index 100% rename from packages/auth/src/multifactorinfo.js rename to packages-old/auth/src/multifactorinfo.js diff --git a/packages/auth/src/multifactorresolver.js b/packages-old/auth/src/multifactorresolver.js similarity index 100% rename from packages/auth/src/multifactorresolver.js rename to packages-old/auth/src/multifactorresolver.js diff --git a/packages/auth/src/multifactorsession.js b/packages-old/auth/src/multifactorsession.js similarity index 100% rename from packages/auth/src/multifactorsession.js rename to packages-old/auth/src/multifactorsession.js diff --git a/packages/auth/src/multifactoruser.js b/packages-old/auth/src/multifactoruser.js similarity index 100% rename from packages/auth/src/multifactoruser.js rename to packages-old/auth/src/multifactoruser.js diff --git a/packages/auth/src/oauthhelperstate.js b/packages-old/auth/src/oauthhelperstate.js similarity index 100% rename from packages/auth/src/oauthhelperstate.js rename to packages-old/auth/src/oauthhelperstate.js diff --git a/packages/auth/src/oauthsigninhandler.js b/packages-old/auth/src/oauthsigninhandler.js similarity index 100% rename from packages/auth/src/oauthsigninhandler.js rename to packages-old/auth/src/oauthsigninhandler.js diff --git a/packages/auth/src/object.js b/packages-old/auth/src/object.js similarity index 100% rename from packages/auth/src/object.js rename to packages-old/auth/src/object.js diff --git a/packages/auth/src/proactiverefresh.js b/packages-old/auth/src/proactiverefresh.js similarity index 100% rename from packages/auth/src/proactiverefresh.js rename to packages-old/auth/src/proactiverefresh.js diff --git a/packages/auth/src/recaptchaverifier/grecaptcha.js b/packages-old/auth/src/recaptchaverifier/grecaptcha.js similarity index 100% rename from packages/auth/src/recaptchaverifier/grecaptcha.js rename to packages-old/auth/src/recaptchaverifier/grecaptcha.js diff --git a/packages/auth/src/recaptchaverifier/grecaptchamock.js b/packages-old/auth/src/recaptchaverifier/grecaptchamock.js similarity index 100% rename from packages/auth/src/recaptchaverifier/grecaptchamock.js rename to packages-old/auth/src/recaptchaverifier/grecaptchamock.js diff --git a/packages/auth/src/recaptchaverifier/loader.js b/packages-old/auth/src/recaptchaverifier/loader.js similarity index 100% rename from packages/auth/src/recaptchaverifier/loader.js rename to packages-old/auth/src/recaptchaverifier/loader.js diff --git a/packages/auth/src/recaptchaverifier/mockloader.js b/packages-old/auth/src/recaptchaverifier/mockloader.js similarity index 100% rename from packages/auth/src/recaptchaverifier/mockloader.js rename to packages-old/auth/src/recaptchaverifier/mockloader.js diff --git a/packages/auth/src/recaptchaverifier/realloader.js b/packages-old/auth/src/recaptchaverifier/realloader.js similarity index 100% rename from packages/auth/src/recaptchaverifier/realloader.js rename to packages-old/auth/src/recaptchaverifier/realloader.js diff --git a/packages/auth/src/recaptchaverifier/recaptchaverifier.js b/packages-old/auth/src/recaptchaverifier/recaptchaverifier.js similarity index 100% rename from packages/auth/src/recaptchaverifier/recaptchaverifier.js rename to packages-old/auth/src/recaptchaverifier/recaptchaverifier.js diff --git a/packages/auth/src/rpchandler.js b/packages-old/auth/src/rpchandler.js similarity index 100% rename from packages/auth/src/rpchandler.js rename to packages-old/auth/src/rpchandler.js diff --git a/packages/auth/src/storage/asyncstorage.js b/packages-old/auth/src/storage/asyncstorage.js similarity index 100% rename from packages/auth/src/storage/asyncstorage.js rename to packages-old/auth/src/storage/asyncstorage.js diff --git a/packages/auth/src/storage/factory.js b/packages-old/auth/src/storage/factory.js similarity index 100% rename from packages/auth/src/storage/factory.js rename to packages-old/auth/src/storage/factory.js diff --git a/packages/auth/src/storage/hybridindexeddb.js b/packages-old/auth/src/storage/hybridindexeddb.js similarity index 100% rename from packages/auth/src/storage/hybridindexeddb.js rename to packages-old/auth/src/storage/hybridindexeddb.js diff --git a/packages/auth/src/storage/indexeddb.js b/packages-old/auth/src/storage/indexeddb.js similarity index 100% rename from packages/auth/src/storage/indexeddb.js rename to packages-old/auth/src/storage/indexeddb.js diff --git a/packages/auth/src/storage/inmemorystorage.js b/packages-old/auth/src/storage/inmemorystorage.js similarity index 100% rename from packages/auth/src/storage/inmemorystorage.js rename to packages-old/auth/src/storage/inmemorystorage.js diff --git a/packages/auth/src/storage/localstorage.js b/packages-old/auth/src/storage/localstorage.js similarity index 100% rename from packages/auth/src/storage/localstorage.js rename to packages-old/auth/src/storage/localstorage.js diff --git a/packages/auth/src/storage/mockstorage.js b/packages-old/auth/src/storage/mockstorage.js similarity index 100% rename from packages/auth/src/storage/mockstorage.js rename to packages-old/auth/src/storage/mockstorage.js diff --git a/packages/auth/src/storage/nullstorage.js b/packages-old/auth/src/storage/nullstorage.js similarity index 100% rename from packages/auth/src/storage/nullstorage.js rename to packages-old/auth/src/storage/nullstorage.js diff --git a/packages/auth/src/storage/sessionstorage.js b/packages-old/auth/src/storage/sessionstorage.js similarity index 100% rename from packages/auth/src/storage/sessionstorage.js rename to packages-old/auth/src/storage/sessionstorage.js diff --git a/packages/auth/src/storage/storage.js b/packages-old/auth/src/storage/storage.js similarity index 100% rename from packages/auth/src/storage/storage.js rename to packages-old/auth/src/storage/storage.js diff --git a/packages/auth/src/storageautheventmanager.js b/packages-old/auth/src/storageautheventmanager.js similarity index 100% rename from packages/auth/src/storageautheventmanager.js rename to packages-old/auth/src/storageautheventmanager.js diff --git a/packages/auth/src/storageoauthhandlermanager.js b/packages-old/auth/src/storageoauthhandlermanager.js similarity index 100% rename from packages/auth/src/storageoauthhandlermanager.js rename to packages-old/auth/src/storageoauthhandlermanager.js diff --git a/packages/auth/src/storagependingredirectmanager.js b/packages-old/auth/src/storagependingredirectmanager.js similarity index 100% rename from packages/auth/src/storagependingredirectmanager.js rename to packages-old/auth/src/storagependingredirectmanager.js diff --git a/packages/auth/src/storageredirectusermanager.js b/packages-old/auth/src/storageredirectusermanager.js similarity index 100% rename from packages/auth/src/storageredirectusermanager.js rename to packages-old/auth/src/storageredirectusermanager.js diff --git a/packages/auth/src/storageusermanager.js b/packages-old/auth/src/storageusermanager.js similarity index 100% rename from packages/auth/src/storageusermanager.js rename to packages-old/auth/src/storageusermanager.js diff --git a/packages/auth/src/token.js b/packages-old/auth/src/token.js similarity index 100% rename from packages/auth/src/token.js rename to packages-old/auth/src/token.js diff --git a/packages/auth/src/universallinksubscriber.js b/packages-old/auth/src/universallinksubscriber.js similarity index 100% rename from packages/auth/src/universallinksubscriber.js rename to packages-old/auth/src/universallinksubscriber.js diff --git a/packages/auth/src/userevent.js b/packages-old/auth/src/userevent.js similarity index 100% rename from packages/auth/src/userevent.js rename to packages-old/auth/src/userevent.js diff --git a/packages/auth/src/utils.js b/packages-old/auth/src/utils.js similarity index 100% rename from packages/auth/src/utils.js rename to packages-old/auth/src/utils.js diff --git a/packages/auth/test/actioncodeinfo_test.js b/packages-old/auth/test/actioncodeinfo_test.js similarity index 100% rename from packages/auth/test/actioncodeinfo_test.js rename to packages-old/auth/test/actioncodeinfo_test.js diff --git a/packages/auth/test/actioncodesettings_test.js b/packages-old/auth/test/actioncodesettings_test.js similarity index 100% rename from packages/auth/test/actioncodesettings_test.js rename to packages-old/auth/test/actioncodesettings_test.js diff --git a/packages/auth/test/actioncodeurl_test.js b/packages-old/auth/test/actioncodeurl_test.js similarity index 100% rename from packages/auth/test/actioncodeurl_test.js rename to packages-old/auth/test/actioncodeurl_test.js diff --git a/packages/auth/test/additionaluserinfo_test.js b/packages-old/auth/test/additionaluserinfo_test.js similarity index 100% rename from packages/auth/test/additionaluserinfo_test.js rename to packages-old/auth/test/additionaluserinfo_test.js diff --git a/packages/auth/test/args_test.js b/packages-old/auth/test/args_test.js similarity index 100% rename from packages/auth/test/args_test.js rename to packages-old/auth/test/args_test.js diff --git a/packages/auth/test/auth_test.js b/packages-old/auth/test/auth_test.js similarity index 100% rename from packages/auth/test/auth_test.js rename to packages-old/auth/test/auth_test.js diff --git a/packages/auth/test/authcredential_test.js b/packages-old/auth/test/authcredential_test.js similarity index 100% rename from packages/auth/test/authcredential_test.js rename to packages-old/auth/test/authcredential_test.js diff --git a/packages/auth/test/authevent_test.js b/packages-old/auth/test/authevent_test.js similarity index 100% rename from packages/auth/test/authevent_test.js rename to packages-old/auth/test/authevent_test.js diff --git a/packages/auth/test/autheventmanager_test.js b/packages-old/auth/test/autheventmanager_test.js similarity index 100% rename from packages/auth/test/autheventmanager_test.js rename to packages-old/auth/test/autheventmanager_test.js diff --git a/packages/auth/test/authsettings_test.js b/packages-old/auth/test/authsettings_test.js similarity index 100% rename from packages/auth/test/authsettings_test.js rename to packages-old/auth/test/authsettings_test.js diff --git a/packages/auth/test/authstorage_test.js b/packages-old/auth/test/authstorage_test.js similarity index 100% rename from packages/auth/test/authstorage_test.js rename to packages-old/auth/test/authstorage_test.js diff --git a/packages/auth/test/authuser_test.js b/packages-old/auth/test/authuser_test.js similarity index 100% rename from packages/auth/test/authuser_test.js rename to packages-old/auth/test/authuser_test.js diff --git a/packages/auth/test/cacherequest_test.js b/packages-old/auth/test/cacherequest_test.js similarity index 100% rename from packages/auth/test/cacherequest_test.js rename to packages-old/auth/test/cacherequest_test.js diff --git a/packages/auth/test/confirmationresult_test.js b/packages-old/auth/test/confirmationresult_test.js similarity index 100% rename from packages/auth/test/confirmationresult_test.js rename to packages-old/auth/test/confirmationresult_test.js diff --git a/packages/auth/test/cordovahandler_test.js b/packages-old/auth/test/cordovahandler_test.js similarity index 100% rename from packages/auth/test/cordovahandler_test.js rename to packages-old/auth/test/cordovahandler_test.js diff --git a/packages/auth/test/defines_test.js b/packages-old/auth/test/defines_test.js similarity index 100% rename from packages/auth/test/defines_test.js rename to packages-old/auth/test/defines_test.js diff --git a/packages/auth/test/deprecation_test.js b/packages-old/auth/test/deprecation_test.js similarity index 100% rename from packages/auth/test/deprecation_test.js rename to packages-old/auth/test/deprecation_test.js diff --git a/packages/auth/test/dynamiclink_test.js b/packages-old/auth/test/dynamiclink_test.js similarity index 100% rename from packages/auth/test/dynamiclink_test.js rename to packages-old/auth/test/dynamiclink_test.js diff --git a/packages/auth/test/error_test.js b/packages-old/auth/test/error_test.js similarity index 100% rename from packages/auth/test/error_test.js rename to packages-old/auth/test/error_test.js diff --git a/packages/auth/test/exports_lib_test.js b/packages-old/auth/test/exports_lib_test.js similarity index 100% rename from packages/auth/test/exports_lib_test.js rename to packages-old/auth/test/exports_lib_test.js diff --git a/packages/auth/test/idp_test.js b/packages-old/auth/test/idp_test.js similarity index 100% rename from packages/auth/test/idp_test.js rename to packages-old/auth/test/idp_test.js diff --git a/packages/auth/test/idtoken_test.js b/packages-old/auth/test/idtoken_test.js similarity index 100% rename from packages/auth/test/idtoken_test.js rename to packages-old/auth/test/idtoken_test.js diff --git a/packages/auth/test/idtokenresult_test.js b/packages-old/auth/test/idtokenresult_test.js similarity index 100% rename from packages/auth/test/idtokenresult_test.js rename to packages-old/auth/test/idtokenresult_test.js diff --git a/packages/auth/test/iframeclient/ifchandler_test.js b/packages-old/auth/test/iframeclient/ifchandler_test.js similarity index 100% rename from packages/auth/test/iframeclient/ifchandler_test.js rename to packages-old/auth/test/iframeclient/ifchandler_test.js diff --git a/packages/auth/test/iframeclient/iframewrapper_test.js b/packages-old/auth/test/iframeclient/iframewrapper_test.js similarity index 100% rename from packages/auth/test/iframeclient/iframewrapper_test.js rename to packages-old/auth/test/iframeclient/iframewrapper_test.js diff --git a/packages/auth/test/messagechannel/postmessager_test.js b/packages-old/auth/test/messagechannel/postmessager_test.js similarity index 100% rename from packages/auth/test/messagechannel/postmessager_test.js rename to packages-old/auth/test/messagechannel/postmessager_test.js diff --git a/packages/auth/test/messagechannel/receiver_test.js b/packages-old/auth/test/messagechannel/receiver_test.js similarity index 100% rename from packages/auth/test/messagechannel/receiver_test.js rename to packages-old/auth/test/messagechannel/receiver_test.js diff --git a/packages/auth/test/messagechannel/sender_test.js b/packages-old/auth/test/messagechannel/sender_test.js similarity index 100% rename from packages/auth/test/messagechannel/sender_test.js rename to packages-old/auth/test/messagechannel/sender_test.js diff --git a/packages/auth/test/multifactorassertion_test.js b/packages-old/auth/test/multifactorassertion_test.js similarity index 100% rename from packages/auth/test/multifactorassertion_test.js rename to packages-old/auth/test/multifactorassertion_test.js diff --git a/packages/auth/test/multifactorerror_test.js b/packages-old/auth/test/multifactorerror_test.js similarity index 100% rename from packages/auth/test/multifactorerror_test.js rename to packages-old/auth/test/multifactorerror_test.js diff --git a/packages/auth/test/multifactorgenerator_test.js b/packages-old/auth/test/multifactorgenerator_test.js similarity index 100% rename from packages/auth/test/multifactorgenerator_test.js rename to packages-old/auth/test/multifactorgenerator_test.js diff --git a/packages/auth/test/multifactorinfo_test.js b/packages-old/auth/test/multifactorinfo_test.js similarity index 100% rename from packages/auth/test/multifactorinfo_test.js rename to packages-old/auth/test/multifactorinfo_test.js diff --git a/packages/auth/test/multifactorresolver_test.js b/packages-old/auth/test/multifactorresolver_test.js similarity index 100% rename from packages/auth/test/multifactorresolver_test.js rename to packages-old/auth/test/multifactorresolver_test.js diff --git a/packages/auth/test/multifactorsession_test.js b/packages-old/auth/test/multifactorsession_test.js similarity index 100% rename from packages/auth/test/multifactorsession_test.js rename to packages-old/auth/test/multifactorsession_test.js diff --git a/packages/auth/test/multifactoruser_test.js b/packages-old/auth/test/multifactoruser_test.js similarity index 100% rename from packages/auth/test/multifactoruser_test.js rename to packages-old/auth/test/multifactoruser_test.js diff --git a/packages/auth/test/oauthhelperstate_test.js b/packages-old/auth/test/oauthhelperstate_test.js similarity index 100% rename from packages/auth/test/oauthhelperstate_test.js rename to packages-old/auth/test/oauthhelperstate_test.js diff --git a/packages/auth/test/object_test.js b/packages-old/auth/test/object_test.js similarity index 100% rename from packages/auth/test/object_test.js rename to packages-old/auth/test/object_test.js diff --git a/packages/auth/test/proactiverefresh_test.js b/packages-old/auth/test/proactiverefresh_test.js similarity index 100% rename from packages/auth/test/proactiverefresh_test.js rename to packages-old/auth/test/proactiverefresh_test.js diff --git a/packages/auth/test/recaptchaverifier/grecaptchamock_test.js b/packages-old/auth/test/recaptchaverifier/grecaptchamock_test.js similarity index 100% rename from packages/auth/test/recaptchaverifier/grecaptchamock_test.js rename to packages-old/auth/test/recaptchaverifier/grecaptchamock_test.js diff --git a/packages/auth/test/recaptchaverifier/mockloader_test.js b/packages-old/auth/test/recaptchaverifier/mockloader_test.js similarity index 100% rename from packages/auth/test/recaptchaverifier/mockloader_test.js rename to packages-old/auth/test/recaptchaverifier/mockloader_test.js diff --git a/packages/auth/test/recaptchaverifier/realloader_test.js b/packages-old/auth/test/recaptchaverifier/realloader_test.js similarity index 100% rename from packages/auth/test/recaptchaverifier/realloader_test.js rename to packages-old/auth/test/recaptchaverifier/realloader_test.js diff --git a/packages/auth/test/recaptchaverifier/recaptchaverifier_test.js b/packages-old/auth/test/recaptchaverifier/recaptchaverifier_test.js similarity index 100% rename from packages/auth/test/recaptchaverifier/recaptchaverifier_test.js rename to packages-old/auth/test/recaptchaverifier/recaptchaverifier_test.js diff --git a/packages/auth/test/rpchandler_test.js b/packages-old/auth/test/rpchandler_test.js similarity index 100% rename from packages/auth/test/rpchandler_test.js rename to packages-old/auth/test/rpchandler_test.js diff --git a/packages/auth/test/storage/asyncstorage_test.js b/packages-old/auth/test/storage/asyncstorage_test.js similarity index 100% rename from packages/auth/test/storage/asyncstorage_test.js rename to packages-old/auth/test/storage/asyncstorage_test.js diff --git a/packages/auth/test/storage/factory_test.js b/packages-old/auth/test/storage/factory_test.js similarity index 100% rename from packages/auth/test/storage/factory_test.js rename to packages-old/auth/test/storage/factory_test.js diff --git a/packages/auth/test/storage/hybridindexeddb_test.js b/packages-old/auth/test/storage/hybridindexeddb_test.js similarity index 100% rename from packages/auth/test/storage/hybridindexeddb_test.js rename to packages-old/auth/test/storage/hybridindexeddb_test.js diff --git a/packages/auth/test/storage/indexeddb_test.js b/packages-old/auth/test/storage/indexeddb_test.js similarity index 100% rename from packages/auth/test/storage/indexeddb_test.js rename to packages-old/auth/test/storage/indexeddb_test.js diff --git a/packages/auth/test/storage/inmemorystorage_test.js b/packages-old/auth/test/storage/inmemorystorage_test.js similarity index 100% rename from packages/auth/test/storage/inmemorystorage_test.js rename to packages-old/auth/test/storage/inmemorystorage_test.js diff --git a/packages/auth/test/storage/localstorage_test.js b/packages-old/auth/test/storage/localstorage_test.js similarity index 100% rename from packages/auth/test/storage/localstorage_test.js rename to packages-old/auth/test/storage/localstorage_test.js diff --git a/packages/auth/test/storage/mockstorage_test.js b/packages-old/auth/test/storage/mockstorage_test.js similarity index 100% rename from packages/auth/test/storage/mockstorage_test.js rename to packages-old/auth/test/storage/mockstorage_test.js diff --git a/packages/auth/test/storage/nullstorage_test.js b/packages-old/auth/test/storage/nullstorage_test.js similarity index 100% rename from packages/auth/test/storage/nullstorage_test.js rename to packages-old/auth/test/storage/nullstorage_test.js diff --git a/packages/auth/test/storage/sessionstorage_test.js b/packages-old/auth/test/storage/sessionstorage_test.js similarity index 100% rename from packages/auth/test/storage/sessionstorage_test.js rename to packages-old/auth/test/storage/sessionstorage_test.js diff --git a/packages/auth/test/storage/testhelper.js b/packages-old/auth/test/storage/testhelper.js similarity index 100% rename from packages/auth/test/storage/testhelper.js rename to packages-old/auth/test/storage/testhelper.js diff --git a/packages/auth/test/storageautheventmanager_test.js b/packages-old/auth/test/storageautheventmanager_test.js similarity index 100% rename from packages/auth/test/storageautheventmanager_test.js rename to packages-old/auth/test/storageautheventmanager_test.js diff --git a/packages/auth/test/storageoauthhandlermanager_test.js b/packages-old/auth/test/storageoauthhandlermanager_test.js similarity index 100% rename from packages/auth/test/storageoauthhandlermanager_test.js rename to packages-old/auth/test/storageoauthhandlermanager_test.js diff --git a/packages/auth/test/storagependingredirectmanager_test.js b/packages-old/auth/test/storagependingredirectmanager_test.js similarity index 100% rename from packages/auth/test/storagependingredirectmanager_test.js rename to packages-old/auth/test/storagependingredirectmanager_test.js diff --git a/packages/auth/test/storageredirectusermanager_test.js b/packages-old/auth/test/storageredirectusermanager_test.js similarity index 100% rename from packages/auth/test/storageredirectusermanager_test.js rename to packages-old/auth/test/storageredirectusermanager_test.js diff --git a/packages/auth/test/storageusermanager_test.js b/packages-old/auth/test/storageusermanager_test.js similarity index 100% rename from packages/auth/test/storageusermanager_test.js rename to packages-old/auth/test/storageusermanager_test.js diff --git a/packages/auth/test/testhelper.js b/packages-old/auth/test/testhelper.js similarity index 100% rename from packages/auth/test/testhelper.js rename to packages-old/auth/test/testhelper.js diff --git a/packages/auth/test/token_test.js b/packages-old/auth/test/token_test.js similarity index 100% rename from packages/auth/test/token_test.js rename to packages-old/auth/test/token_test.js diff --git a/packages/auth/test/universallinksubscriber_test.js b/packages-old/auth/test/universallinksubscriber_test.js similarity index 100% rename from packages/auth/test/universallinksubscriber_test.js rename to packages-old/auth/test/universallinksubscriber_test.js diff --git a/packages/auth/test/userevent_test.js b/packages-old/auth/test/userevent_test.js similarity index 100% rename from packages/auth/test/userevent_test.js rename to packages-old/auth/test/userevent_test.js diff --git a/packages/auth/test/utils_test.js b/packages-old/auth/test/utils_test.js similarity index 100% rename from packages/auth/test/utils_test.js rename to packages-old/auth/test/utils_test.js diff --git a/packages-exp/firebase-exp/.gitignore b/packages-old/firebase/.gitignore similarity index 100% rename from packages-exp/firebase-exp/.gitignore rename to packages-old/firebase/.gitignore diff --git a/packages/firebase/CHANGELOG.md b/packages-old/firebase/CHANGELOG.md similarity index 100% rename from packages/firebase/CHANGELOG.md rename to packages-old/firebase/CHANGELOG.md diff --git a/packages/firebase/README.md b/packages-old/firebase/README.md similarity index 100% rename from packages/firebase/README.md rename to packages-old/firebase/README.md diff --git a/packages/firebase/analytics/index.ts b/packages-old/firebase/analytics/index.ts similarity index 100% rename from packages/firebase/analytics/index.ts rename to packages-old/firebase/analytics/index.ts diff --git a/packages/firebase/analytics/package.json b/packages-old/firebase/analytics/package.json similarity index 100% rename from packages/firebase/analytics/package.json rename to packages-old/firebase/analytics/package.json diff --git a/packages/firebase/app-check/index.ts b/packages-old/firebase/app-check/index.ts similarity index 100% rename from packages/firebase/app-check/index.ts rename to packages-old/firebase/app-check/index.ts diff --git a/packages/firebase/app-check/package.json b/packages-old/firebase/app-check/package.json similarity index 100% rename from packages/firebase/app-check/package.json rename to packages-old/firebase/app-check/package.json diff --git a/packages/firebase/app/index.ts b/packages-old/firebase/app/index.ts similarity index 100% rename from packages/firebase/app/index.ts rename to packages-old/firebase/app/index.ts diff --git a/packages/firebase/app/package.json b/packages-old/firebase/app/package.json similarity index 100% rename from packages/firebase/app/package.json rename to packages-old/firebase/app/package.json diff --git a/packages/firebase/auth/index.ts b/packages-old/firebase/auth/index.ts similarity index 100% rename from packages/firebase/auth/index.ts rename to packages-old/firebase/auth/index.ts diff --git a/packages/firebase/auth/package.json b/packages-old/firebase/auth/package.json similarity index 100% rename from packages/firebase/auth/package.json rename to packages-old/firebase/auth/package.json diff --git a/packages/firebase/database/index.ts b/packages-old/firebase/database/index.ts similarity index 100% rename from packages/firebase/database/index.ts rename to packages-old/firebase/database/index.ts diff --git a/packages/firebase/database/package.json b/packages-old/firebase/database/package.json similarity index 100% rename from packages/firebase/database/package.json rename to packages-old/firebase/database/package.json diff --git a/packages/firebase/empty-import.d.ts b/packages-old/firebase/empty-import.d.ts similarity index 100% rename from packages/firebase/empty-import.d.ts rename to packages-old/firebase/empty-import.d.ts diff --git a/packages/firebase/externs/firebase-app-externs.js b/packages-old/firebase/externs/firebase-app-externs.js similarity index 100% rename from packages/firebase/externs/firebase-app-externs.js rename to packages-old/firebase/externs/firebase-app-externs.js diff --git a/packages/firebase/externs/firebase-app-internal-externs.js b/packages-old/firebase/externs/firebase-app-internal-externs.js similarity index 100% rename from packages/firebase/externs/firebase-app-internal-externs.js rename to packages-old/firebase/externs/firebase-app-internal-externs.js diff --git a/packages/firebase/externs/firebase-auth-externs.js b/packages-old/firebase/externs/firebase-auth-externs.js similarity index 100% rename from packages/firebase/externs/firebase-auth-externs.js rename to packages-old/firebase/externs/firebase-auth-externs.js diff --git a/packages/firebase/externs/firebase-client-auth-externs.js b/packages-old/firebase/externs/firebase-client-auth-externs.js similarity index 100% rename from packages/firebase/externs/firebase-client-auth-externs.js rename to packages-old/firebase/externs/firebase-client-auth-externs.js diff --git a/packages/firebase/externs/firebase-database-externs.js b/packages-old/firebase/externs/firebase-database-externs.js similarity index 100% rename from packages/firebase/externs/firebase-database-externs.js rename to packages-old/firebase/externs/firebase-database-externs.js diff --git a/packages/firebase/externs/firebase-database-internal-externs.js b/packages-old/firebase/externs/firebase-database-internal-externs.js similarity index 100% rename from packages/firebase/externs/firebase-database-internal-externs.js rename to packages-old/firebase/externs/firebase-database-internal-externs.js diff --git a/packages/firebase/externs/firebase-error-externs.js b/packages-old/firebase/externs/firebase-error-externs.js similarity index 100% rename from packages/firebase/externs/firebase-error-externs.js rename to packages-old/firebase/externs/firebase-error-externs.js diff --git a/packages/firebase/externs/firebase-externs.js b/packages-old/firebase/externs/firebase-externs.js similarity index 100% rename from packages/firebase/externs/firebase-externs.js rename to packages-old/firebase/externs/firebase-externs.js diff --git a/packages/firebase/externs/firebase-firestore-externs.js b/packages-old/firebase/externs/firebase-firestore-externs.js similarity index 100% rename from packages/firebase/externs/firebase-firestore-externs.js rename to packages-old/firebase/externs/firebase-firestore-externs.js diff --git a/packages/firebase/externs/firebase-messaging-externs.js b/packages-old/firebase/externs/firebase-messaging-externs.js similarity index 100% rename from packages/firebase/externs/firebase-messaging-externs.js rename to packages-old/firebase/externs/firebase-messaging-externs.js diff --git a/packages/firebase/externs/firebase-storage-externs.js b/packages-old/firebase/externs/firebase-storage-externs.js similarity index 100% rename from packages/firebase/externs/firebase-storage-externs.js rename to packages-old/firebase/externs/firebase-storage-externs.js diff --git a/packages/firebase/firestore/bundle/index.ts b/packages-old/firebase/firestore/bundle/index.ts similarity index 100% rename from packages/firebase/firestore/bundle/index.ts rename to packages-old/firebase/firestore/bundle/index.ts diff --git a/packages/firebase/firestore/bundle/package.json b/packages-old/firebase/firestore/bundle/package.json similarity index 100% rename from packages/firebase/firestore/bundle/package.json rename to packages-old/firebase/firestore/bundle/package.json diff --git a/packages/firebase/firestore/index.cdn.ts b/packages-old/firebase/firestore/index.cdn.ts similarity index 100% rename from packages/firebase/firestore/index.cdn.ts rename to packages-old/firebase/firestore/index.cdn.ts diff --git a/packages/firebase/firestore/index.ts b/packages-old/firebase/firestore/index.ts similarity index 100% rename from packages/firebase/firestore/index.ts rename to packages-old/firebase/firestore/index.ts diff --git a/packages/firebase/firestore/memory/bundle/index.ts b/packages-old/firebase/firestore/memory/bundle/index.ts similarity index 100% rename from packages/firebase/firestore/memory/bundle/index.ts rename to packages-old/firebase/firestore/memory/bundle/index.ts diff --git a/packages/firebase/firestore/memory/bundle/package.json b/packages-old/firebase/firestore/memory/bundle/package.json similarity index 100% rename from packages/firebase/firestore/memory/bundle/package.json rename to packages-old/firebase/firestore/memory/bundle/package.json diff --git a/packages/firebase/firestore/memory/index.cdn.ts b/packages-old/firebase/firestore/memory/index.cdn.ts similarity index 100% rename from packages/firebase/firestore/memory/index.cdn.ts rename to packages-old/firebase/firestore/memory/index.cdn.ts diff --git a/packages/firebase/firestore/memory/index.ts b/packages-old/firebase/firestore/memory/index.ts similarity index 100% rename from packages/firebase/firestore/memory/index.ts rename to packages-old/firebase/firestore/memory/index.ts diff --git a/packages/firebase/firestore/memory/package.json b/packages-old/firebase/firestore/memory/package.json similarity index 100% rename from packages/firebase/firestore/memory/package.json rename to packages-old/firebase/firestore/memory/package.json diff --git a/packages/firebase/firestore/package.json b/packages-old/firebase/firestore/package.json similarity index 100% rename from packages/firebase/firestore/package.json rename to packages-old/firebase/firestore/package.json diff --git a/packages/firebase/functions/index.ts b/packages-old/firebase/functions/index.ts similarity index 100% rename from packages/firebase/functions/index.ts rename to packages-old/firebase/functions/index.ts diff --git a/packages/firebase/functions/package.json b/packages-old/firebase/functions/package.json similarity index 100% rename from packages/firebase/functions/package.json rename to packages-old/firebase/functions/package.json diff --git a/packages/firebase/index.d.ts b/packages-old/firebase/index.d.ts similarity index 100% rename from packages/firebase/index.d.ts rename to packages-old/firebase/index.d.ts diff --git a/packages/firebase/index.html b/packages-old/firebase/index.html similarity index 100% rename from packages/firebase/index.html rename to packages-old/firebase/index.html diff --git a/packages/firebase/installations/index.ts b/packages-old/firebase/installations/index.ts similarity index 100% rename from packages/firebase/installations/index.ts rename to packages-old/firebase/installations/index.ts diff --git a/packages/firebase/installations/package.json b/packages-old/firebase/installations/package.json similarity index 100% rename from packages/firebase/installations/package.json rename to packages-old/firebase/installations/package.json diff --git a/packages/firebase/messaging/index.ts b/packages-old/firebase/messaging/index.ts similarity index 100% rename from packages/firebase/messaging/index.ts rename to packages-old/firebase/messaging/index.ts diff --git a/packages/firebase/messaging/package.json b/packages-old/firebase/messaging/package.json similarity index 100% rename from packages/firebase/messaging/package.json rename to packages-old/firebase/messaging/package.json diff --git a/packages/firebase/package.json b/packages-old/firebase/package.json similarity index 100% rename from packages/firebase/package.json rename to packages-old/firebase/package.json diff --git a/packages/firebase/performance/index.ts b/packages-old/firebase/performance/index.ts similarity index 100% rename from packages/firebase/performance/index.ts rename to packages-old/firebase/performance/index.ts diff --git a/packages/firebase/performance/package.json b/packages-old/firebase/performance/package.json similarity index 100% rename from packages/firebase/performance/package.json rename to packages-old/firebase/performance/package.json diff --git a/packages/firebase/remote-config/index.ts b/packages-old/firebase/remote-config/index.ts similarity index 100% rename from packages/firebase/remote-config/index.ts rename to packages-old/firebase/remote-config/index.ts diff --git a/packages/firebase/remote-config/package.json b/packages-old/firebase/remote-config/package.json similarity index 100% rename from packages/firebase/remote-config/package.json rename to packages-old/firebase/remote-config/package.json diff --git a/packages/firebase/rollup-internal.config.js b/packages-old/firebase/rollup-internal.config.js similarity index 100% rename from packages/firebase/rollup-internal.config.js rename to packages-old/firebase/rollup-internal.config.js diff --git a/packages/firebase/rollup.config.js b/packages-old/firebase/rollup.config.js similarity index 100% rename from packages/firebase/rollup.config.js rename to packages-old/firebase/rollup.config.js diff --git a/packages/firebase/src/index.cdn.ts b/packages-old/firebase/src/index.cdn.ts similarity index 100% rename from packages/firebase/src/index.cdn.ts rename to packages-old/firebase/src/index.cdn.ts diff --git a/packages/firebase/src/index.node.ts b/packages-old/firebase/src/index.node.ts similarity index 100% rename from packages/firebase/src/index.node.ts rename to packages-old/firebase/src/index.node.ts diff --git a/packages/firebase/src/index.perf.ts b/packages-old/firebase/src/index.perf.ts similarity index 100% rename from packages/firebase/src/index.perf.ts rename to packages-old/firebase/src/index.perf.ts diff --git a/packages/firebase/src/index.rn.ts b/packages-old/firebase/src/index.rn.ts similarity index 100% rename from packages/firebase/src/index.rn.ts rename to packages-old/firebase/src/index.rn.ts diff --git a/packages/firebase/src/index.ts b/packages-old/firebase/src/index.ts similarity index 100% rename from packages/firebase/src/index.ts rename to packages-old/firebase/src/index.ts diff --git a/packages/firebase/storage/index.ts b/packages-old/firebase/storage/index.ts similarity index 100% rename from packages/firebase/storage/index.ts rename to packages-old/firebase/storage/index.ts diff --git a/packages/firebase/storage/package.json b/packages-old/firebase/storage/package.json similarity index 100% rename from packages/firebase/storage/package.json rename to packages-old/firebase/storage/package.json diff --git a/packages/firebase/tsconfig.json b/packages-old/firebase/tsconfig.json similarity index 100% rename from packages/firebase/tsconfig.json rename to packages-old/firebase/tsconfig.json diff --git a/packages/functions/.eslintrc.js b/packages-old/functions/.eslintrc.js similarity index 100% rename from packages/functions/.eslintrc.js rename to packages-old/functions/.eslintrc.js diff --git a/packages/functions/.npmignore b/packages-old/functions/.npmignore similarity index 100% rename from packages/functions/.npmignore rename to packages-old/functions/.npmignore diff --git a/packages/functions/CHANGELOG.md b/packages-old/functions/CHANGELOG.md similarity index 100% rename from packages/functions/CHANGELOG.md rename to packages-old/functions/CHANGELOG.md diff --git a/packages-exp/functions-exp/README.md b/packages-old/functions/README.md similarity index 100% rename from packages-exp/functions-exp/README.md rename to packages-old/functions/README.md diff --git a/packages/functions/index.node.ts b/packages-old/functions/index.node.ts similarity index 100% rename from packages/functions/index.node.ts rename to packages-old/functions/index.node.ts diff --git a/packages/functions/index.ts b/packages-old/functions/index.ts similarity index 100% rename from packages/functions/index.ts rename to packages-old/functions/index.ts diff --git a/packages/functions/karma.conf.js b/packages-old/functions/karma.conf.js similarity index 100% rename from packages/functions/karma.conf.js rename to packages-old/functions/karma.conf.js diff --git a/packages/functions/package.json b/packages-old/functions/package.json similarity index 100% rename from packages/functions/package.json rename to packages-old/functions/package.json diff --git a/packages/functions/rollup.config.js b/packages-old/functions/rollup.config.js similarity index 100% rename from packages/functions/rollup.config.js rename to packages-old/functions/rollup.config.js diff --git a/packages/functions/src/api/error.ts b/packages-old/functions/src/api/error.ts similarity index 100% rename from packages/functions/src/api/error.ts rename to packages-old/functions/src/api/error.ts diff --git a/packages/functions/src/api/service.ts b/packages-old/functions/src/api/service.ts similarity index 100% rename from packages/functions/src/api/service.ts rename to packages-old/functions/src/api/service.ts diff --git a/packages/functions/src/config.ts b/packages-old/functions/src/config.ts similarity index 100% rename from packages/functions/src/config.ts rename to packages-old/functions/src/config.ts diff --git a/packages/functions/src/context.ts b/packages-old/functions/src/context.ts similarity index 100% rename from packages/functions/src/context.ts rename to packages-old/functions/src/context.ts diff --git a/packages/functions/src/serializer.ts b/packages-old/functions/src/serializer.ts similarity index 100% rename from packages/functions/src/serializer.ts rename to packages-old/functions/src/serializer.ts diff --git a/packages/functions/test/browser/callable.test.ts b/packages-old/functions/test/browser/callable.test.ts similarity index 100% rename from packages/functions/test/browser/callable.test.ts rename to packages-old/functions/test/browser/callable.test.ts diff --git a/packages/functions/test/callable.test.ts b/packages-old/functions/test/callable.test.ts similarity index 100% rename from packages/functions/test/callable.test.ts rename to packages-old/functions/test/callable.test.ts diff --git a/packages/functions/test/serializer.test.ts b/packages-old/functions/test/serializer.test.ts similarity index 100% rename from packages/functions/test/serializer.test.ts rename to packages-old/functions/test/serializer.test.ts diff --git a/packages/functions/test/service.test.ts b/packages-old/functions/test/service.test.ts similarity index 100% rename from packages/functions/test/service.test.ts rename to packages-old/functions/test/service.test.ts diff --git a/packages/functions/test/utils.ts b/packages-old/functions/test/utils.ts similarity index 100% rename from packages/functions/test/utils.ts rename to packages-old/functions/test/utils.ts diff --git a/packages-exp/auth-compat-exp/tsconfig.json b/packages-old/functions/tsconfig.json similarity index 100% rename from packages-exp/auth-compat-exp/tsconfig.json rename to packages-old/functions/tsconfig.json diff --git a/packages/installations/.eslintrc.js b/packages-old/installations/.eslintrc.js similarity index 100% rename from packages/installations/.eslintrc.js rename to packages-old/installations/.eslintrc.js diff --git a/packages/installations/CHANGELOG.md b/packages-old/installations/CHANGELOG.md similarity index 100% rename from packages/installations/CHANGELOG.md rename to packages-old/installations/CHANGELOG.md diff --git a/packages/installations/karma.conf.js b/packages-old/installations/karma.conf.js similarity index 100% rename from packages/installations/karma.conf.js rename to packages-old/installations/karma.conf.js diff --git a/packages/installations/package.json b/packages-old/installations/package.json similarity index 100% rename from packages/installations/package.json rename to packages-old/installations/package.json diff --git a/packages/installations/rollup.config.js b/packages-old/installations/rollup.config.js similarity index 100% rename from packages/installations/rollup.config.js rename to packages-old/installations/rollup.config.js diff --git a/packages-exp/installations-exp/src/functions/common.test.ts b/packages-old/installations/src/api/common.test.ts similarity index 100% rename from packages-exp/installations-exp/src/functions/common.test.ts rename to packages-old/installations/src/api/common.test.ts diff --git a/packages/installations/src/api/common.ts b/packages-old/installations/src/api/common.ts similarity index 100% rename from packages/installations/src/api/common.ts rename to packages-old/installations/src/api/common.ts diff --git a/packages/installations/src/api/create-installation-request.test.ts b/packages-old/installations/src/api/create-installation-request.test.ts similarity index 100% rename from packages/installations/src/api/create-installation-request.test.ts rename to packages-old/installations/src/api/create-installation-request.test.ts diff --git a/packages/installations/src/api/create-installation-request.ts b/packages-old/installations/src/api/create-installation-request.ts similarity index 100% rename from packages/installations/src/api/create-installation-request.ts rename to packages-old/installations/src/api/create-installation-request.ts diff --git a/packages/installations/src/api/delete-installation-request.test.ts b/packages-old/installations/src/api/delete-installation-request.test.ts similarity index 100% rename from packages/installations/src/api/delete-installation-request.test.ts rename to packages-old/installations/src/api/delete-installation-request.test.ts diff --git a/packages/installations/src/api/delete-installation-request.ts b/packages-old/installations/src/api/delete-installation-request.ts similarity index 100% rename from packages/installations/src/api/delete-installation-request.ts rename to packages-old/installations/src/api/delete-installation-request.ts diff --git a/packages/installations/src/api/generate-auth-token-request.test.ts b/packages-old/installations/src/api/generate-auth-token-request.test.ts similarity index 100% rename from packages/installations/src/api/generate-auth-token-request.test.ts rename to packages-old/installations/src/api/generate-auth-token-request.test.ts diff --git a/packages/installations/src/api/generate-auth-token-request.ts b/packages-old/installations/src/api/generate-auth-token-request.ts similarity index 100% rename from packages/installations/src/api/generate-auth-token-request.ts rename to packages-old/installations/src/api/generate-auth-token-request.ts diff --git a/packages/installations/src/functions/delete-installation.test.ts b/packages-old/installations/src/functions/delete-installation.test.ts similarity index 100% rename from packages/installations/src/functions/delete-installation.test.ts rename to packages-old/installations/src/functions/delete-installation.test.ts diff --git a/packages/installations/src/functions/delete-installation.ts b/packages-old/installations/src/functions/delete-installation.ts similarity index 100% rename from packages/installations/src/functions/delete-installation.ts rename to packages-old/installations/src/functions/delete-installation.ts diff --git a/packages/installations/src/functions/get-id.test.ts b/packages-old/installations/src/functions/get-id.test.ts similarity index 100% rename from packages/installations/src/functions/get-id.test.ts rename to packages-old/installations/src/functions/get-id.test.ts diff --git a/packages/installations/src/functions/get-id.ts b/packages-old/installations/src/functions/get-id.ts similarity index 100% rename from packages/installations/src/functions/get-id.ts rename to packages-old/installations/src/functions/get-id.ts diff --git a/packages/installations/src/functions/get-token.test.ts b/packages-old/installations/src/functions/get-token.test.ts similarity index 100% rename from packages/installations/src/functions/get-token.test.ts rename to packages-old/installations/src/functions/get-token.test.ts diff --git a/packages/installations/src/functions/get-token.ts b/packages-old/installations/src/functions/get-token.ts similarity index 100% rename from packages/installations/src/functions/get-token.ts rename to packages-old/installations/src/functions/get-token.ts diff --git a/packages/installations/src/functions/index.ts b/packages-old/installations/src/functions/index.ts similarity index 100% rename from packages/installations/src/functions/index.ts rename to packages-old/installations/src/functions/index.ts diff --git a/packages/installations/src/functions/on-id-change.test.ts b/packages-old/installations/src/functions/on-id-change.test.ts similarity index 100% rename from packages/installations/src/functions/on-id-change.test.ts rename to packages-old/installations/src/functions/on-id-change.test.ts diff --git a/packages/installations/src/functions/on-id-change.ts b/packages-old/installations/src/functions/on-id-change.ts similarity index 100% rename from packages/installations/src/functions/on-id-change.ts rename to packages-old/installations/src/functions/on-id-change.ts diff --git a/packages-exp/installations-exp/src/helpers/buffer-to-base64-url-safe.test.ts b/packages-old/installations/src/helpers/buffer-to-base64-url-safe.test.ts similarity index 100% rename from packages-exp/installations-exp/src/helpers/buffer-to-base64-url-safe.test.ts rename to packages-old/installations/src/helpers/buffer-to-base64-url-safe.test.ts diff --git a/packages-exp/installations-exp/src/helpers/buffer-to-base64-url-safe.ts b/packages-old/installations/src/helpers/buffer-to-base64-url-safe.ts similarity index 100% rename from packages-exp/installations-exp/src/helpers/buffer-to-base64-url-safe.ts rename to packages-old/installations/src/helpers/buffer-to-base64-url-safe.ts diff --git a/packages/installations/src/helpers/extract-app-config.test.ts b/packages-old/installations/src/helpers/extract-app-config.test.ts similarity index 100% rename from packages/installations/src/helpers/extract-app-config.test.ts rename to packages-old/installations/src/helpers/extract-app-config.test.ts diff --git a/packages/installations/src/helpers/extract-app-config.ts b/packages-old/installations/src/helpers/extract-app-config.ts similarity index 100% rename from packages/installations/src/helpers/extract-app-config.ts rename to packages-old/installations/src/helpers/extract-app-config.ts diff --git a/packages/installations/src/helpers/fid-changed.test.ts b/packages-old/installations/src/helpers/fid-changed.test.ts similarity index 100% rename from packages/installations/src/helpers/fid-changed.test.ts rename to packages-old/installations/src/helpers/fid-changed.test.ts diff --git a/packages/installations/src/helpers/fid-changed.ts b/packages-old/installations/src/helpers/fid-changed.ts similarity index 100% rename from packages/installations/src/helpers/fid-changed.ts rename to packages-old/installations/src/helpers/fid-changed.ts diff --git a/packages-exp/installations-exp/src/helpers/generate-fid.test.ts b/packages-old/installations/src/helpers/generate-fid.test.ts similarity index 100% rename from packages-exp/installations-exp/src/helpers/generate-fid.test.ts rename to packages-old/installations/src/helpers/generate-fid.test.ts diff --git a/packages-exp/installations-exp/src/helpers/generate-fid.ts b/packages-old/installations/src/helpers/generate-fid.ts similarity index 100% rename from packages-exp/installations-exp/src/helpers/generate-fid.ts rename to packages-old/installations/src/helpers/generate-fid.ts diff --git a/packages/installations/src/helpers/get-installation-entry.test.ts b/packages-old/installations/src/helpers/get-installation-entry.test.ts similarity index 100% rename from packages/installations/src/helpers/get-installation-entry.test.ts rename to packages-old/installations/src/helpers/get-installation-entry.test.ts diff --git a/packages/installations/src/helpers/get-installation-entry.ts b/packages-old/installations/src/helpers/get-installation-entry.ts similarity index 100% rename from packages/installations/src/helpers/get-installation-entry.ts rename to packages-old/installations/src/helpers/get-installation-entry.ts diff --git a/packages/installations/src/helpers/idb-manager.test.ts b/packages-old/installations/src/helpers/idb-manager.test.ts similarity index 100% rename from packages/installations/src/helpers/idb-manager.test.ts rename to packages-old/installations/src/helpers/idb-manager.test.ts diff --git a/packages/installations/src/helpers/idb-manager.ts b/packages-old/installations/src/helpers/idb-manager.ts similarity index 100% rename from packages/installations/src/helpers/idb-manager.ts rename to packages-old/installations/src/helpers/idb-manager.ts diff --git a/packages/installations/src/helpers/refresh-auth-token.test.ts b/packages-old/installations/src/helpers/refresh-auth-token.test.ts similarity index 100% rename from packages/installations/src/helpers/refresh-auth-token.test.ts rename to packages-old/installations/src/helpers/refresh-auth-token.test.ts diff --git a/packages/installations/src/helpers/refresh-auth-token.ts b/packages-old/installations/src/helpers/refresh-auth-token.ts similarity index 100% rename from packages/installations/src/helpers/refresh-auth-token.ts rename to packages-old/installations/src/helpers/refresh-auth-token.ts diff --git a/packages/installations/src/index.ts b/packages-old/installations/src/index.ts similarity index 100% rename from packages/installations/src/index.ts rename to packages-old/installations/src/index.ts diff --git a/packages-exp/installations-exp/src/interfaces/api-response.ts b/packages-old/installations/src/interfaces/api-response.ts similarity index 100% rename from packages-exp/installations-exp/src/interfaces/api-response.ts rename to packages-old/installations/src/interfaces/api-response.ts diff --git a/packages/installations/src/interfaces/app-config.ts b/packages-old/installations/src/interfaces/app-config.ts similarity index 100% rename from packages/installations/src/interfaces/app-config.ts rename to packages-old/installations/src/interfaces/app-config.ts diff --git a/packages/installations/src/interfaces/firebase-dependencies.ts b/packages-old/installations/src/interfaces/firebase-dependencies.ts similarity index 100% rename from packages/installations/src/interfaces/firebase-dependencies.ts rename to packages-old/installations/src/interfaces/firebase-dependencies.ts diff --git a/packages-exp/installations-exp/src/interfaces/installation-entry.ts b/packages-old/installations/src/interfaces/installation-entry.ts similarity index 100% rename from packages-exp/installations-exp/src/interfaces/installation-entry.ts rename to packages-old/installations/src/interfaces/installation-entry.ts diff --git a/packages-exp/installations-exp/src/testing/compare-headers.test.ts b/packages-old/installations/src/testing/compare-headers.test.ts similarity index 100% rename from packages-exp/installations-exp/src/testing/compare-headers.test.ts rename to packages-old/installations/src/testing/compare-headers.test.ts diff --git a/packages-exp/installations-exp/src/testing/compare-headers.ts b/packages-old/installations/src/testing/compare-headers.ts similarity index 100% rename from packages-exp/installations-exp/src/testing/compare-headers.ts rename to packages-old/installations/src/testing/compare-headers.ts diff --git a/packages/installations/src/testing/fake-generators.ts b/packages-old/installations/src/testing/fake-generators.ts similarity index 100% rename from packages/installations/src/testing/fake-generators.ts rename to packages-old/installations/src/testing/fake-generators.ts diff --git a/packages-exp/installations-exp/src/testing/setup.ts b/packages-old/installations/src/testing/setup.ts similarity index 100% rename from packages-exp/installations-exp/src/testing/setup.ts rename to packages-old/installations/src/testing/setup.ts diff --git a/packages-exp/installations-exp/src/util/constants.ts b/packages-old/installations/src/util/constants.ts similarity index 100% rename from packages-exp/installations-exp/src/util/constants.ts rename to packages-old/installations/src/util/constants.ts diff --git a/packages-exp/installations-exp/src/util/errors.ts b/packages-old/installations/src/util/errors.ts similarity index 100% rename from packages-exp/installations-exp/src/util/errors.ts rename to packages-old/installations/src/util/errors.ts diff --git a/packages/installations/src/util/get-key.ts b/packages-old/installations/src/util/get-key.ts similarity index 100% rename from packages/installations/src/util/get-key.ts rename to packages-old/installations/src/util/get-key.ts diff --git a/packages/installations/src/util/sleep.test.ts b/packages-old/installations/src/util/sleep.test.ts similarity index 100% rename from packages/installations/src/util/sleep.test.ts rename to packages-old/installations/src/util/sleep.test.ts diff --git a/packages/installations/src/util/sleep.ts b/packages-old/installations/src/util/sleep.ts similarity index 100% rename from packages/installations/src/util/sleep.ts rename to packages-old/installations/src/util/sleep.ts diff --git a/packages-exp/installations-exp/test-app/.gitignore b/packages-old/installations/test-app/.gitignore similarity index 100% rename from packages-exp/installations-exp/test-app/.gitignore rename to packages-old/installations/test-app/.gitignore diff --git a/packages/installations/test-app/index.html b/packages-old/installations/test-app/index.html similarity index 100% rename from packages/installations/test-app/index.html rename to packages-old/installations/test-app/index.html diff --git a/packages/installations/test-app/index.js b/packages-old/installations/test-app/index.js similarity index 100% rename from packages/installations/test-app/index.js rename to packages-old/installations/test-app/index.js diff --git a/packages/installations/test-app/rollup.config.js b/packages-old/installations/test-app/rollup.config.js similarity index 100% rename from packages/installations/test-app/rollup.config.js rename to packages-old/installations/test-app/rollup.config.js diff --git a/packages/installations/tsconfig.json b/packages-old/installations/tsconfig.json similarity index 100% rename from packages/installations/tsconfig.json rename to packages-old/installations/tsconfig.json diff --git a/packages/messaging/.eslintrc.js b/packages-old/messaging/.eslintrc.js similarity index 100% rename from packages/messaging/.eslintrc.js rename to packages-old/messaging/.eslintrc.js diff --git a/packages/messaging/.npmignore b/packages-old/messaging/.npmignore similarity index 100% rename from packages/messaging/.npmignore rename to packages-old/messaging/.npmignore diff --git a/packages/messaging/CHANGELOG.md b/packages-old/messaging/CHANGELOG.md similarity index 100% rename from packages/messaging/CHANGELOG.md rename to packages-old/messaging/CHANGELOG.md diff --git a/packages-exp/messaging-exp/README.md b/packages-old/messaging/README.md similarity index 100% rename from packages-exp/messaging-exp/README.md rename to packages-old/messaging/README.md diff --git a/packages-exp/messaging-exp/karma.conf.js b/packages-old/messaging/karma.conf.js similarity index 100% rename from packages-exp/messaging-exp/karma.conf.js rename to packages-old/messaging/karma.conf.js diff --git a/packages/messaging/package.json b/packages-old/messaging/package.json similarity index 100% rename from packages/messaging/package.json rename to packages-old/messaging/package.json diff --git a/packages/messaging/rollup.config.js b/packages-old/messaging/rollup.config.js similarity index 100% rename from packages/messaging/rollup.config.js rename to packages-old/messaging/rollup.config.js diff --git a/packages/messaging/src/controllers/sw-controller.test.ts b/packages-old/messaging/src/controllers/sw-controller.test.ts similarity index 100% rename from packages/messaging/src/controllers/sw-controller.test.ts rename to packages-old/messaging/src/controllers/sw-controller.test.ts diff --git a/packages/messaging/src/controllers/sw-controller.ts b/packages-old/messaging/src/controllers/sw-controller.ts similarity index 100% rename from packages/messaging/src/controllers/sw-controller.ts rename to packages-old/messaging/src/controllers/sw-controller.ts diff --git a/packages/messaging/src/controllers/window-controller.test.ts b/packages-old/messaging/src/controllers/window-controller.test.ts similarity index 100% rename from packages/messaging/src/controllers/window-controller.test.ts rename to packages-old/messaging/src/controllers/window-controller.test.ts diff --git a/packages/messaging/src/controllers/window-controller.ts b/packages-old/messaging/src/controllers/window-controller.ts similarity index 100% rename from packages/messaging/src/controllers/window-controller.ts rename to packages-old/messaging/src/controllers/window-controller.ts diff --git a/packages/messaging/src/core/api.test.ts b/packages-old/messaging/src/core/api.test.ts similarity index 100% rename from packages/messaging/src/core/api.test.ts rename to packages-old/messaging/src/core/api.test.ts diff --git a/packages/messaging/src/core/api.ts b/packages-old/messaging/src/core/api.ts similarity index 100% rename from packages/messaging/src/core/api.ts rename to packages-old/messaging/src/core/api.ts diff --git a/packages/messaging/src/core/token-management.test.ts b/packages-old/messaging/src/core/token-management.test.ts similarity index 100% rename from packages/messaging/src/core/token-management.test.ts rename to packages-old/messaging/src/core/token-management.test.ts diff --git a/packages/messaging/src/core/token-management.ts b/packages-old/messaging/src/core/token-management.ts similarity index 100% rename from packages/messaging/src/core/token-management.ts rename to packages-old/messaging/src/core/token-management.ts diff --git a/packages-exp/messaging-exp/src/helpers/array-base64-translator.test.ts b/packages-old/messaging/src/helpers/array-base64-translator.test.ts similarity index 100% rename from packages-exp/messaging-exp/src/helpers/array-base64-translator.test.ts rename to packages-old/messaging/src/helpers/array-base64-translator.test.ts diff --git a/packages-exp/messaging-exp/src/helpers/array-base64-translator.ts b/packages-old/messaging/src/helpers/array-base64-translator.ts similarity index 100% rename from packages-exp/messaging-exp/src/helpers/array-base64-translator.ts rename to packages-old/messaging/src/helpers/array-base64-translator.ts diff --git a/packages/messaging/src/helpers/externalizePayload.test.ts b/packages-old/messaging/src/helpers/externalizePayload.test.ts similarity index 100% rename from packages/messaging/src/helpers/externalizePayload.test.ts rename to packages-old/messaging/src/helpers/externalizePayload.test.ts diff --git a/packages/messaging/src/helpers/externalizePayload.ts b/packages-old/messaging/src/helpers/externalizePayload.ts similarity index 100% rename from packages/messaging/src/helpers/externalizePayload.ts rename to packages-old/messaging/src/helpers/externalizePayload.ts diff --git a/packages/messaging/src/helpers/extract-app-config.test.ts b/packages-old/messaging/src/helpers/extract-app-config.test.ts similarity index 100% rename from packages/messaging/src/helpers/extract-app-config.test.ts rename to packages-old/messaging/src/helpers/extract-app-config.test.ts diff --git a/packages/messaging/src/helpers/extract-app-config.ts b/packages-old/messaging/src/helpers/extract-app-config.ts similarity index 100% rename from packages/messaging/src/helpers/extract-app-config.ts rename to packages-old/messaging/src/helpers/extract-app-config.ts diff --git a/packages/messaging/src/helpers/idb-manager.test.ts b/packages-old/messaging/src/helpers/idb-manager.test.ts similarity index 100% rename from packages/messaging/src/helpers/idb-manager.test.ts rename to packages-old/messaging/src/helpers/idb-manager.test.ts diff --git a/packages/messaging/src/helpers/idb-manager.ts b/packages-old/messaging/src/helpers/idb-manager.ts similarity index 100% rename from packages/messaging/src/helpers/idb-manager.ts rename to packages-old/messaging/src/helpers/idb-manager.ts diff --git a/packages-exp/messaging-exp/src/helpers/is-console-message.ts b/packages-old/messaging/src/helpers/is-console-message.ts similarity index 100% rename from packages-exp/messaging-exp/src/helpers/is-console-message.ts rename to packages-old/messaging/src/helpers/is-console-message.ts diff --git a/packages-exp/messaging-exp/src/helpers/migrate-old-database.test.ts b/packages-old/messaging/src/helpers/migrate-old-database.test.ts similarity index 100% rename from packages-exp/messaging-exp/src/helpers/migrate-old-database.test.ts rename to packages-old/messaging/src/helpers/migrate-old-database.test.ts diff --git a/packages-exp/messaging-exp/src/helpers/migrate-old-database.ts b/packages-old/messaging/src/helpers/migrate-old-database.ts similarity index 100% rename from packages-exp/messaging-exp/src/helpers/migrate-old-database.ts rename to packages-old/messaging/src/helpers/migrate-old-database.ts diff --git a/packages-exp/messaging-exp/src/helpers/sleep.test.ts b/packages-old/messaging/src/helpers/sleep.test.ts similarity index 100% rename from packages-exp/messaging-exp/src/helpers/sleep.test.ts rename to packages-old/messaging/src/helpers/sleep.test.ts diff --git a/packages-exp/installations-exp/src/util/sleep.ts b/packages-old/messaging/src/helpers/sleep.ts similarity index 100% rename from packages-exp/installations-exp/src/util/sleep.ts rename to packages-old/messaging/src/helpers/sleep.ts diff --git a/packages/messaging/src/index.ts b/packages-old/messaging/src/index.ts similarity index 100% rename from packages/messaging/src/index.ts rename to packages-old/messaging/src/index.ts diff --git a/packages-exp/messaging-exp/src/interfaces/app-config.ts b/packages-old/messaging/src/interfaces/app-config.ts similarity index 100% rename from packages-exp/messaging-exp/src/interfaces/app-config.ts rename to packages-old/messaging/src/interfaces/app-config.ts diff --git a/packages/messaging/src/interfaces/internal-dependencies.ts b/packages-old/messaging/src/interfaces/internal-dependencies.ts similarity index 100% rename from packages/messaging/src/interfaces/internal-dependencies.ts rename to packages-old/messaging/src/interfaces/internal-dependencies.ts diff --git a/packages-exp/messaging-exp/src/interfaces/internal-message-payload.ts b/packages-old/messaging/src/interfaces/internal-message-payload.ts similarity index 100% rename from packages-exp/messaging-exp/src/interfaces/internal-message-payload.ts rename to packages-old/messaging/src/interfaces/internal-message-payload.ts diff --git a/packages-exp/messaging-exp/src/interfaces/token-details.ts b/packages-old/messaging/src/interfaces/token-details.ts similarity index 100% rename from packages-exp/messaging-exp/src/interfaces/token-details.ts rename to packages-old/messaging/src/interfaces/token-details.ts diff --git a/packages/messaging/src/testing/compare-headers.test.ts b/packages-old/messaging/src/testing/compare-headers.test.ts similarity index 100% rename from packages/messaging/src/testing/compare-headers.test.ts rename to packages-old/messaging/src/testing/compare-headers.test.ts diff --git a/packages/messaging/src/testing/compare-headers.ts b/packages-old/messaging/src/testing/compare-headers.ts similarity index 100% rename from packages/messaging/src/testing/compare-headers.ts rename to packages-old/messaging/src/testing/compare-headers.ts diff --git a/packages/messaging/src/testing/fakes/firebase-dependencies.ts b/packages-old/messaging/src/testing/fakes/firebase-dependencies.ts similarity index 100% rename from packages/messaging/src/testing/fakes/firebase-dependencies.ts rename to packages-old/messaging/src/testing/fakes/firebase-dependencies.ts diff --git a/packages/messaging/src/testing/fakes/service-worker.ts b/packages-old/messaging/src/testing/fakes/service-worker.ts similarity index 100% rename from packages/messaging/src/testing/fakes/service-worker.ts rename to packages-old/messaging/src/testing/fakes/service-worker.ts diff --git a/packages-exp/messaging-exp/src/testing/fakes/token-details.ts b/packages-old/messaging/src/testing/fakes/token-details.ts similarity index 100% rename from packages-exp/messaging-exp/src/testing/fakes/token-details.ts rename to packages-old/messaging/src/testing/fakes/token-details.ts diff --git a/packages/messaging/src/testing/setup.ts b/packages-old/messaging/src/testing/setup.ts similarity index 100% rename from packages/messaging/src/testing/setup.ts rename to packages-old/messaging/src/testing/setup.ts diff --git a/packages-exp/messaging-exp/src/testing/sinon-types.ts b/packages-old/messaging/src/testing/sinon-types.ts similarity index 100% rename from packages-exp/messaging-exp/src/testing/sinon-types.ts rename to packages-old/messaging/src/testing/sinon-types.ts diff --git a/packages/messaging/src/util/constants.ts b/packages-old/messaging/src/util/constants.ts similarity index 100% rename from packages/messaging/src/util/constants.ts rename to packages-old/messaging/src/util/constants.ts diff --git a/packages/messaging/src/util/errors.ts b/packages-old/messaging/src/util/errors.ts similarity index 100% rename from packages/messaging/src/util/errors.ts rename to packages-old/messaging/src/util/errors.ts diff --git a/packages/messaging/src/util/sw-types.ts b/packages-old/messaging/src/util/sw-types.ts similarity index 100% rename from packages/messaging/src/util/sw-types.ts rename to packages-old/messaging/src/util/sw-types.ts diff --git a/packages-exp/messaging-compat/tsconfig.json b/packages-old/messaging/tsconfig.json similarity index 100% rename from packages-exp/messaging-compat/tsconfig.json rename to packages-old/messaging/tsconfig.json diff --git a/packages/performance/.eslintrc.js b/packages-old/performance/.eslintrc.js similarity index 100% rename from packages/performance/.eslintrc.js rename to packages-old/performance/.eslintrc.js diff --git a/packages/performance/CHANGELOG.md b/packages-old/performance/CHANGELOG.md similarity index 100% rename from packages/performance/CHANGELOG.md rename to packages-old/performance/CHANGELOG.md diff --git a/packages/performance/README.md b/packages-old/performance/README.md similarity index 100% rename from packages/performance/README.md rename to packages-old/performance/README.md diff --git a/packages/performance/index.ts b/packages-old/performance/index.ts similarity index 100% rename from packages/performance/index.ts rename to packages-old/performance/index.ts diff --git a/packages/performance/karma.conf.js b/packages-old/performance/karma.conf.js similarity index 100% rename from packages/performance/karma.conf.js rename to packages-old/performance/karma.conf.js diff --git a/packages/performance/package.json b/packages-old/performance/package.json similarity index 100% rename from packages/performance/package.json rename to packages-old/performance/package.json diff --git a/packages/performance/rollup.config.js b/packages-old/performance/rollup.config.js similarity index 100% rename from packages/performance/rollup.config.js rename to packages-old/performance/rollup.config.js diff --git a/packages/performance/src/constants.ts b/packages-old/performance/src/constants.ts similarity index 100% rename from packages/performance/src/constants.ts rename to packages-old/performance/src/constants.ts diff --git a/packages/performance/src/controllers/perf.test.ts b/packages-old/performance/src/controllers/perf.test.ts similarity index 100% rename from packages/performance/src/controllers/perf.test.ts rename to packages-old/performance/src/controllers/perf.test.ts diff --git a/packages/performance/src/controllers/perf.ts b/packages-old/performance/src/controllers/perf.ts similarity index 100% rename from packages/performance/src/controllers/perf.ts rename to packages-old/performance/src/controllers/perf.ts diff --git a/packages/performance/src/resources/network_request.test.ts b/packages-old/performance/src/resources/network_request.test.ts similarity index 100% rename from packages/performance/src/resources/network_request.test.ts rename to packages-old/performance/src/resources/network_request.test.ts diff --git a/packages/performance/src/resources/network_request.ts b/packages-old/performance/src/resources/network_request.ts similarity index 100% rename from packages/performance/src/resources/network_request.ts rename to packages-old/performance/src/resources/network_request.ts diff --git a/packages/performance/src/resources/trace.test.ts b/packages-old/performance/src/resources/trace.test.ts similarity index 100% rename from packages/performance/src/resources/trace.test.ts rename to packages-old/performance/src/resources/trace.test.ts diff --git a/packages/performance/src/resources/trace.ts b/packages-old/performance/src/resources/trace.ts similarity index 100% rename from packages/performance/src/resources/trace.ts rename to packages-old/performance/src/resources/trace.ts diff --git a/packages/performance/src/services/api_service.test.ts b/packages-old/performance/src/services/api_service.test.ts similarity index 100% rename from packages/performance/src/services/api_service.test.ts rename to packages-old/performance/src/services/api_service.test.ts diff --git a/packages/performance/src/services/api_service.ts b/packages-old/performance/src/services/api_service.ts similarity index 100% rename from packages/performance/src/services/api_service.ts rename to packages-old/performance/src/services/api_service.ts diff --git a/packages/performance/src/services/iid_service.test.ts b/packages-old/performance/src/services/iid_service.test.ts similarity index 100% rename from packages/performance/src/services/iid_service.test.ts rename to packages-old/performance/src/services/iid_service.test.ts diff --git a/packages/performance/src/services/iid_service.ts b/packages-old/performance/src/services/iid_service.ts similarity index 100% rename from packages/performance/src/services/iid_service.ts rename to packages-old/performance/src/services/iid_service.ts diff --git a/packages/performance/src/services/initialization_service.test.ts b/packages-old/performance/src/services/initialization_service.test.ts similarity index 100% rename from packages/performance/src/services/initialization_service.test.ts rename to packages-old/performance/src/services/initialization_service.test.ts diff --git a/packages/performance/src/services/initialization_service.ts b/packages-old/performance/src/services/initialization_service.ts similarity index 100% rename from packages/performance/src/services/initialization_service.ts rename to packages-old/performance/src/services/initialization_service.ts diff --git a/packages/performance/src/services/oob_resources_service.test.ts b/packages-old/performance/src/services/oob_resources_service.test.ts similarity index 100% rename from packages/performance/src/services/oob_resources_service.test.ts rename to packages-old/performance/src/services/oob_resources_service.test.ts diff --git a/packages/performance/src/services/oob_resources_service.ts b/packages-old/performance/src/services/oob_resources_service.ts similarity index 100% rename from packages/performance/src/services/oob_resources_service.ts rename to packages-old/performance/src/services/oob_resources_service.ts diff --git a/packages/performance/src/services/perf_logger.test.ts b/packages-old/performance/src/services/perf_logger.test.ts similarity index 100% rename from packages/performance/src/services/perf_logger.test.ts rename to packages-old/performance/src/services/perf_logger.test.ts diff --git a/packages/performance/src/services/perf_logger.ts b/packages-old/performance/src/services/perf_logger.ts similarity index 100% rename from packages/performance/src/services/perf_logger.ts rename to packages-old/performance/src/services/perf_logger.ts diff --git a/packages/performance/src/services/remote_config_service.test.ts b/packages-old/performance/src/services/remote_config_service.test.ts similarity index 100% rename from packages/performance/src/services/remote_config_service.test.ts rename to packages-old/performance/src/services/remote_config_service.test.ts diff --git a/packages/performance/src/services/remote_config_service.ts b/packages-old/performance/src/services/remote_config_service.ts similarity index 100% rename from packages/performance/src/services/remote_config_service.ts rename to packages-old/performance/src/services/remote_config_service.ts diff --git a/packages/performance/src/services/settings_service.ts b/packages-old/performance/src/services/settings_service.ts similarity index 100% rename from packages/performance/src/services/settings_service.ts rename to packages-old/performance/src/services/settings_service.ts diff --git a/packages/performance/src/services/transport_service.test.ts b/packages-old/performance/src/services/transport_service.test.ts similarity index 100% rename from packages/performance/src/services/transport_service.test.ts rename to packages-old/performance/src/services/transport_service.test.ts diff --git a/packages/performance/src/services/transport_service.ts b/packages-old/performance/src/services/transport_service.ts similarity index 100% rename from packages/performance/src/services/transport_service.ts rename to packages-old/performance/src/services/transport_service.ts diff --git a/packages/performance/src/utils/attribute_utils.test.ts b/packages-old/performance/src/utils/attribute_utils.test.ts similarity index 100% rename from packages/performance/src/utils/attribute_utils.test.ts rename to packages-old/performance/src/utils/attribute_utils.test.ts diff --git a/packages/performance/src/utils/attributes_utils.ts b/packages-old/performance/src/utils/attributes_utils.ts similarity index 100% rename from packages/performance/src/utils/attributes_utils.ts rename to packages-old/performance/src/utils/attributes_utils.ts diff --git a/packages/performance/src/utils/console_logger.ts b/packages-old/performance/src/utils/console_logger.ts similarity index 100% rename from packages/performance/src/utils/console_logger.ts rename to packages-old/performance/src/utils/console_logger.ts diff --git a/packages/performance/src/utils/errors.ts b/packages-old/performance/src/utils/errors.ts similarity index 100% rename from packages/performance/src/utils/errors.ts rename to packages-old/performance/src/utils/errors.ts diff --git a/packages/performance/src/utils/metric_utils.test.ts b/packages-old/performance/src/utils/metric_utils.test.ts similarity index 100% rename from packages/performance/src/utils/metric_utils.test.ts rename to packages-old/performance/src/utils/metric_utils.test.ts diff --git a/packages/performance/src/utils/metric_utils.ts b/packages-old/performance/src/utils/metric_utils.ts similarity index 100% rename from packages/performance/src/utils/metric_utils.ts rename to packages-old/performance/src/utils/metric_utils.ts diff --git a/packages/performance/src/utils/string_merger.test.ts b/packages-old/performance/src/utils/string_merger.test.ts similarity index 100% rename from packages/performance/src/utils/string_merger.test.ts rename to packages-old/performance/src/utils/string_merger.test.ts diff --git a/packages/performance/src/utils/string_merger.ts b/packages-old/performance/src/utils/string_merger.ts similarity index 100% rename from packages/performance/src/utils/string_merger.ts rename to packages-old/performance/src/utils/string_merger.ts diff --git a/packages/performance/test/setup.ts b/packages-old/performance/test/setup.ts similarity index 100% rename from packages/performance/test/setup.ts rename to packages-old/performance/test/setup.ts diff --git a/packages-exp/performance-exp/tsconfig.json b/packages-old/performance/tsconfig.json similarity index 100% rename from packages-exp/performance-exp/tsconfig.json rename to packages-old/performance/tsconfig.json diff --git a/packages/polyfill/README.md b/packages-old/polyfill/README.md similarity index 100% rename from packages/polyfill/README.md rename to packages-old/polyfill/README.md diff --git a/packages/polyfill/index.ts b/packages-old/polyfill/index.ts similarity index 100% rename from packages/polyfill/index.ts rename to packages-old/polyfill/index.ts diff --git a/packages/polyfill/package.json b/packages-old/polyfill/package.json similarity index 100% rename from packages/polyfill/package.json rename to packages-old/polyfill/package.json diff --git a/packages/polyfill/rollup.config.js b/packages-old/polyfill/rollup.config.js similarity index 100% rename from packages/polyfill/rollup.config.js rename to packages-old/polyfill/rollup.config.js diff --git a/packages/polyfill/tsconfig.json b/packages-old/polyfill/tsconfig.json similarity index 100% rename from packages/polyfill/tsconfig.json rename to packages-old/polyfill/tsconfig.json diff --git a/packages/remote-config/.eslintrc.js b/packages-old/remote-config/.eslintrc.js similarity index 100% rename from packages/remote-config/.eslintrc.js rename to packages-old/remote-config/.eslintrc.js diff --git a/packages-exp/remote-config-exp/.npmignore b/packages-old/remote-config/.npmignore similarity index 100% rename from packages-exp/remote-config-exp/.npmignore rename to packages-old/remote-config/.npmignore diff --git a/packages/remote-config/CHANGELOG.md b/packages-old/remote-config/CHANGELOG.md similarity index 100% rename from packages/remote-config/CHANGELOG.md rename to packages-old/remote-config/CHANGELOG.md diff --git a/packages-exp/remote-config-exp/README.md b/packages-old/remote-config/README.md similarity index 100% rename from packages-exp/remote-config-exp/README.md rename to packages-old/remote-config/README.md diff --git a/packages/remote-config/index.ts b/packages-old/remote-config/index.ts similarity index 100% rename from packages/remote-config/index.ts rename to packages-old/remote-config/index.ts diff --git a/packages-exp/remote-config-exp/karma.conf.js b/packages-old/remote-config/karma.conf.js similarity index 100% rename from packages-exp/remote-config-exp/karma.conf.js rename to packages-old/remote-config/karma.conf.js diff --git a/packages/remote-config/package.json b/packages-old/remote-config/package.json similarity index 100% rename from packages/remote-config/package.json rename to packages-old/remote-config/package.json diff --git a/packages/remote-config/rollup.config.js b/packages-old/remote-config/rollup.config.js similarity index 100% rename from packages/remote-config/rollup.config.js rename to packages-old/remote-config/rollup.config.js diff --git a/packages-exp/remote-config-exp/src/client/caching_client.ts b/packages-old/remote-config/src/client/caching_client.ts similarity index 100% rename from packages-exp/remote-config-exp/src/client/caching_client.ts rename to packages-old/remote-config/src/client/caching_client.ts diff --git a/packages-exp/remote-config-exp/src/client/remote_config_fetch_client.ts b/packages-old/remote-config/src/client/remote_config_fetch_client.ts similarity index 100% rename from packages-exp/remote-config-exp/src/client/remote_config_fetch_client.ts rename to packages-old/remote-config/src/client/remote_config_fetch_client.ts diff --git a/packages/remote-config/src/client/rest_client.ts b/packages-old/remote-config/src/client/rest_client.ts similarity index 100% rename from packages/remote-config/src/client/rest_client.ts rename to packages-old/remote-config/src/client/rest_client.ts diff --git a/packages-exp/remote-config-exp/src/client/retrying_client.ts b/packages-old/remote-config/src/client/retrying_client.ts similarity index 100% rename from packages-exp/remote-config-exp/src/client/retrying_client.ts rename to packages-old/remote-config/src/client/retrying_client.ts diff --git a/packages-exp/remote-config-exp/src/errors.ts b/packages-old/remote-config/src/errors.ts similarity index 100% rename from packages-exp/remote-config-exp/src/errors.ts rename to packages-old/remote-config/src/errors.ts diff --git a/packages-exp/remote-config-exp/src/language.ts b/packages-old/remote-config/src/language.ts similarity index 100% rename from packages-exp/remote-config-exp/src/language.ts rename to packages-old/remote-config/src/language.ts diff --git a/packages/remote-config/src/remote_config.ts b/packages-old/remote-config/src/remote_config.ts similarity index 100% rename from packages/remote-config/src/remote_config.ts rename to packages-old/remote-config/src/remote_config.ts diff --git a/packages-exp/remote-config-exp/src/storage/storage.ts b/packages-old/remote-config/src/storage/storage.ts similarity index 100% rename from packages-exp/remote-config-exp/src/storage/storage.ts rename to packages-old/remote-config/src/storage/storage.ts diff --git a/packages-exp/remote-config-exp/src/storage/storage_cache.ts b/packages-old/remote-config/src/storage/storage_cache.ts similarity index 100% rename from packages-exp/remote-config-exp/src/storage/storage_cache.ts rename to packages-old/remote-config/src/storage/storage_cache.ts diff --git a/packages-exp/remote-config-exp/src/value.ts b/packages-old/remote-config/src/value.ts similarity index 100% rename from packages-exp/remote-config-exp/src/value.ts rename to packages-old/remote-config/src/value.ts diff --git a/packages-exp/remote-config-exp/test/client/caching_client.test.ts b/packages-old/remote-config/test/client/caching_client.test.ts similarity index 100% rename from packages-exp/remote-config-exp/test/client/caching_client.test.ts rename to packages-old/remote-config/test/client/caching_client.test.ts diff --git a/packages-exp/remote-config-exp/test/client/rest_client.test.ts b/packages-old/remote-config/test/client/rest_client.test.ts similarity index 100% rename from packages-exp/remote-config-exp/test/client/rest_client.test.ts rename to packages-old/remote-config/test/client/rest_client.test.ts diff --git a/packages-exp/remote-config-exp/test/client/retrying_client.test.ts b/packages-old/remote-config/test/client/retrying_client.test.ts similarity index 100% rename from packages-exp/remote-config-exp/test/client/retrying_client.test.ts rename to packages-old/remote-config/test/client/retrying_client.test.ts diff --git a/packages-exp/remote-config-exp/test/errors.test.ts b/packages-old/remote-config/test/errors.test.ts similarity index 100% rename from packages-exp/remote-config-exp/test/errors.test.ts rename to packages-old/remote-config/test/errors.test.ts diff --git a/packages-exp/remote-config-exp/test/language.test.ts b/packages-old/remote-config/test/language.test.ts similarity index 100% rename from packages-exp/remote-config-exp/test/language.test.ts rename to packages-old/remote-config/test/language.test.ts diff --git a/packages/remote-config/test/remote_config.test.ts b/packages-old/remote-config/test/remote_config.test.ts similarity index 100% rename from packages/remote-config/test/remote_config.test.ts rename to packages-old/remote-config/test/remote_config.test.ts diff --git a/packages-exp/remote-config-exp/test/setup.ts b/packages-old/remote-config/test/setup.ts similarity index 100% rename from packages-exp/remote-config-exp/test/setup.ts rename to packages-old/remote-config/test/setup.ts diff --git a/packages-exp/remote-config-exp/test/storage/storage.test.ts b/packages-old/remote-config/test/storage/storage.test.ts similarity index 100% rename from packages-exp/remote-config-exp/test/storage/storage.test.ts rename to packages-old/remote-config/test/storage/storage.test.ts diff --git a/packages-exp/remote-config-exp/test/storage/storage_cache.test.ts b/packages-old/remote-config/test/storage/storage_cache.test.ts similarity index 100% rename from packages-exp/remote-config-exp/test/storage/storage_cache.test.ts rename to packages-old/remote-config/test/storage/storage_cache.test.ts diff --git a/packages-exp/remote-config-exp/test/value.test.ts b/packages-old/remote-config/test/value.test.ts similarity index 100% rename from packages-exp/remote-config-exp/test/value.test.ts rename to packages-old/remote-config/test/value.test.ts diff --git a/packages/remote-config/test_app/index.html b/packages-old/remote-config/test_app/index.html similarity index 100% rename from packages/remote-config/test_app/index.html rename to packages-old/remote-config/test_app/index.html diff --git a/packages/remote-config/test_app/index.js b/packages-old/remote-config/test_app/index.js similarity index 100% rename from packages/remote-config/test_app/index.js rename to packages-old/remote-config/test_app/index.js diff --git a/packages-exp/remote-config-exp/tsconfig.json b/packages-old/remote-config/tsconfig.json similarity index 100% rename from packages-exp/remote-config-exp/tsconfig.json rename to packages-old/remote-config/tsconfig.json diff --git a/packages-exp/analytics-exp/.eslintrc.js b/packages/analytics-compat/.eslintrc.js similarity index 100% rename from packages-exp/analytics-exp/.eslintrc.js rename to packages/analytics-compat/.eslintrc.js diff --git a/packages-exp/analytics-exp/karma.conf.js b/packages/analytics-compat/karma.conf.js similarity index 100% rename from packages-exp/analytics-exp/karma.conf.js rename to packages/analytics-compat/karma.conf.js diff --git a/packages-exp/analytics-compat/package.json b/packages/analytics-compat/package.json similarity index 100% rename from packages-exp/analytics-compat/package.json rename to packages/analytics-compat/package.json diff --git a/packages-exp/analytics-compat/rollup.config.js b/packages/analytics-compat/rollup.config.js similarity index 100% rename from packages-exp/analytics-compat/rollup.config.js rename to packages/analytics-compat/rollup.config.js diff --git a/packages-exp/analytics-compat/rollup.config.release.js b/packages/analytics-compat/rollup.config.release.js similarity index 100% rename from packages-exp/analytics-compat/rollup.config.release.js rename to packages/analytics-compat/rollup.config.release.js diff --git a/packages-exp/analytics-compat/rollup.shared.js b/packages/analytics-compat/rollup.shared.js similarity index 100% rename from packages-exp/analytics-compat/rollup.shared.js rename to packages/analytics-compat/rollup.shared.js diff --git a/packages-exp/analytics-compat/src/constants.ts b/packages/analytics-compat/src/constants.ts similarity index 100% rename from packages-exp/analytics-compat/src/constants.ts rename to packages/analytics-compat/src/constants.ts diff --git a/packages-exp/analytics-compat/src/index.ts b/packages/analytics-compat/src/index.ts similarity index 100% rename from packages-exp/analytics-compat/src/index.ts rename to packages/analytics-compat/src/index.ts diff --git a/packages-exp/analytics-compat/src/service.test.ts b/packages/analytics-compat/src/service.test.ts similarity index 100% rename from packages-exp/analytics-compat/src/service.test.ts rename to packages/analytics-compat/src/service.test.ts diff --git a/packages-exp/analytics-compat/src/service.ts b/packages/analytics-compat/src/service.ts similarity index 100% rename from packages-exp/analytics-compat/src/service.ts rename to packages/analytics-compat/src/service.ts diff --git a/packages-exp/firebase-exp/tsconfig.json b/packages/analytics-compat/tsconfig.json similarity index 100% rename from packages-exp/firebase-exp/tsconfig.json rename to packages/analytics-compat/tsconfig.json diff --git a/packages/analytics/.eslintrc.js b/packages/analytics-exp/.eslintrc.js similarity index 100% rename from packages/analytics/.eslintrc.js rename to packages/analytics-exp/.eslintrc.js diff --git a/packages/analytics/README.md b/packages/analytics-exp/README.md similarity index 100% rename from packages/analytics/README.md rename to packages/analytics-exp/README.md diff --git a/packages-exp/analytics-exp/api-extractor.json b/packages/analytics-exp/api-extractor.json similarity index 100% rename from packages-exp/analytics-exp/api-extractor.json rename to packages/analytics-exp/api-extractor.json diff --git a/packages/analytics/karma.conf.js b/packages/analytics-exp/karma.conf.js similarity index 100% rename from packages/analytics/karma.conf.js rename to packages/analytics-exp/karma.conf.js diff --git a/packages/analytics/karma.integration.conf.js b/packages/analytics-exp/karma.integration.conf.js similarity index 100% rename from packages/analytics/karma.integration.conf.js rename to packages/analytics-exp/karma.integration.conf.js diff --git a/packages-exp/analytics-exp/package.json b/packages/analytics-exp/package.json similarity index 100% rename from packages-exp/analytics-exp/package.json rename to packages/analytics-exp/package.json diff --git a/packages-exp/analytics-exp/rollup.config.js b/packages/analytics-exp/rollup.config.js similarity index 100% rename from packages-exp/analytics-exp/rollup.config.js rename to packages/analytics-exp/rollup.config.js diff --git a/packages-exp/analytics-exp/rollup.config.release.js b/packages/analytics-exp/rollup.config.release.js similarity index 100% rename from packages-exp/analytics-exp/rollup.config.release.js rename to packages/analytics-exp/rollup.config.release.js diff --git a/packages-exp/analytics-exp/rollup.shared.js b/packages/analytics-exp/rollup.shared.js similarity index 100% rename from packages-exp/analytics-exp/rollup.shared.js rename to packages/analytics-exp/rollup.shared.js diff --git a/packages-exp/analytics-exp/src/api.test.ts b/packages/analytics-exp/src/api.test.ts similarity index 100% rename from packages-exp/analytics-exp/src/api.test.ts rename to packages/analytics-exp/src/api.test.ts diff --git a/packages-exp/analytics-exp/src/api.ts b/packages/analytics-exp/src/api.ts similarity index 100% rename from packages-exp/analytics-exp/src/api.ts rename to packages/analytics-exp/src/api.ts diff --git a/packages-exp/analytics-exp/src/constants.ts b/packages/analytics-exp/src/constants.ts similarity index 100% rename from packages-exp/analytics-exp/src/constants.ts rename to packages/analytics-exp/src/constants.ts diff --git a/packages-exp/analytics-exp/src/errors.ts b/packages/analytics-exp/src/errors.ts similarity index 100% rename from packages-exp/analytics-exp/src/errors.ts rename to packages/analytics-exp/src/errors.ts diff --git a/packages-exp/analytics-exp/src/factory.ts b/packages/analytics-exp/src/factory.ts similarity index 100% rename from packages-exp/analytics-exp/src/factory.ts rename to packages/analytics-exp/src/factory.ts diff --git a/packages-exp/analytics-exp/src/functions.test.ts b/packages/analytics-exp/src/functions.test.ts similarity index 100% rename from packages-exp/analytics-exp/src/functions.test.ts rename to packages/analytics-exp/src/functions.test.ts diff --git a/packages-exp/analytics-exp/src/functions.ts b/packages/analytics-exp/src/functions.ts similarity index 100% rename from packages-exp/analytics-exp/src/functions.ts rename to packages/analytics-exp/src/functions.ts diff --git a/packages-exp/analytics-exp/src/get-config.test.ts b/packages/analytics-exp/src/get-config.test.ts similarity index 100% rename from packages-exp/analytics-exp/src/get-config.test.ts rename to packages/analytics-exp/src/get-config.test.ts diff --git a/packages-exp/analytics-exp/src/get-config.ts b/packages/analytics-exp/src/get-config.ts similarity index 100% rename from packages-exp/analytics-exp/src/get-config.ts rename to packages/analytics-exp/src/get-config.ts diff --git a/packages-exp/analytics-exp/src/helpers.test.ts b/packages/analytics-exp/src/helpers.test.ts similarity index 100% rename from packages-exp/analytics-exp/src/helpers.test.ts rename to packages/analytics-exp/src/helpers.test.ts diff --git a/packages-exp/analytics-exp/src/helpers.ts b/packages/analytics-exp/src/helpers.ts similarity index 100% rename from packages-exp/analytics-exp/src/helpers.ts rename to packages/analytics-exp/src/helpers.ts diff --git a/packages-exp/analytics-exp/src/index.test.ts b/packages/analytics-exp/src/index.test.ts similarity index 100% rename from packages-exp/analytics-exp/src/index.test.ts rename to packages/analytics-exp/src/index.test.ts diff --git a/packages-exp/analytics-exp/src/index.ts b/packages/analytics-exp/src/index.ts similarity index 100% rename from packages-exp/analytics-exp/src/index.ts rename to packages/analytics-exp/src/index.ts diff --git a/packages-exp/analytics-exp/src/initialize-analytics.test.ts b/packages/analytics-exp/src/initialize-analytics.test.ts similarity index 100% rename from packages-exp/analytics-exp/src/initialize-analytics.test.ts rename to packages/analytics-exp/src/initialize-analytics.test.ts diff --git a/packages-exp/analytics-exp/src/initialize-analytics.ts b/packages/analytics-exp/src/initialize-analytics.ts similarity index 100% rename from packages-exp/analytics-exp/src/initialize-analytics.ts rename to packages/analytics-exp/src/initialize-analytics.ts diff --git a/packages/analytics/src/logger.ts b/packages/analytics-exp/src/logger.ts similarity index 100% rename from packages/analytics/src/logger.ts rename to packages/analytics-exp/src/logger.ts diff --git a/packages-exp/analytics-exp/src/public-types.ts b/packages/analytics-exp/src/public-types.ts similarity index 100% rename from packages-exp/analytics-exp/src/public-types.ts rename to packages/analytics-exp/src/public-types.ts diff --git a/packages-exp/analytics-exp/src/types.ts b/packages/analytics-exp/src/types.ts similarity index 100% rename from packages-exp/analytics-exp/src/types.ts rename to packages/analytics-exp/src/types.ts diff --git a/packages-exp/analytics-exp/testing/get-fake-firebase-services.ts b/packages/analytics-exp/testing/get-fake-firebase-services.ts similarity index 100% rename from packages-exp/analytics-exp/testing/get-fake-firebase-services.ts rename to packages/analytics-exp/testing/get-fake-firebase-services.ts diff --git a/packages/analytics/testing/gtag-script-util.ts b/packages/analytics-exp/testing/gtag-script-util.ts similarity index 100% rename from packages/analytics/testing/gtag-script-util.ts rename to packages/analytics-exp/testing/gtag-script-util.ts diff --git a/packages-exp/analytics-exp/testing/integration-tests/integration.ts b/packages/analytics-exp/testing/integration-tests/integration.ts similarity index 100% rename from packages-exp/analytics-exp/testing/integration-tests/integration.ts rename to packages/analytics-exp/testing/integration-tests/integration.ts diff --git a/packages/analytics/testing/setup.ts b/packages/analytics-exp/testing/setup.ts similarity index 100% rename from packages/analytics/testing/setup.ts rename to packages/analytics-exp/testing/setup.ts diff --git a/packages-exp/app-check-compat/tsconfig.json b/packages/analytics-exp/tsconfig.json similarity index 100% rename from packages-exp/app-check-compat/tsconfig.json rename to packages/analytics-exp/tsconfig.json diff --git a/packages-exp/app-check-compat/.eslintrc.js b/packages/app-check-compat/.eslintrc.js similarity index 100% rename from packages-exp/app-check-compat/.eslintrc.js rename to packages/app-check-compat/.eslintrc.js diff --git a/packages-exp/app-check-compat/README.md b/packages/app-check-compat/README.md similarity index 100% rename from packages-exp/app-check-compat/README.md rename to packages/app-check-compat/README.md diff --git a/packages-exp/app-check-compat/karma.conf.js b/packages/app-check-compat/karma.conf.js similarity index 100% rename from packages-exp/app-check-compat/karma.conf.js rename to packages/app-check-compat/karma.conf.js diff --git a/packages-exp/app-check-compat/package.json b/packages/app-check-compat/package.json similarity index 100% rename from packages-exp/app-check-compat/package.json rename to packages/app-check-compat/package.json diff --git a/packages-exp/app-check-compat/rollup.config.js b/packages/app-check-compat/rollup.config.js similarity index 100% rename from packages-exp/app-check-compat/rollup.config.js rename to packages/app-check-compat/rollup.config.js diff --git a/packages-exp/app-check-compat/rollup.config.release.js b/packages/app-check-compat/rollup.config.release.js similarity index 100% rename from packages-exp/app-check-compat/rollup.config.release.js rename to packages/app-check-compat/rollup.config.release.js diff --git a/packages-exp/app-check-compat/rollup.shared.js b/packages/app-check-compat/rollup.shared.js similarity index 100% rename from packages-exp/app-check-compat/rollup.shared.js rename to packages/app-check-compat/rollup.shared.js diff --git a/packages-exp/app-check-compat/src/errors.ts b/packages/app-check-compat/src/errors.ts similarity index 100% rename from packages-exp/app-check-compat/src/errors.ts rename to packages/app-check-compat/src/errors.ts diff --git a/packages-exp/app-check-compat/src/index.ts b/packages/app-check-compat/src/index.ts similarity index 100% rename from packages-exp/app-check-compat/src/index.ts rename to packages/app-check-compat/src/index.ts diff --git a/packages-exp/app-check-compat/src/service.test.ts b/packages/app-check-compat/src/service.test.ts similarity index 100% rename from packages-exp/app-check-compat/src/service.test.ts rename to packages/app-check-compat/src/service.test.ts diff --git a/packages-exp/app-check-compat/src/service.ts b/packages/app-check-compat/src/service.ts similarity index 100% rename from packages-exp/app-check-compat/src/service.ts rename to packages/app-check-compat/src/service.ts diff --git a/packages-exp/app-check-exp/tsconfig.json b/packages/app-check-compat/tsconfig.json similarity index 100% rename from packages-exp/app-check-exp/tsconfig.json rename to packages/app-check-compat/tsconfig.json diff --git a/packages-exp/app-check-exp/.eslintrc.js b/packages/app-check-exp/.eslintrc.js similarity index 100% rename from packages-exp/app-check-exp/.eslintrc.js rename to packages/app-check-exp/.eslintrc.js diff --git a/packages-exp/app-check-exp/README.md b/packages/app-check-exp/README.md similarity index 100% rename from packages-exp/app-check-exp/README.md rename to packages/app-check-exp/README.md diff --git a/packages-exp/app-check-exp/api-extractor.json b/packages/app-check-exp/api-extractor.json similarity index 100% rename from packages-exp/app-check-exp/api-extractor.json rename to packages/app-check-exp/api-extractor.json diff --git a/packages-exp/app-check-exp/karma.conf.js b/packages/app-check-exp/karma.conf.js similarity index 100% rename from packages-exp/app-check-exp/karma.conf.js rename to packages/app-check-exp/karma.conf.js diff --git a/packages-exp/app-check-exp/package.json b/packages/app-check-exp/package.json similarity index 100% rename from packages-exp/app-check-exp/package.json rename to packages/app-check-exp/package.json diff --git a/packages-exp/app-check-exp/rollup.config.js b/packages/app-check-exp/rollup.config.js similarity index 100% rename from packages-exp/app-check-exp/rollup.config.js rename to packages/app-check-exp/rollup.config.js diff --git a/packages-exp/app-check-exp/rollup.config.release.js b/packages/app-check-exp/rollup.config.release.js similarity index 100% rename from packages-exp/app-check-exp/rollup.config.release.js rename to packages/app-check-exp/rollup.config.release.js diff --git a/packages-exp/app-check-exp/rollup.shared.js b/packages/app-check-exp/rollup.shared.js similarity index 100% rename from packages-exp/app-check-exp/rollup.shared.js rename to packages/app-check-exp/rollup.shared.js diff --git a/packages-exp/app-check-exp/src/api.test.ts b/packages/app-check-exp/src/api.test.ts similarity index 100% rename from packages-exp/app-check-exp/src/api.test.ts rename to packages/app-check-exp/src/api.test.ts diff --git a/packages-exp/app-check-exp/src/api.ts b/packages/app-check-exp/src/api.ts similarity index 100% rename from packages-exp/app-check-exp/src/api.ts rename to packages/app-check-exp/src/api.ts diff --git a/packages-exp/app-check-exp/src/client.test.ts b/packages/app-check-exp/src/client.test.ts similarity index 100% rename from packages-exp/app-check-exp/src/client.test.ts rename to packages/app-check-exp/src/client.test.ts diff --git a/packages-exp/app-check-exp/src/client.ts b/packages/app-check-exp/src/client.ts similarity index 100% rename from packages-exp/app-check-exp/src/client.ts rename to packages/app-check-exp/src/client.ts diff --git a/packages/app-check/src/constants.ts b/packages/app-check-exp/src/constants.ts similarity index 100% rename from packages/app-check/src/constants.ts rename to packages/app-check-exp/src/constants.ts diff --git a/packages/app-check/src/debug.test.ts b/packages/app-check-exp/src/debug.test.ts similarity index 100% rename from packages/app-check/src/debug.test.ts rename to packages/app-check-exp/src/debug.test.ts diff --git a/packages/app-check/src/debug.ts b/packages/app-check-exp/src/debug.ts similarity index 100% rename from packages/app-check/src/debug.ts rename to packages/app-check-exp/src/debug.ts diff --git a/packages-exp/app-check-exp/src/errors.ts b/packages/app-check-exp/src/errors.ts similarity index 100% rename from packages-exp/app-check-exp/src/errors.ts rename to packages/app-check-exp/src/errors.ts diff --git a/packages-exp/app-check-exp/src/factory.ts b/packages/app-check-exp/src/factory.ts similarity index 100% rename from packages-exp/app-check-exp/src/factory.ts rename to packages/app-check-exp/src/factory.ts diff --git a/packages-exp/app-check-exp/src/index.ts b/packages/app-check-exp/src/index.ts similarity index 100% rename from packages-exp/app-check-exp/src/index.ts rename to packages/app-check-exp/src/index.ts diff --git a/packages-exp/app-check-exp/src/indexeddb.ts b/packages/app-check-exp/src/indexeddb.ts similarity index 100% rename from packages-exp/app-check-exp/src/indexeddb.ts rename to packages/app-check-exp/src/indexeddb.ts diff --git a/packages-exp/app-check-exp/src/internal-api.test.ts b/packages/app-check-exp/src/internal-api.test.ts similarity index 100% rename from packages-exp/app-check-exp/src/internal-api.test.ts rename to packages/app-check-exp/src/internal-api.test.ts diff --git a/packages-exp/app-check-exp/src/internal-api.ts b/packages/app-check-exp/src/internal-api.ts similarity index 100% rename from packages-exp/app-check-exp/src/internal-api.ts rename to packages/app-check-exp/src/internal-api.ts diff --git a/packages/app-check/src/logger.ts b/packages/app-check-exp/src/logger.ts similarity index 100% rename from packages/app-check/src/logger.ts rename to packages/app-check-exp/src/logger.ts diff --git a/packages/app-check/src/proactive-refresh.test.ts b/packages/app-check-exp/src/proactive-refresh.test.ts similarity index 100% rename from packages/app-check/src/proactive-refresh.test.ts rename to packages/app-check-exp/src/proactive-refresh.test.ts diff --git a/packages/app-check/src/proactive-refresh.ts b/packages/app-check-exp/src/proactive-refresh.ts similarity index 100% rename from packages/app-check/src/proactive-refresh.ts rename to packages/app-check-exp/src/proactive-refresh.ts diff --git a/packages-exp/app-check-exp/src/providers.ts b/packages/app-check-exp/src/providers.ts similarity index 100% rename from packages-exp/app-check-exp/src/providers.ts rename to packages/app-check-exp/src/providers.ts diff --git a/packages-exp/app-check-exp/src/public-types.ts b/packages/app-check-exp/src/public-types.ts similarity index 100% rename from packages-exp/app-check-exp/src/public-types.ts rename to packages/app-check-exp/src/public-types.ts diff --git a/packages-exp/app-check-exp/src/recaptcha.test.ts b/packages/app-check-exp/src/recaptcha.test.ts similarity index 100% rename from packages-exp/app-check-exp/src/recaptcha.test.ts rename to packages/app-check-exp/src/recaptcha.test.ts diff --git a/packages-exp/app-check-exp/src/recaptcha.ts b/packages/app-check-exp/src/recaptcha.ts similarity index 100% rename from packages-exp/app-check-exp/src/recaptcha.ts rename to packages/app-check-exp/src/recaptcha.ts diff --git a/packages-exp/app-check-exp/src/state.ts b/packages/app-check-exp/src/state.ts similarity index 100% rename from packages-exp/app-check-exp/src/state.ts rename to packages/app-check-exp/src/state.ts diff --git a/packages/app-check/src/storage.test.ts b/packages/app-check-exp/src/storage.test.ts similarity index 100% rename from packages/app-check/src/storage.test.ts rename to packages/app-check-exp/src/storage.test.ts diff --git a/packages-exp/app-check-exp/src/storage.ts b/packages/app-check-exp/src/storage.ts similarity index 100% rename from packages-exp/app-check-exp/src/storage.ts rename to packages/app-check-exp/src/storage.ts diff --git a/packages-exp/app-check-exp/src/types.ts b/packages/app-check-exp/src/types.ts similarity index 100% rename from packages-exp/app-check-exp/src/types.ts rename to packages/app-check-exp/src/types.ts diff --git a/packages-exp/app-check-exp/src/util.ts b/packages/app-check-exp/src/util.ts similarity index 100% rename from packages-exp/app-check-exp/src/util.ts rename to packages/app-check-exp/src/util.ts diff --git a/packages/app-check/test/setup.ts b/packages/app-check-exp/test/setup.ts similarity index 100% rename from packages/app-check/test/setup.ts rename to packages/app-check-exp/test/setup.ts diff --git a/packages-exp/app-check-exp/test/util.ts b/packages/app-check-exp/test/util.ts similarity index 100% rename from packages-exp/app-check-exp/test/util.ts rename to packages/app-check-exp/test/util.ts diff --git a/packages/analytics/tsconfig.json b/packages/app-check-exp/tsconfig.json similarity index 100% rename from packages/analytics/tsconfig.json rename to packages/app-check-exp/tsconfig.json diff --git a/packages-exp/app-exp/.eslintrc.js b/packages/app-compat/.eslintrc.js similarity index 100% rename from packages-exp/app-exp/.eslintrc.js rename to packages/app-compat/.eslintrc.js diff --git a/packages-exp/app-compat/README.md b/packages/app-compat/README.md similarity index 100% rename from packages-exp/app-compat/README.md rename to packages/app-compat/README.md diff --git a/packages-exp/app-compat/karma.conf.js b/packages/app-compat/karma.conf.js similarity index 100% rename from packages-exp/app-compat/karma.conf.js rename to packages/app-compat/karma.conf.js diff --git a/packages-exp/app-compat/package.json b/packages/app-compat/package.json similarity index 100% rename from packages-exp/app-compat/package.json rename to packages/app-compat/package.json diff --git a/packages-exp/app-compat/rollup.config.js b/packages/app-compat/rollup.config.js similarity index 100% rename from packages-exp/app-compat/rollup.config.js rename to packages/app-compat/rollup.config.js diff --git a/packages-exp/app-compat/rollup.config.release.js b/packages/app-compat/rollup.config.release.js similarity index 100% rename from packages-exp/app-compat/rollup.config.release.js rename to packages/app-compat/rollup.config.release.js diff --git a/packages-exp/app-compat/src/errors.ts b/packages/app-compat/src/errors.ts similarity index 100% rename from packages-exp/app-compat/src/errors.ts rename to packages/app-compat/src/errors.ts diff --git a/packages-exp/app-compat/src/firebaseApp.ts b/packages/app-compat/src/firebaseApp.ts similarity index 100% rename from packages-exp/app-compat/src/firebaseApp.ts rename to packages/app-compat/src/firebaseApp.ts diff --git a/packages-exp/app-compat/src/firebaseNamespace.ts b/packages/app-compat/src/firebaseNamespace.ts similarity index 100% rename from packages-exp/app-compat/src/firebaseNamespace.ts rename to packages/app-compat/src/firebaseNamespace.ts diff --git a/packages-exp/app-compat/src/firebaseNamespaceCore.ts b/packages/app-compat/src/firebaseNamespaceCore.ts similarity index 100% rename from packages-exp/app-compat/src/firebaseNamespaceCore.ts rename to packages/app-compat/src/firebaseNamespaceCore.ts diff --git a/packages-exp/app-compat/src/index.lite.ts b/packages/app-compat/src/index.lite.ts similarity index 100% rename from packages-exp/app-compat/src/index.lite.ts rename to packages/app-compat/src/index.lite.ts diff --git a/packages-exp/app-compat/src/index.ts b/packages/app-compat/src/index.ts similarity index 100% rename from packages-exp/app-compat/src/index.ts rename to packages/app-compat/src/index.ts diff --git a/packages-exp/app-compat/src/lite/firebaseAppLite.ts b/packages/app-compat/src/lite/firebaseAppLite.ts similarity index 100% rename from packages-exp/app-compat/src/lite/firebaseAppLite.ts rename to packages/app-compat/src/lite/firebaseAppLite.ts diff --git a/packages-exp/app-compat/src/lite/firebaseNamespaceLite.ts b/packages/app-compat/src/lite/firebaseNamespaceLite.ts similarity index 100% rename from packages-exp/app-compat/src/lite/firebaseNamespaceLite.ts rename to packages/app-compat/src/lite/firebaseNamespaceLite.ts diff --git a/packages-exp/app-compat/src/logger.ts b/packages/app-compat/src/logger.ts similarity index 100% rename from packages-exp/app-compat/src/logger.ts rename to packages/app-compat/src/logger.ts diff --git a/packages-exp/app-compat/src/public-types.ts b/packages/app-compat/src/public-types.ts similarity index 100% rename from packages-exp/app-compat/src/public-types.ts rename to packages/app-compat/src/public-types.ts diff --git a/packages-exp/app-compat/src/registerCoreComponents.ts b/packages/app-compat/src/registerCoreComponents.ts similarity index 100% rename from packages-exp/app-compat/src/registerCoreComponents.ts rename to packages/app-compat/src/registerCoreComponents.ts diff --git a/packages-exp/app-compat/src/types.ts b/packages/app-compat/src/types.ts similarity index 100% rename from packages-exp/app-compat/src/types.ts rename to packages/app-compat/src/types.ts diff --git a/packages-exp/app-compat/test/firebaseAppCompat.test.ts b/packages/app-compat/test/firebaseAppCompat.test.ts similarity index 100% rename from packages-exp/app-compat/test/firebaseAppCompat.test.ts rename to packages/app-compat/test/firebaseAppCompat.test.ts diff --git a/packages-exp/app-exp/test/setup.ts b/packages/app-compat/test/setup.ts similarity index 100% rename from packages-exp/app-exp/test/setup.ts rename to packages/app-compat/test/setup.ts diff --git a/packages-exp/app-compat/test/util.ts b/packages/app-compat/test/util.ts similarity index 100% rename from packages-exp/app-compat/test/util.ts rename to packages/app-compat/test/util.ts diff --git a/packages-exp/app-compat/tsconfig.json b/packages/app-compat/tsconfig.json similarity index 100% rename from packages-exp/app-compat/tsconfig.json rename to packages/app-compat/tsconfig.json diff --git a/packages-exp/firebase-exp/.eslintrc.js b/packages/app-exp/.eslintrc.js similarity index 100% rename from packages-exp/firebase-exp/.eslintrc.js rename to packages/app-exp/.eslintrc.js diff --git a/packages-exp/app-exp/README.md b/packages/app-exp/README.md similarity index 100% rename from packages-exp/app-exp/README.md rename to packages/app-exp/README.md diff --git a/packages-exp/app-exp/api-extractor.json b/packages/app-exp/api-extractor.json similarity index 100% rename from packages-exp/app-exp/api-extractor.json rename to packages/app-exp/api-extractor.json diff --git a/packages-exp/app-exp/karma.conf.js b/packages/app-exp/karma.conf.js similarity index 100% rename from packages-exp/app-exp/karma.conf.js rename to packages/app-exp/karma.conf.js diff --git a/packages-exp/app-exp/package.json b/packages/app-exp/package.json similarity index 100% rename from packages-exp/app-exp/package.json rename to packages/app-exp/package.json diff --git a/packages-exp/app-exp/rollup.config.js b/packages/app-exp/rollup.config.js similarity index 100% rename from packages-exp/app-exp/rollup.config.js rename to packages/app-exp/rollup.config.js diff --git a/packages-exp/app-exp/rollup.config.release.js b/packages/app-exp/rollup.config.release.js similarity index 100% rename from packages-exp/app-exp/rollup.config.release.js rename to packages/app-exp/rollup.config.release.js diff --git a/packages-exp/app-exp/rollup.shared.js b/packages/app-exp/rollup.shared.js similarity index 100% rename from packages-exp/app-exp/rollup.shared.js rename to packages/app-exp/rollup.shared.js diff --git a/packages-exp/app-exp/src/api.test.ts b/packages/app-exp/src/api.test.ts similarity index 100% rename from packages-exp/app-exp/src/api.test.ts rename to packages/app-exp/src/api.test.ts diff --git a/packages-exp/app-exp/src/api.ts b/packages/app-exp/src/api.ts similarity index 100% rename from packages-exp/app-exp/src/api.ts rename to packages/app-exp/src/api.ts diff --git a/packages-exp/app-exp/src/constants.ts b/packages/app-exp/src/constants.ts similarity index 100% rename from packages-exp/app-exp/src/constants.ts rename to packages/app-exp/src/constants.ts diff --git a/packages-exp/app-exp/src/errors.ts b/packages/app-exp/src/errors.ts similarity index 100% rename from packages-exp/app-exp/src/errors.ts rename to packages/app-exp/src/errors.ts diff --git a/packages-exp/app-exp/src/firebaseApp.test.ts b/packages/app-exp/src/firebaseApp.test.ts similarity index 100% rename from packages-exp/app-exp/src/firebaseApp.test.ts rename to packages/app-exp/src/firebaseApp.test.ts diff --git a/packages-exp/app-exp/src/firebaseApp.ts b/packages/app-exp/src/firebaseApp.ts similarity index 100% rename from packages-exp/app-exp/src/firebaseApp.ts rename to packages/app-exp/src/firebaseApp.ts diff --git a/packages-exp/app-exp/src/index.ts b/packages/app-exp/src/index.ts similarity index 100% rename from packages-exp/app-exp/src/index.ts rename to packages/app-exp/src/index.ts diff --git a/packages-exp/app-exp/src/internal.test.ts b/packages/app-exp/src/internal.test.ts similarity index 100% rename from packages-exp/app-exp/src/internal.test.ts rename to packages/app-exp/src/internal.test.ts diff --git a/packages-exp/app-exp/src/internal.ts b/packages/app-exp/src/internal.ts similarity index 100% rename from packages-exp/app-exp/src/internal.ts rename to packages/app-exp/src/internal.ts diff --git a/packages/app/src/logger.ts b/packages/app-exp/src/logger.ts similarity index 100% rename from packages/app/src/logger.ts rename to packages/app-exp/src/logger.ts diff --git a/packages-exp/app-exp/src/platformLoggerService.test.ts b/packages/app-exp/src/platformLoggerService.test.ts similarity index 100% rename from packages-exp/app-exp/src/platformLoggerService.test.ts rename to packages/app-exp/src/platformLoggerService.test.ts diff --git a/packages-exp/app-exp/src/platformLoggerService.ts b/packages/app-exp/src/platformLoggerService.ts similarity index 100% rename from packages-exp/app-exp/src/platformLoggerService.ts rename to packages/app-exp/src/platformLoggerService.ts diff --git a/packages-exp/app-exp/src/public-types.ts b/packages/app-exp/src/public-types.ts similarity index 100% rename from packages-exp/app-exp/src/public-types.ts rename to packages/app-exp/src/public-types.ts diff --git a/packages-exp/app-exp/src/registerCoreComponents.ts b/packages/app-exp/src/registerCoreComponents.ts similarity index 100% rename from packages-exp/app-exp/src/registerCoreComponents.ts rename to packages/app-exp/src/registerCoreComponents.ts diff --git a/packages-exp/app-exp/src/types.ts b/packages/app-exp/src/types.ts similarity index 100% rename from packages-exp/app-exp/src/types.ts rename to packages/app-exp/src/types.ts diff --git a/packages-exp/performance-compat/test/setup.ts b/packages/app-exp/test/setup.ts similarity index 100% rename from packages-exp/performance-compat/test/setup.ts rename to packages/app-exp/test/setup.ts diff --git a/packages-exp/app-exp/test/util.ts b/packages/app-exp/test/util.ts similarity index 100% rename from packages-exp/app-exp/test/util.ts rename to packages/app-exp/test/util.ts diff --git a/packages-exp/app-exp/tsconfig.json b/packages/app-exp/tsconfig.json similarity index 100% rename from packages-exp/app-exp/tsconfig.json rename to packages/app-exp/tsconfig.json diff --git a/packages-exp/auth-compat-exp/.eslintrc.js b/packages/auth-compat-exp/.eslintrc.js similarity index 100% rename from packages-exp/auth-compat-exp/.eslintrc.js rename to packages/auth-compat-exp/.eslintrc.js diff --git a/packages-exp/auth-compat-exp/README.md b/packages/auth-compat-exp/README.md similarity index 100% rename from packages-exp/auth-compat-exp/README.md rename to packages/auth-compat-exp/README.md diff --git a/packages-exp/auth-compat-exp/demo/.eslintignore b/packages/auth-compat-exp/demo/.eslintignore similarity index 100% rename from packages-exp/auth-compat-exp/demo/.eslintignore rename to packages/auth-compat-exp/demo/.eslintignore diff --git a/packages-exp/auth-compat-exp/demo/.eslintrc.js b/packages/auth-compat-exp/demo/.eslintrc.js similarity index 100% rename from packages-exp/auth-compat-exp/demo/.eslintrc.js rename to packages/auth-compat-exp/demo/.eslintrc.js diff --git a/packages-exp/auth-compat-exp/demo/.gitignore b/packages/auth-compat-exp/demo/.gitignore similarity index 100% rename from packages-exp/auth-compat-exp/demo/.gitignore rename to packages/auth-compat-exp/demo/.gitignore diff --git a/packages-exp/auth-compat-exp/demo/README.md b/packages/auth-compat-exp/demo/README.md similarity index 100% rename from packages-exp/auth-compat-exp/demo/README.md rename to packages/auth-compat-exp/demo/README.md diff --git a/packages-exp/auth-exp/demo/database.rules.json b/packages/auth-compat-exp/demo/database.rules.json similarity index 100% rename from packages-exp/auth-exp/demo/database.rules.json rename to packages/auth-compat-exp/demo/database.rules.json diff --git a/packages-exp/auth-compat-exp/demo/firebase.json b/packages/auth-compat-exp/demo/firebase.json similarity index 100% rename from packages-exp/auth-compat-exp/demo/firebase.json rename to packages/auth-compat-exp/demo/firebase.json diff --git a/packages-exp/auth-compat-exp/demo/functions/index.js b/packages/auth-compat-exp/demo/functions/index.js similarity index 100% rename from packages-exp/auth-compat-exp/demo/functions/index.js rename to packages/auth-compat-exp/demo/functions/index.js diff --git a/packages-exp/auth-compat-exp/demo/functions/package.json b/packages/auth-compat-exp/demo/functions/package.json similarity index 100% rename from packages-exp/auth-compat-exp/demo/functions/package.json rename to packages/auth-compat-exp/demo/functions/package.json diff --git a/packages-exp/auth-compat-exp/demo/functions/yarn.lock b/packages/auth-compat-exp/demo/functions/yarn.lock similarity index 100% rename from packages-exp/auth-compat-exp/demo/functions/yarn.lock rename to packages/auth-compat-exp/demo/functions/yarn.lock diff --git a/packages-exp/auth-compat-exp/demo/package.json b/packages/auth-compat-exp/demo/package.json similarity index 100% rename from packages-exp/auth-compat-exp/demo/package.json rename to packages/auth-compat-exp/demo/package.json diff --git a/packages-exp/auth-compat-exp/demo/public/common.js b/packages/auth-compat-exp/demo/public/common.js similarity index 100% rename from packages-exp/auth-compat-exp/demo/public/common.js rename to packages/auth-compat-exp/demo/public/common.js diff --git a/packages-exp/auth-exp/demo/public/manifest.json b/packages/auth-compat-exp/demo/public/manifest.json similarity index 100% rename from packages-exp/auth-exp/demo/public/manifest.json rename to packages/auth-compat-exp/demo/public/manifest.json diff --git a/packages-exp/auth-compat-exp/demo/public/sample-config.js b/packages/auth-compat-exp/demo/public/sample-config.js similarity index 100% rename from packages-exp/auth-compat-exp/demo/public/sample-config.js rename to packages/auth-compat-exp/demo/public/sample-config.js diff --git a/packages-exp/auth-compat-exp/demo/public/script.js b/packages/auth-compat-exp/demo/public/script.js similarity index 100% rename from packages-exp/auth-compat-exp/demo/public/script.js rename to packages/auth-compat-exp/demo/public/script.js diff --git a/packages-exp/auth-exp/demo/public/style.css b/packages/auth-compat-exp/demo/public/style.css similarity index 100% rename from packages-exp/auth-exp/demo/public/style.css rename to packages/auth-compat-exp/demo/public/style.css diff --git a/packages-exp/auth-compat-exp/demo/rollup.config.js b/packages/auth-compat-exp/demo/rollup.config.js similarity index 100% rename from packages-exp/auth-compat-exp/demo/rollup.config.js rename to packages/auth-compat-exp/demo/rollup.config.js diff --git a/packages-exp/auth-compat-exp/demo/tsconfig.json b/packages/auth-compat-exp/demo/tsconfig.json similarity index 100% rename from packages-exp/auth-compat-exp/demo/tsconfig.json rename to packages/auth-compat-exp/demo/tsconfig.json diff --git a/packages-exp/auth-compat-exp/demo/yarn.lock b/packages/auth-compat-exp/demo/yarn.lock similarity index 100% rename from packages-exp/auth-compat-exp/demo/yarn.lock rename to packages/auth-compat-exp/demo/yarn.lock diff --git a/packages-exp/auth-compat-exp/index.node.ts b/packages/auth-compat-exp/index.node.ts similarity index 100% rename from packages-exp/auth-compat-exp/index.node.ts rename to packages/auth-compat-exp/index.node.ts diff --git a/packages-exp/auth-compat-exp/index.ts b/packages/auth-compat-exp/index.ts similarity index 100% rename from packages-exp/auth-compat-exp/index.ts rename to packages/auth-compat-exp/index.ts diff --git a/packages-exp/auth-compat-exp/karma.conf.js b/packages/auth-compat-exp/karma.conf.js similarity index 100% rename from packages-exp/auth-compat-exp/karma.conf.js rename to packages/auth-compat-exp/karma.conf.js diff --git a/packages-exp/auth-compat-exp/package.json b/packages/auth-compat-exp/package.json similarity index 100% rename from packages-exp/auth-compat-exp/package.json rename to packages/auth-compat-exp/package.json diff --git a/packages-exp/auth-compat-exp/rollup.config.js b/packages/auth-compat-exp/rollup.config.js similarity index 100% rename from packages-exp/auth-compat-exp/rollup.config.js rename to packages/auth-compat-exp/rollup.config.js diff --git a/packages-exp/auth-compat-exp/rollup.config.release.js b/packages/auth-compat-exp/rollup.config.release.js similarity index 100% rename from packages-exp/auth-compat-exp/rollup.config.release.js rename to packages/auth-compat-exp/rollup.config.release.js diff --git a/packages-exp/auth-compat-exp/rollup.config.shared.js b/packages/auth-compat-exp/rollup.config.shared.js similarity index 100% rename from packages-exp/auth-compat-exp/rollup.config.shared.js rename to packages/auth-compat-exp/rollup.config.shared.js diff --git a/packages-exp/auth-compat-exp/scripts/run_node_tests.ts b/packages/auth-compat-exp/scripts/run_node_tests.ts similarity index 100% rename from packages-exp/auth-compat-exp/scripts/run_node_tests.ts rename to packages/auth-compat-exp/scripts/run_node_tests.ts diff --git a/packages-exp/auth-compat-exp/src/auth.test.ts b/packages/auth-compat-exp/src/auth.test.ts similarity index 100% rename from packages-exp/auth-compat-exp/src/auth.test.ts rename to packages/auth-compat-exp/src/auth.test.ts diff --git a/packages-exp/auth-compat-exp/src/auth.ts b/packages/auth-compat-exp/src/auth.ts similarity index 100% rename from packages-exp/auth-compat-exp/src/auth.ts rename to packages/auth-compat-exp/src/auth.ts diff --git a/packages-exp/auth-compat-exp/src/persistence.ts b/packages/auth-compat-exp/src/persistence.ts similarity index 100% rename from packages-exp/auth-compat-exp/src/persistence.ts rename to packages/auth-compat-exp/src/persistence.ts diff --git a/packages-exp/auth-compat-exp/src/phone_auth_provider.ts b/packages/auth-compat-exp/src/phone_auth_provider.ts similarity index 100% rename from packages-exp/auth-compat-exp/src/phone_auth_provider.ts rename to packages/auth-compat-exp/src/phone_auth_provider.ts diff --git a/packages-exp/auth-compat-exp/src/platform.ts b/packages/auth-compat-exp/src/platform.ts similarity index 100% rename from packages-exp/auth-compat-exp/src/platform.ts rename to packages/auth-compat-exp/src/platform.ts diff --git a/packages-exp/auth-compat-exp/src/popup_redirect.test.ts b/packages/auth-compat-exp/src/popup_redirect.test.ts similarity index 100% rename from packages-exp/auth-compat-exp/src/popup_redirect.test.ts rename to packages/auth-compat-exp/src/popup_redirect.test.ts diff --git a/packages-exp/auth-compat-exp/src/popup_redirect.ts b/packages/auth-compat-exp/src/popup_redirect.ts similarity index 100% rename from packages-exp/auth-compat-exp/src/popup_redirect.ts rename to packages/auth-compat-exp/src/popup_redirect.ts diff --git a/packages-exp/auth-compat-exp/src/recaptcha_verifier.ts b/packages/auth-compat-exp/src/recaptcha_verifier.ts similarity index 100% rename from packages-exp/auth-compat-exp/src/recaptcha_verifier.ts rename to packages/auth-compat-exp/src/recaptcha_verifier.ts diff --git a/packages-exp/auth-compat-exp/src/user.ts b/packages/auth-compat-exp/src/user.ts similarity index 100% rename from packages-exp/auth-compat-exp/src/user.ts rename to packages/auth-compat-exp/src/user.ts diff --git a/packages-exp/auth-compat-exp/src/user_credential.ts b/packages/auth-compat-exp/src/user_credential.ts similarity index 100% rename from packages-exp/auth-compat-exp/src/user_credential.ts rename to packages/auth-compat-exp/src/user_credential.ts diff --git a/packages-exp/auth-compat-exp/src/wrap.ts b/packages/auth-compat-exp/src/wrap.ts similarity index 100% rename from packages-exp/auth-compat-exp/src/wrap.ts rename to packages/auth-compat-exp/src/wrap.ts diff --git a/packages-exp/auth-compat-exp/test/helpers/helpers.ts b/packages/auth-compat-exp/test/helpers/helpers.ts similarity index 100% rename from packages-exp/auth-compat-exp/test/helpers/helpers.ts rename to packages/auth-compat-exp/test/helpers/helpers.ts diff --git a/packages-exp/auth-compat-exp/test/integration/flows/anonymous.test.ts b/packages/auth-compat-exp/test/integration/flows/anonymous.test.ts similarity index 100% rename from packages-exp/auth-compat-exp/test/integration/flows/anonymous.test.ts rename to packages/auth-compat-exp/test/integration/flows/anonymous.test.ts diff --git a/packages-exp/auth-compat-exp/test/integration/flows/custom.test.ts b/packages/auth-compat-exp/test/integration/flows/custom.test.ts similarity index 100% rename from packages-exp/auth-compat-exp/test/integration/flows/custom.test.ts rename to packages/auth-compat-exp/test/integration/flows/custom.test.ts diff --git a/packages-exp/auth-compat-exp/test/integration/flows/email.test.ts b/packages/auth-compat-exp/test/integration/flows/email.test.ts similarity index 100% rename from packages-exp/auth-compat-exp/test/integration/flows/email.test.ts rename to packages/auth-compat-exp/test/integration/flows/email.test.ts diff --git a/packages-exp/auth-compat-exp/test/integration/flows/idp.test.ts b/packages/auth-compat-exp/test/integration/flows/idp.test.ts similarity index 100% rename from packages-exp/auth-compat-exp/test/integration/flows/idp.test.ts rename to packages/auth-compat-exp/test/integration/flows/idp.test.ts diff --git a/packages-exp/auth-compat-exp/test/integration/flows/oob.test.ts b/packages/auth-compat-exp/test/integration/flows/oob.test.ts similarity index 100% rename from packages-exp/auth-compat-exp/test/integration/flows/oob.test.ts rename to packages/auth-compat-exp/test/integration/flows/oob.test.ts diff --git a/packages-exp/auth-compat-exp/test/integration/flows/phone.test.ts b/packages/auth-compat-exp/test/integration/flows/phone.test.ts similarity index 100% rename from packages-exp/auth-compat-exp/test/integration/flows/phone.test.ts rename to packages/auth-compat-exp/test/integration/flows/phone.test.ts diff --git a/packages-exp/auth-compat-exp/test/integration/webdriver/static/anonymous.js b/packages/auth-compat-exp/test/integration/webdriver/static/anonymous.js similarity index 100% rename from packages-exp/auth-compat-exp/test/integration/webdriver/static/anonymous.js rename to packages/auth-compat-exp/test/integration/webdriver/static/anonymous.js diff --git a/packages-exp/auth-compat-exp/test/integration/webdriver/static/core.js b/packages/auth-compat-exp/test/integration/webdriver/static/core.js similarity index 100% rename from packages-exp/auth-compat-exp/test/integration/webdriver/static/core.js rename to packages/auth-compat-exp/test/integration/webdriver/static/core.js diff --git a/packages-exp/auth-compat-exp/test/integration/webdriver/static/email.js b/packages/auth-compat-exp/test/integration/webdriver/static/email.js similarity index 100% rename from packages-exp/auth-compat-exp/test/integration/webdriver/static/email.js rename to packages/auth-compat-exp/test/integration/webdriver/static/email.js diff --git a/packages-exp/auth-compat-exp/test/integration/webdriver/static/index.html b/packages/auth-compat-exp/test/integration/webdriver/static/index.html similarity index 100% rename from packages-exp/auth-compat-exp/test/integration/webdriver/static/index.html rename to packages/auth-compat-exp/test/integration/webdriver/static/index.html diff --git a/packages-exp/auth-compat-exp/test/integration/webdriver/static/index.js b/packages/auth-compat-exp/test/integration/webdriver/static/index.js similarity index 100% rename from packages-exp/auth-compat-exp/test/integration/webdriver/static/index.js rename to packages/auth-compat-exp/test/integration/webdriver/static/index.js diff --git a/packages-exp/auth-compat-exp/test/integration/webdriver/static/lazy_load.js b/packages/auth-compat-exp/test/integration/webdriver/static/lazy_load.js similarity index 100% rename from packages-exp/auth-compat-exp/test/integration/webdriver/static/lazy_load.js rename to packages/auth-compat-exp/test/integration/webdriver/static/lazy_load.js diff --git a/packages-exp/auth-compat-exp/test/integration/webdriver/static/logged_in.html b/packages/auth-compat-exp/test/integration/webdriver/static/logged_in.html similarity index 100% rename from packages-exp/auth-compat-exp/test/integration/webdriver/static/logged_in.html rename to packages/auth-compat-exp/test/integration/webdriver/static/logged_in.html diff --git a/packages-exp/auth-compat-exp/test/integration/webdriver/static/persistence.js b/packages/auth-compat-exp/test/integration/webdriver/static/persistence.js similarity index 100% rename from packages-exp/auth-compat-exp/test/integration/webdriver/static/persistence.js rename to packages/auth-compat-exp/test/integration/webdriver/static/persistence.js diff --git a/packages-exp/auth-compat-exp/test/integration/webdriver/static/popup.js b/packages/auth-compat-exp/test/integration/webdriver/static/popup.js similarity index 100% rename from packages-exp/auth-compat-exp/test/integration/webdriver/static/popup.js rename to packages/auth-compat-exp/test/integration/webdriver/static/popup.js diff --git a/packages-exp/auth-compat-exp/test/integration/webdriver/static/redirect.js b/packages/auth-compat-exp/test/integration/webdriver/static/redirect.js similarity index 100% rename from packages-exp/auth-compat-exp/test/integration/webdriver/static/redirect.js rename to packages/auth-compat-exp/test/integration/webdriver/static/redirect.js diff --git a/packages-exp/auth-compat-exp/test/integration/webdriver/static/rollup.config.js b/packages/auth-compat-exp/test/integration/webdriver/static/rollup.config.js similarity index 100% rename from packages-exp/auth-compat-exp/test/integration/webdriver/static/rollup.config.js rename to packages/auth-compat-exp/test/integration/webdriver/static/rollup.config.js diff --git a/packages-exp/auth-compat-exp/test/integration/webdriver/static/ui.js b/packages/auth-compat-exp/test/integration/webdriver/static/ui.js similarity index 100% rename from packages-exp/auth-compat-exp/test/integration/webdriver/static/ui.js rename to packages/auth-compat-exp/test/integration/webdriver/static/ui.js diff --git a/packages-exp/functions-compat/tsconfig.json b/packages/auth-compat-exp/tsconfig.json similarity index 100% rename from packages-exp/functions-compat/tsconfig.json rename to packages/auth-compat-exp/tsconfig.json diff --git a/packages-exp/auth-exp/.eslintrc.js b/packages/auth-exp/.eslintrc.js similarity index 100% rename from packages-exp/auth-exp/.eslintrc.js rename to packages/auth-exp/.eslintrc.js diff --git a/packages-exp/auth-exp/README.md b/packages/auth-exp/README.md similarity index 100% rename from packages-exp/auth-exp/README.md rename to packages/auth-exp/README.md diff --git a/packages-exp/auth-exp/api-extractor.json b/packages/auth-exp/api-extractor.json similarity index 100% rename from packages-exp/auth-exp/api-extractor.json rename to packages/auth-exp/api-extractor.json diff --git a/packages-exp/auth-exp/cordova/demo/.gitignore b/packages/auth-exp/cordova/demo/.gitignore similarity index 100% rename from packages-exp/auth-exp/cordova/demo/.gitignore rename to packages/auth-exp/cordova/demo/.gitignore diff --git a/packages-exp/auth-exp/cordova/demo/README.md b/packages/auth-exp/cordova/demo/README.md similarity index 100% rename from packages-exp/auth-exp/cordova/demo/README.md rename to packages/auth-exp/cordova/demo/README.md diff --git a/packages-exp/auth-exp/cordova/demo/package.json b/packages/auth-exp/cordova/demo/package.json similarity index 100% rename from packages-exp/auth-exp/cordova/demo/package.json rename to packages/auth-exp/cordova/demo/package.json diff --git a/packages-exp/auth-exp/cordova/demo/rollup.config.js b/packages/auth-exp/cordova/demo/rollup.config.js similarity index 100% rename from packages-exp/auth-exp/cordova/demo/rollup.config.js rename to packages/auth-exp/cordova/demo/rollup.config.js diff --git a/packages-exp/auth-exp/cordova/demo/sample-config.xml b/packages/auth-exp/cordova/demo/sample-config.xml similarity index 100% rename from packages-exp/auth-exp/cordova/demo/sample-config.xml rename to packages/auth-exp/cordova/demo/sample-config.xml diff --git a/packages-exp/auth-exp/cordova/demo/src/index.js b/packages/auth-exp/cordova/demo/src/index.js similarity index 100% rename from packages-exp/auth-exp/cordova/demo/src/index.js rename to packages/auth-exp/cordova/demo/src/index.js diff --git a/packages-exp/auth-exp/cordova/demo/src/logging.js b/packages/auth-exp/cordova/demo/src/logging.js similarity index 100% rename from packages-exp/auth-exp/cordova/demo/src/logging.js rename to packages/auth-exp/cordova/demo/src/logging.js diff --git a/packages-exp/auth-exp/cordova/demo/src/sample-config.js b/packages/auth-exp/cordova/demo/src/sample-config.js similarity index 100% rename from packages-exp/auth-exp/cordova/demo/src/sample-config.js rename to packages/auth-exp/cordova/demo/src/sample-config.js diff --git a/packages-exp/auth-exp/cordova/demo/www/index.html b/packages/auth-exp/cordova/demo/www/index.html similarity index 100% rename from packages-exp/auth-exp/cordova/demo/www/index.html rename to packages/auth-exp/cordova/demo/www/index.html diff --git a/packages-exp/auth-exp/cordova/demo/www/style.css b/packages/auth-exp/cordova/demo/www/style.css similarity index 100% rename from packages-exp/auth-exp/cordova/demo/www/style.css rename to packages/auth-exp/cordova/demo/www/style.css diff --git a/packages-exp/auth-exp/cordova/package.json b/packages/auth-exp/cordova/package.json similarity index 100% rename from packages-exp/auth-exp/cordova/package.json rename to packages/auth-exp/cordova/package.json diff --git a/packages-exp/auth-exp/demo/.eslintignore b/packages/auth-exp/demo/.eslintignore similarity index 100% rename from packages-exp/auth-exp/demo/.eslintignore rename to packages/auth-exp/demo/.eslintignore diff --git a/packages-exp/auth-exp/demo/.eslintrc.js b/packages/auth-exp/demo/.eslintrc.js similarity index 100% rename from packages-exp/auth-exp/demo/.eslintrc.js rename to packages/auth-exp/demo/.eslintrc.js diff --git a/packages-exp/auth-exp/demo/.gitignore b/packages/auth-exp/demo/.gitignore similarity index 100% rename from packages-exp/auth-exp/demo/.gitignore rename to packages/auth-exp/demo/.gitignore diff --git a/packages-exp/auth-exp/demo/README.md b/packages/auth-exp/demo/README.md similarity index 100% rename from packages-exp/auth-exp/demo/README.md rename to packages/auth-exp/demo/README.md diff --git a/packages/auth/demo/database.rules.json b/packages/auth-exp/demo/database.rules.json similarity index 100% rename from packages/auth/demo/database.rules.json rename to packages/auth-exp/demo/database.rules.json diff --git a/packages-exp/auth-exp/demo/firebase.json b/packages/auth-exp/demo/firebase.json similarity index 100% rename from packages-exp/auth-exp/demo/firebase.json rename to packages/auth-exp/demo/firebase.json diff --git a/packages-exp/auth-exp/demo/functions/index.js b/packages/auth-exp/demo/functions/index.js similarity index 100% rename from packages-exp/auth-exp/demo/functions/index.js rename to packages/auth-exp/demo/functions/index.js diff --git a/packages-exp/auth-exp/demo/functions/package.json b/packages/auth-exp/demo/functions/package.json similarity index 100% rename from packages-exp/auth-exp/demo/functions/package.json rename to packages/auth-exp/demo/functions/package.json diff --git a/packages-exp/auth-exp/demo/functions/yarn.lock b/packages/auth-exp/demo/functions/yarn.lock similarity index 100% rename from packages-exp/auth-exp/demo/functions/yarn.lock rename to packages/auth-exp/demo/functions/yarn.lock diff --git a/packages-exp/auth-exp/demo/package.json b/packages/auth-exp/demo/package.json similarity index 100% rename from packages-exp/auth-exp/demo/package.json rename to packages/auth-exp/demo/package.json diff --git a/packages-exp/auth-exp/demo/public/common.js b/packages/auth-exp/demo/public/common.js similarity index 100% rename from packages-exp/auth-exp/demo/public/common.js rename to packages/auth-exp/demo/public/common.js diff --git a/packages-exp/auth-exp/demo/public/index.html b/packages/auth-exp/demo/public/index.html similarity index 100% rename from packages-exp/auth-exp/demo/public/index.html rename to packages/auth-exp/demo/public/index.html diff --git a/packages/auth/demo/public/manifest.json b/packages/auth-exp/demo/public/manifest.json similarity index 100% rename from packages/auth/demo/public/manifest.json rename to packages/auth-exp/demo/public/manifest.json diff --git a/packages/auth/demo/public/style.css b/packages/auth-exp/demo/public/style.css similarity index 100% rename from packages/auth/demo/public/style.css rename to packages/auth-exp/demo/public/style.css diff --git a/packages-exp/auth-exp/demo/rollup.config.js b/packages/auth-exp/demo/rollup.config.js similarity index 100% rename from packages-exp/auth-exp/demo/rollup.config.js rename to packages/auth-exp/demo/rollup.config.js diff --git a/packages-exp/auth-exp/demo/src/config.d.ts b/packages/auth-exp/demo/src/config.d.ts similarity index 100% rename from packages-exp/auth-exp/demo/src/config.d.ts rename to packages/auth-exp/demo/src/config.d.ts diff --git a/packages-exp/auth-exp/demo/src/index.js b/packages/auth-exp/demo/src/index.js similarity index 100% rename from packages-exp/auth-exp/demo/src/index.js rename to packages/auth-exp/demo/src/index.js diff --git a/packages-exp/auth-exp/demo/src/logging.js b/packages/auth-exp/demo/src/logging.js similarity index 100% rename from packages-exp/auth-exp/demo/src/logging.js rename to packages/auth-exp/demo/src/logging.js diff --git a/packages-exp/auth-exp/demo/src/sample-config.js b/packages/auth-exp/demo/src/sample-config.js similarity index 100% rename from packages-exp/auth-exp/demo/src/sample-config.js rename to packages/auth-exp/demo/src/sample-config.js diff --git a/packages-exp/auth-exp/demo/src/worker/service-worker.ts b/packages/auth-exp/demo/src/worker/service-worker.ts similarity index 100% rename from packages-exp/auth-exp/demo/src/worker/service-worker.ts rename to packages/auth-exp/demo/src/worker/service-worker.ts diff --git a/packages-exp/auth-exp/demo/src/worker/tsconfig.json b/packages/auth-exp/demo/src/worker/tsconfig.json similarity index 100% rename from packages-exp/auth-exp/demo/src/worker/tsconfig.json rename to packages/auth-exp/demo/src/worker/tsconfig.json diff --git a/packages-exp/auth-exp/demo/src/worker/web-worker.ts b/packages/auth-exp/demo/src/worker/web-worker.ts similarity index 100% rename from packages-exp/auth-exp/demo/src/worker/web-worker.ts rename to packages/auth-exp/demo/src/worker/web-worker.ts diff --git a/packages-exp/auth-exp/demo/tsconfig.json b/packages/auth-exp/demo/tsconfig.json similarity index 100% rename from packages-exp/auth-exp/demo/tsconfig.json rename to packages/auth-exp/demo/tsconfig.json diff --git a/packages-exp/auth-exp/index.cordova.ts b/packages/auth-exp/index.cordova.ts similarity index 100% rename from packages-exp/auth-exp/index.cordova.ts rename to packages/auth-exp/index.cordova.ts diff --git a/packages-exp/auth-exp/index.doc.ts b/packages/auth-exp/index.doc.ts similarity index 100% rename from packages-exp/auth-exp/index.doc.ts rename to packages/auth-exp/index.doc.ts diff --git a/packages-exp/auth-exp/index.node.ts b/packages/auth-exp/index.node.ts similarity index 100% rename from packages-exp/auth-exp/index.node.ts rename to packages/auth-exp/index.node.ts diff --git a/packages-exp/auth-exp/index.rn.ts b/packages/auth-exp/index.rn.ts similarity index 100% rename from packages-exp/auth-exp/index.rn.ts rename to packages/auth-exp/index.rn.ts diff --git a/packages-exp/auth-exp/index.ts b/packages/auth-exp/index.ts similarity index 100% rename from packages-exp/auth-exp/index.ts rename to packages/auth-exp/index.ts diff --git a/packages-exp/auth-exp/index.webworker.ts b/packages/auth-exp/index.webworker.ts similarity index 100% rename from packages-exp/auth-exp/index.webworker.ts rename to packages/auth-exp/index.webworker.ts diff --git a/packages-exp/auth-exp/internal/index.ts b/packages/auth-exp/internal/index.ts similarity index 100% rename from packages-exp/auth-exp/internal/index.ts rename to packages/auth-exp/internal/index.ts diff --git a/packages-exp/auth-exp/internal/package.json b/packages/auth-exp/internal/package.json similarity index 100% rename from packages-exp/auth-exp/internal/package.json rename to packages/auth-exp/internal/package.json diff --git a/packages-exp/auth-exp/karma.conf.js b/packages/auth-exp/karma.conf.js similarity index 100% rename from packages-exp/auth-exp/karma.conf.js rename to packages/auth-exp/karma.conf.js diff --git a/packages-exp/auth-exp/package.json b/packages/auth-exp/package.json similarity index 100% rename from packages-exp/auth-exp/package.json rename to packages/auth-exp/package.json diff --git a/packages-exp/auth-exp/react-native/package.json b/packages/auth-exp/react-native/package.json similarity index 100% rename from packages-exp/auth-exp/react-native/package.json rename to packages/auth-exp/react-native/package.json diff --git a/packages-exp/auth-exp/rollup.config.js b/packages/auth-exp/rollup.config.js similarity index 100% rename from packages-exp/auth-exp/rollup.config.js rename to packages/auth-exp/rollup.config.js diff --git a/packages-exp/auth-exp/rollup.config.release.js b/packages/auth-exp/rollup.config.release.js similarity index 100% rename from packages-exp/auth-exp/rollup.config.release.js rename to packages/auth-exp/rollup.config.release.js diff --git a/packages-exp/auth-exp/rollup.config.shared.js b/packages/auth-exp/rollup.config.shared.js similarity index 100% rename from packages-exp/auth-exp/rollup.config.shared.js rename to packages/auth-exp/rollup.config.shared.js diff --git a/packages-exp/auth-exp/scripts/run-node-tests.js b/packages/auth-exp/scripts/run-node-tests.js similarity index 100% rename from packages-exp/auth-exp/scripts/run-node-tests.js rename to packages/auth-exp/scripts/run-node-tests.js diff --git a/packages-exp/auth-exp/scripts/run-node-tests.ts b/packages/auth-exp/scripts/run-node-tests.ts similarity index 100% rename from packages-exp/auth-exp/scripts/run-node-tests.ts rename to packages/auth-exp/scripts/run-node-tests.ts diff --git a/packages-exp/auth-exp/src/api/account_management/account.test.ts b/packages/auth-exp/src/api/account_management/account.test.ts similarity index 100% rename from packages-exp/auth-exp/src/api/account_management/account.test.ts rename to packages/auth-exp/src/api/account_management/account.test.ts diff --git a/packages-exp/auth-exp/src/api/account_management/account.ts b/packages/auth-exp/src/api/account_management/account.ts similarity index 100% rename from packages-exp/auth-exp/src/api/account_management/account.ts rename to packages/auth-exp/src/api/account_management/account.ts diff --git a/packages-exp/auth-exp/src/api/account_management/email_and_password.test.ts b/packages/auth-exp/src/api/account_management/email_and_password.test.ts similarity index 100% rename from packages-exp/auth-exp/src/api/account_management/email_and_password.test.ts rename to packages/auth-exp/src/api/account_management/email_and_password.test.ts diff --git a/packages-exp/auth-exp/src/api/account_management/email_and_password.ts b/packages/auth-exp/src/api/account_management/email_and_password.ts similarity index 100% rename from packages-exp/auth-exp/src/api/account_management/email_and_password.ts rename to packages/auth-exp/src/api/account_management/email_and_password.ts diff --git a/packages-exp/auth-exp/src/api/account_management/mfa.test.ts b/packages/auth-exp/src/api/account_management/mfa.test.ts similarity index 100% rename from packages-exp/auth-exp/src/api/account_management/mfa.test.ts rename to packages/auth-exp/src/api/account_management/mfa.test.ts diff --git a/packages-exp/auth-exp/src/api/account_management/mfa.ts b/packages/auth-exp/src/api/account_management/mfa.ts similarity index 100% rename from packages-exp/auth-exp/src/api/account_management/mfa.ts rename to packages/auth-exp/src/api/account_management/mfa.ts diff --git a/packages-exp/auth-exp/src/api/account_management/profile.test.ts b/packages/auth-exp/src/api/account_management/profile.test.ts similarity index 100% rename from packages-exp/auth-exp/src/api/account_management/profile.test.ts rename to packages/auth-exp/src/api/account_management/profile.test.ts diff --git a/packages-exp/auth-exp/src/api/account_management/profile.ts b/packages/auth-exp/src/api/account_management/profile.ts similarity index 100% rename from packages-exp/auth-exp/src/api/account_management/profile.ts rename to packages/auth-exp/src/api/account_management/profile.ts diff --git a/packages-exp/auth-exp/src/api/authentication/create_auth_uri.test.ts b/packages/auth-exp/src/api/authentication/create_auth_uri.test.ts similarity index 100% rename from packages-exp/auth-exp/src/api/authentication/create_auth_uri.test.ts rename to packages/auth-exp/src/api/authentication/create_auth_uri.test.ts diff --git a/packages-exp/auth-exp/src/api/authentication/create_auth_uri.ts b/packages/auth-exp/src/api/authentication/create_auth_uri.ts similarity index 100% rename from packages-exp/auth-exp/src/api/authentication/create_auth_uri.ts rename to packages/auth-exp/src/api/authentication/create_auth_uri.ts diff --git a/packages-exp/auth-exp/src/api/authentication/custom_token.test.ts b/packages/auth-exp/src/api/authentication/custom_token.test.ts similarity index 100% rename from packages-exp/auth-exp/src/api/authentication/custom_token.test.ts rename to packages/auth-exp/src/api/authentication/custom_token.test.ts diff --git a/packages-exp/auth-exp/src/api/authentication/custom_token.ts b/packages/auth-exp/src/api/authentication/custom_token.ts similarity index 100% rename from packages-exp/auth-exp/src/api/authentication/custom_token.ts rename to packages/auth-exp/src/api/authentication/custom_token.ts diff --git a/packages-exp/auth-exp/src/api/authentication/email_and_password.test.ts b/packages/auth-exp/src/api/authentication/email_and_password.test.ts similarity index 100% rename from packages-exp/auth-exp/src/api/authentication/email_and_password.test.ts rename to packages/auth-exp/src/api/authentication/email_and_password.test.ts diff --git a/packages-exp/auth-exp/src/api/authentication/email_and_password.ts b/packages/auth-exp/src/api/authentication/email_and_password.ts similarity index 100% rename from packages-exp/auth-exp/src/api/authentication/email_and_password.ts rename to packages/auth-exp/src/api/authentication/email_and_password.ts diff --git a/packages-exp/auth-exp/src/api/authentication/email_link.test.ts b/packages/auth-exp/src/api/authentication/email_link.test.ts similarity index 100% rename from packages-exp/auth-exp/src/api/authentication/email_link.test.ts rename to packages/auth-exp/src/api/authentication/email_link.test.ts diff --git a/packages-exp/auth-exp/src/api/authentication/email_link.ts b/packages/auth-exp/src/api/authentication/email_link.ts similarity index 100% rename from packages-exp/auth-exp/src/api/authentication/email_link.ts rename to packages/auth-exp/src/api/authentication/email_link.ts diff --git a/packages-exp/auth-exp/src/api/authentication/idp.test.ts b/packages/auth-exp/src/api/authentication/idp.test.ts similarity index 100% rename from packages-exp/auth-exp/src/api/authentication/idp.test.ts rename to packages/auth-exp/src/api/authentication/idp.test.ts diff --git a/packages-exp/auth-exp/src/api/authentication/idp.ts b/packages/auth-exp/src/api/authentication/idp.ts similarity index 100% rename from packages-exp/auth-exp/src/api/authentication/idp.ts rename to packages/auth-exp/src/api/authentication/idp.ts diff --git a/packages-exp/auth-exp/src/api/authentication/mfa.test.ts b/packages/auth-exp/src/api/authentication/mfa.test.ts similarity index 100% rename from packages-exp/auth-exp/src/api/authentication/mfa.test.ts rename to packages/auth-exp/src/api/authentication/mfa.test.ts diff --git a/packages-exp/auth-exp/src/api/authentication/mfa.ts b/packages/auth-exp/src/api/authentication/mfa.ts similarity index 100% rename from packages-exp/auth-exp/src/api/authentication/mfa.ts rename to packages/auth-exp/src/api/authentication/mfa.ts diff --git a/packages-exp/auth-exp/src/api/authentication/recaptcha.test.ts b/packages/auth-exp/src/api/authentication/recaptcha.test.ts similarity index 100% rename from packages-exp/auth-exp/src/api/authentication/recaptcha.test.ts rename to packages/auth-exp/src/api/authentication/recaptcha.test.ts diff --git a/packages-exp/auth-exp/src/api/authentication/recaptcha.ts b/packages/auth-exp/src/api/authentication/recaptcha.ts similarity index 100% rename from packages-exp/auth-exp/src/api/authentication/recaptcha.ts rename to packages/auth-exp/src/api/authentication/recaptcha.ts diff --git a/packages-exp/auth-exp/src/api/authentication/sign_up.test.ts b/packages/auth-exp/src/api/authentication/sign_up.test.ts similarity index 100% rename from packages-exp/auth-exp/src/api/authentication/sign_up.test.ts rename to packages/auth-exp/src/api/authentication/sign_up.test.ts diff --git a/packages-exp/auth-exp/src/api/authentication/sign_up.ts b/packages/auth-exp/src/api/authentication/sign_up.ts similarity index 100% rename from packages-exp/auth-exp/src/api/authentication/sign_up.ts rename to packages/auth-exp/src/api/authentication/sign_up.ts diff --git a/packages-exp/auth-exp/src/api/authentication/sms.test.ts b/packages/auth-exp/src/api/authentication/sms.test.ts similarity index 100% rename from packages-exp/auth-exp/src/api/authentication/sms.test.ts rename to packages/auth-exp/src/api/authentication/sms.test.ts diff --git a/packages-exp/auth-exp/src/api/authentication/sms.ts b/packages/auth-exp/src/api/authentication/sms.ts similarity index 100% rename from packages-exp/auth-exp/src/api/authentication/sms.ts rename to packages/auth-exp/src/api/authentication/sms.ts diff --git a/packages-exp/auth-exp/src/api/authentication/token.test.ts b/packages/auth-exp/src/api/authentication/token.test.ts similarity index 100% rename from packages-exp/auth-exp/src/api/authentication/token.test.ts rename to packages/auth-exp/src/api/authentication/token.test.ts diff --git a/packages-exp/auth-exp/src/api/authentication/token.ts b/packages/auth-exp/src/api/authentication/token.ts similarity index 100% rename from packages-exp/auth-exp/src/api/authentication/token.ts rename to packages/auth-exp/src/api/authentication/token.ts diff --git a/packages-exp/auth-exp/src/api/errors.ts b/packages/auth-exp/src/api/errors.ts similarity index 100% rename from packages-exp/auth-exp/src/api/errors.ts rename to packages/auth-exp/src/api/errors.ts diff --git a/packages-exp/auth-exp/src/api/index.test.ts b/packages/auth-exp/src/api/index.test.ts similarity index 100% rename from packages-exp/auth-exp/src/api/index.test.ts rename to packages/auth-exp/src/api/index.test.ts diff --git a/packages-exp/auth-exp/src/api/index.ts b/packages/auth-exp/src/api/index.ts similarity index 100% rename from packages-exp/auth-exp/src/api/index.ts rename to packages/auth-exp/src/api/index.ts diff --git a/packages-exp/auth-exp/src/api/project_config/get_project_config.test.ts b/packages/auth-exp/src/api/project_config/get_project_config.test.ts similarity index 100% rename from packages-exp/auth-exp/src/api/project_config/get_project_config.test.ts rename to packages/auth-exp/src/api/project_config/get_project_config.test.ts diff --git a/packages-exp/auth-exp/src/api/project_config/get_project_config.ts b/packages/auth-exp/src/api/project_config/get_project_config.ts similarity index 100% rename from packages-exp/auth-exp/src/api/project_config/get_project_config.ts rename to packages/auth-exp/src/api/project_config/get_project_config.ts diff --git a/packages-exp/auth-exp/src/core/action_code_url.test.ts b/packages/auth-exp/src/core/action_code_url.test.ts similarity index 100% rename from packages-exp/auth-exp/src/core/action_code_url.test.ts rename to packages/auth-exp/src/core/action_code_url.test.ts diff --git a/packages-exp/auth-exp/src/core/action_code_url.ts b/packages/auth-exp/src/core/action_code_url.ts similarity index 100% rename from packages-exp/auth-exp/src/core/action_code_url.ts rename to packages/auth-exp/src/core/action_code_url.ts diff --git a/packages-exp/auth-exp/src/core/auth/auth_event_manager.test.ts b/packages/auth-exp/src/core/auth/auth_event_manager.test.ts similarity index 100% rename from packages-exp/auth-exp/src/core/auth/auth_event_manager.test.ts rename to packages/auth-exp/src/core/auth/auth_event_manager.test.ts diff --git a/packages-exp/auth-exp/src/core/auth/auth_event_manager.ts b/packages/auth-exp/src/core/auth/auth_event_manager.ts similarity index 100% rename from packages-exp/auth-exp/src/core/auth/auth_event_manager.ts rename to packages/auth-exp/src/core/auth/auth_event_manager.ts diff --git a/packages-exp/auth-exp/src/core/auth/auth_impl.test.ts b/packages/auth-exp/src/core/auth/auth_impl.test.ts similarity index 100% rename from packages-exp/auth-exp/src/core/auth/auth_impl.test.ts rename to packages/auth-exp/src/core/auth/auth_impl.test.ts diff --git a/packages-exp/auth-exp/src/core/auth/auth_impl.ts b/packages/auth-exp/src/core/auth/auth_impl.ts similarity index 100% rename from packages-exp/auth-exp/src/core/auth/auth_impl.ts rename to packages/auth-exp/src/core/auth/auth_impl.ts diff --git a/packages-exp/auth-exp/src/core/auth/emulator.test.ts b/packages/auth-exp/src/core/auth/emulator.test.ts similarity index 100% rename from packages-exp/auth-exp/src/core/auth/emulator.test.ts rename to packages/auth-exp/src/core/auth/emulator.test.ts diff --git a/packages-exp/auth-exp/src/core/auth/emulator.ts b/packages/auth-exp/src/core/auth/emulator.ts similarity index 100% rename from packages-exp/auth-exp/src/core/auth/emulator.ts rename to packages/auth-exp/src/core/auth/emulator.ts diff --git a/packages-exp/auth-exp/src/core/auth/firebase_internal.test.ts b/packages/auth-exp/src/core/auth/firebase_internal.test.ts similarity index 100% rename from packages-exp/auth-exp/src/core/auth/firebase_internal.test.ts rename to packages/auth-exp/src/core/auth/firebase_internal.test.ts diff --git a/packages-exp/auth-exp/src/core/auth/firebase_internal.ts b/packages/auth-exp/src/core/auth/firebase_internal.ts similarity index 100% rename from packages-exp/auth-exp/src/core/auth/firebase_internal.ts rename to packages/auth-exp/src/core/auth/firebase_internal.ts diff --git a/packages-exp/auth-exp/src/core/auth/initialize.test.ts b/packages/auth-exp/src/core/auth/initialize.test.ts similarity index 100% rename from packages-exp/auth-exp/src/core/auth/initialize.test.ts rename to packages/auth-exp/src/core/auth/initialize.test.ts diff --git a/packages-exp/auth-exp/src/core/auth/initialize.ts b/packages/auth-exp/src/core/auth/initialize.ts similarity index 100% rename from packages-exp/auth-exp/src/core/auth/initialize.ts rename to packages/auth-exp/src/core/auth/initialize.ts diff --git a/packages-exp/auth-exp/src/core/auth/register.ts b/packages/auth-exp/src/core/auth/register.ts similarity index 100% rename from packages-exp/auth-exp/src/core/auth/register.ts rename to packages/auth-exp/src/core/auth/register.ts diff --git a/packages-exp/auth-exp/src/core/credentials/auth_credential.ts b/packages/auth-exp/src/core/credentials/auth_credential.ts similarity index 100% rename from packages-exp/auth-exp/src/core/credentials/auth_credential.ts rename to packages/auth-exp/src/core/credentials/auth_credential.ts diff --git a/packages-exp/auth-exp/src/core/credentials/email.test.ts b/packages/auth-exp/src/core/credentials/email.test.ts similarity index 100% rename from packages-exp/auth-exp/src/core/credentials/email.test.ts rename to packages/auth-exp/src/core/credentials/email.test.ts diff --git a/packages-exp/auth-exp/src/core/credentials/email.ts b/packages/auth-exp/src/core/credentials/email.ts similarity index 100% rename from packages-exp/auth-exp/src/core/credentials/email.ts rename to packages/auth-exp/src/core/credentials/email.ts diff --git a/packages-exp/auth-exp/src/core/credentials/index.ts b/packages/auth-exp/src/core/credentials/index.ts similarity index 100% rename from packages-exp/auth-exp/src/core/credentials/index.ts rename to packages/auth-exp/src/core/credentials/index.ts diff --git a/packages-exp/auth-exp/src/core/credentials/oauth.test.ts b/packages/auth-exp/src/core/credentials/oauth.test.ts similarity index 100% rename from packages-exp/auth-exp/src/core/credentials/oauth.test.ts rename to packages/auth-exp/src/core/credentials/oauth.test.ts diff --git a/packages-exp/auth-exp/src/core/credentials/oauth.ts b/packages/auth-exp/src/core/credentials/oauth.ts similarity index 100% rename from packages-exp/auth-exp/src/core/credentials/oauth.ts rename to packages/auth-exp/src/core/credentials/oauth.ts diff --git a/packages-exp/auth-exp/src/core/credentials/phone.test.ts b/packages/auth-exp/src/core/credentials/phone.test.ts similarity index 100% rename from packages-exp/auth-exp/src/core/credentials/phone.test.ts rename to packages/auth-exp/src/core/credentials/phone.test.ts diff --git a/packages-exp/auth-exp/src/core/credentials/phone.ts b/packages/auth-exp/src/core/credentials/phone.ts similarity index 100% rename from packages-exp/auth-exp/src/core/credentials/phone.ts rename to packages/auth-exp/src/core/credentials/phone.ts diff --git a/packages-exp/auth-exp/src/core/credentials/saml.test.ts b/packages/auth-exp/src/core/credentials/saml.test.ts similarity index 100% rename from packages-exp/auth-exp/src/core/credentials/saml.test.ts rename to packages/auth-exp/src/core/credentials/saml.test.ts diff --git a/packages-exp/auth-exp/src/core/credentials/saml.ts b/packages/auth-exp/src/core/credentials/saml.ts similarity index 100% rename from packages-exp/auth-exp/src/core/credentials/saml.ts rename to packages/auth-exp/src/core/credentials/saml.ts diff --git a/packages-exp/auth-exp/src/core/errors.test.ts b/packages/auth-exp/src/core/errors.test.ts similarity index 100% rename from packages-exp/auth-exp/src/core/errors.test.ts rename to packages/auth-exp/src/core/errors.test.ts diff --git a/packages-exp/auth-exp/src/core/errors.ts b/packages/auth-exp/src/core/errors.ts similarity index 100% rename from packages-exp/auth-exp/src/core/errors.ts rename to packages/auth-exp/src/core/errors.ts diff --git a/packages-exp/auth-exp/src/core/index.ts b/packages/auth-exp/src/core/index.ts similarity index 100% rename from packages-exp/auth-exp/src/core/index.ts rename to packages/auth-exp/src/core/index.ts diff --git a/packages-exp/auth-exp/src/core/persistence/in_memory.test.ts b/packages/auth-exp/src/core/persistence/in_memory.test.ts similarity index 100% rename from packages-exp/auth-exp/src/core/persistence/in_memory.test.ts rename to packages/auth-exp/src/core/persistence/in_memory.test.ts diff --git a/packages-exp/auth-exp/src/core/persistence/in_memory.ts b/packages/auth-exp/src/core/persistence/in_memory.ts similarity index 100% rename from packages-exp/auth-exp/src/core/persistence/in_memory.ts rename to packages/auth-exp/src/core/persistence/in_memory.ts diff --git a/packages-exp/auth-exp/src/core/persistence/index.ts b/packages/auth-exp/src/core/persistence/index.ts similarity index 100% rename from packages-exp/auth-exp/src/core/persistence/index.ts rename to packages/auth-exp/src/core/persistence/index.ts diff --git a/packages-exp/auth-exp/src/core/persistence/persistence_user_manager.test.ts b/packages/auth-exp/src/core/persistence/persistence_user_manager.test.ts similarity index 100% rename from packages-exp/auth-exp/src/core/persistence/persistence_user_manager.test.ts rename to packages/auth-exp/src/core/persistence/persistence_user_manager.test.ts diff --git a/packages-exp/auth-exp/src/core/persistence/persistence_user_manager.ts b/packages/auth-exp/src/core/persistence/persistence_user_manager.ts similarity index 100% rename from packages-exp/auth-exp/src/core/persistence/persistence_user_manager.ts rename to packages/auth-exp/src/core/persistence/persistence_user_manager.ts diff --git a/packages-exp/auth-exp/src/core/providers/email.test.ts b/packages/auth-exp/src/core/providers/email.test.ts similarity index 100% rename from packages-exp/auth-exp/src/core/providers/email.test.ts rename to packages/auth-exp/src/core/providers/email.test.ts diff --git a/packages-exp/auth-exp/src/core/providers/email.ts b/packages/auth-exp/src/core/providers/email.ts similarity index 100% rename from packages-exp/auth-exp/src/core/providers/email.ts rename to packages/auth-exp/src/core/providers/email.ts diff --git a/packages-exp/auth-exp/src/core/providers/facebook.test.ts b/packages/auth-exp/src/core/providers/facebook.test.ts similarity index 100% rename from packages-exp/auth-exp/src/core/providers/facebook.test.ts rename to packages/auth-exp/src/core/providers/facebook.test.ts diff --git a/packages-exp/auth-exp/src/core/providers/facebook.ts b/packages/auth-exp/src/core/providers/facebook.ts similarity index 100% rename from packages-exp/auth-exp/src/core/providers/facebook.ts rename to packages/auth-exp/src/core/providers/facebook.ts diff --git a/packages-exp/auth-exp/src/core/providers/federated.test.ts b/packages/auth-exp/src/core/providers/federated.test.ts similarity index 100% rename from packages-exp/auth-exp/src/core/providers/federated.test.ts rename to packages/auth-exp/src/core/providers/federated.test.ts diff --git a/packages-exp/auth-exp/src/core/providers/federated.ts b/packages/auth-exp/src/core/providers/federated.ts similarity index 100% rename from packages-exp/auth-exp/src/core/providers/federated.ts rename to packages/auth-exp/src/core/providers/federated.ts diff --git a/packages-exp/auth-exp/src/core/providers/github.test.ts b/packages/auth-exp/src/core/providers/github.test.ts similarity index 100% rename from packages-exp/auth-exp/src/core/providers/github.test.ts rename to packages/auth-exp/src/core/providers/github.test.ts diff --git a/packages-exp/auth-exp/src/core/providers/github.ts b/packages/auth-exp/src/core/providers/github.ts similarity index 100% rename from packages-exp/auth-exp/src/core/providers/github.ts rename to packages/auth-exp/src/core/providers/github.ts diff --git a/packages-exp/auth-exp/src/core/providers/google.test.ts b/packages/auth-exp/src/core/providers/google.test.ts similarity index 100% rename from packages-exp/auth-exp/src/core/providers/google.test.ts rename to packages/auth-exp/src/core/providers/google.test.ts diff --git a/packages-exp/auth-exp/src/core/providers/google.ts b/packages/auth-exp/src/core/providers/google.ts similarity index 100% rename from packages-exp/auth-exp/src/core/providers/google.ts rename to packages/auth-exp/src/core/providers/google.ts diff --git a/packages-exp/auth-exp/src/core/providers/oauth.test.ts b/packages/auth-exp/src/core/providers/oauth.test.ts similarity index 100% rename from packages-exp/auth-exp/src/core/providers/oauth.test.ts rename to packages/auth-exp/src/core/providers/oauth.test.ts diff --git a/packages-exp/auth-exp/src/core/providers/oauth.ts b/packages/auth-exp/src/core/providers/oauth.ts similarity index 100% rename from packages-exp/auth-exp/src/core/providers/oauth.ts rename to packages/auth-exp/src/core/providers/oauth.ts diff --git a/packages-exp/auth-exp/src/core/providers/saml.test.ts b/packages/auth-exp/src/core/providers/saml.test.ts similarity index 100% rename from packages-exp/auth-exp/src/core/providers/saml.test.ts rename to packages/auth-exp/src/core/providers/saml.test.ts diff --git a/packages-exp/auth-exp/src/core/providers/saml.ts b/packages/auth-exp/src/core/providers/saml.ts similarity index 100% rename from packages-exp/auth-exp/src/core/providers/saml.ts rename to packages/auth-exp/src/core/providers/saml.ts diff --git a/packages-exp/auth-exp/src/core/providers/twitter.test.ts b/packages/auth-exp/src/core/providers/twitter.test.ts similarity index 100% rename from packages-exp/auth-exp/src/core/providers/twitter.test.ts rename to packages/auth-exp/src/core/providers/twitter.test.ts diff --git a/packages-exp/auth-exp/src/core/providers/twitter.ts b/packages/auth-exp/src/core/providers/twitter.ts similarity index 100% rename from packages-exp/auth-exp/src/core/providers/twitter.ts rename to packages/auth-exp/src/core/providers/twitter.ts diff --git a/packages-exp/auth-exp/src/core/strategies/abstract_popup_redirect_operation.test.ts b/packages/auth-exp/src/core/strategies/abstract_popup_redirect_operation.test.ts similarity index 100% rename from packages-exp/auth-exp/src/core/strategies/abstract_popup_redirect_operation.test.ts rename to packages/auth-exp/src/core/strategies/abstract_popup_redirect_operation.test.ts diff --git a/packages-exp/auth-exp/src/core/strategies/abstract_popup_redirect_operation.ts b/packages/auth-exp/src/core/strategies/abstract_popup_redirect_operation.ts similarity index 100% rename from packages-exp/auth-exp/src/core/strategies/abstract_popup_redirect_operation.ts rename to packages/auth-exp/src/core/strategies/abstract_popup_redirect_operation.ts diff --git a/packages-exp/auth-exp/src/core/strategies/action_code_settings.test.ts b/packages/auth-exp/src/core/strategies/action_code_settings.test.ts similarity index 100% rename from packages-exp/auth-exp/src/core/strategies/action_code_settings.test.ts rename to packages/auth-exp/src/core/strategies/action_code_settings.test.ts diff --git a/packages-exp/auth-exp/src/core/strategies/action_code_settings.ts b/packages/auth-exp/src/core/strategies/action_code_settings.ts similarity index 100% rename from packages-exp/auth-exp/src/core/strategies/action_code_settings.ts rename to packages/auth-exp/src/core/strategies/action_code_settings.ts diff --git a/packages-exp/auth-exp/src/core/strategies/anonymous.test.ts b/packages/auth-exp/src/core/strategies/anonymous.test.ts similarity index 100% rename from packages-exp/auth-exp/src/core/strategies/anonymous.test.ts rename to packages/auth-exp/src/core/strategies/anonymous.test.ts diff --git a/packages-exp/auth-exp/src/core/strategies/anonymous.ts b/packages/auth-exp/src/core/strategies/anonymous.ts similarity index 100% rename from packages-exp/auth-exp/src/core/strategies/anonymous.ts rename to packages/auth-exp/src/core/strategies/anonymous.ts diff --git a/packages-exp/auth-exp/src/core/strategies/credential.test.ts b/packages/auth-exp/src/core/strategies/credential.test.ts similarity index 100% rename from packages-exp/auth-exp/src/core/strategies/credential.test.ts rename to packages/auth-exp/src/core/strategies/credential.test.ts diff --git a/packages-exp/auth-exp/src/core/strategies/credential.ts b/packages/auth-exp/src/core/strategies/credential.ts similarity index 100% rename from packages-exp/auth-exp/src/core/strategies/credential.ts rename to packages/auth-exp/src/core/strategies/credential.ts diff --git a/packages-exp/auth-exp/src/core/strategies/custom_token.test.ts b/packages/auth-exp/src/core/strategies/custom_token.test.ts similarity index 100% rename from packages-exp/auth-exp/src/core/strategies/custom_token.test.ts rename to packages/auth-exp/src/core/strategies/custom_token.test.ts diff --git a/packages-exp/auth-exp/src/core/strategies/custom_token.ts b/packages/auth-exp/src/core/strategies/custom_token.ts similarity index 100% rename from packages-exp/auth-exp/src/core/strategies/custom_token.ts rename to packages/auth-exp/src/core/strategies/custom_token.ts diff --git a/packages-exp/auth-exp/src/core/strategies/email.test.ts b/packages/auth-exp/src/core/strategies/email.test.ts similarity index 100% rename from packages-exp/auth-exp/src/core/strategies/email.test.ts rename to packages/auth-exp/src/core/strategies/email.test.ts diff --git a/packages-exp/auth-exp/src/core/strategies/email.ts b/packages/auth-exp/src/core/strategies/email.ts similarity index 100% rename from packages-exp/auth-exp/src/core/strategies/email.ts rename to packages/auth-exp/src/core/strategies/email.ts diff --git a/packages-exp/auth-exp/src/core/strategies/email_and_password.test.ts b/packages/auth-exp/src/core/strategies/email_and_password.test.ts similarity index 100% rename from packages-exp/auth-exp/src/core/strategies/email_and_password.test.ts rename to packages/auth-exp/src/core/strategies/email_and_password.test.ts diff --git a/packages-exp/auth-exp/src/core/strategies/email_and_password.ts b/packages/auth-exp/src/core/strategies/email_and_password.ts similarity index 100% rename from packages-exp/auth-exp/src/core/strategies/email_and_password.ts rename to packages/auth-exp/src/core/strategies/email_and_password.ts diff --git a/packages-exp/auth-exp/src/core/strategies/email_link.test.ts b/packages/auth-exp/src/core/strategies/email_link.test.ts similarity index 100% rename from packages-exp/auth-exp/src/core/strategies/email_link.test.ts rename to packages/auth-exp/src/core/strategies/email_link.test.ts diff --git a/packages-exp/auth-exp/src/core/strategies/email_link.ts b/packages/auth-exp/src/core/strategies/email_link.ts similarity index 100% rename from packages-exp/auth-exp/src/core/strategies/email_link.ts rename to packages/auth-exp/src/core/strategies/email_link.ts diff --git a/packages-exp/auth-exp/src/core/strategies/idp.test.ts b/packages/auth-exp/src/core/strategies/idp.test.ts similarity index 100% rename from packages-exp/auth-exp/src/core/strategies/idp.test.ts rename to packages/auth-exp/src/core/strategies/idp.test.ts diff --git a/packages-exp/auth-exp/src/core/strategies/idp.ts b/packages/auth-exp/src/core/strategies/idp.ts similarity index 100% rename from packages-exp/auth-exp/src/core/strategies/idp.ts rename to packages/auth-exp/src/core/strategies/idp.ts diff --git a/packages-exp/auth-exp/src/core/strategies/redirect.test.ts b/packages/auth-exp/src/core/strategies/redirect.test.ts similarity index 100% rename from packages-exp/auth-exp/src/core/strategies/redirect.test.ts rename to packages/auth-exp/src/core/strategies/redirect.test.ts diff --git a/packages-exp/auth-exp/src/core/strategies/redirect.ts b/packages/auth-exp/src/core/strategies/redirect.ts similarity index 100% rename from packages-exp/auth-exp/src/core/strategies/redirect.ts rename to packages/auth-exp/src/core/strategies/redirect.ts diff --git a/packages-exp/auth-exp/src/core/user/account_info.test.ts b/packages/auth-exp/src/core/user/account_info.test.ts similarity index 100% rename from packages-exp/auth-exp/src/core/user/account_info.test.ts rename to packages/auth-exp/src/core/user/account_info.test.ts diff --git a/packages-exp/auth-exp/src/core/user/account_info.ts b/packages/auth-exp/src/core/user/account_info.ts similarity index 100% rename from packages-exp/auth-exp/src/core/user/account_info.ts rename to packages/auth-exp/src/core/user/account_info.ts diff --git a/packages-exp/auth-exp/src/core/user/additional_user_info.test.ts b/packages/auth-exp/src/core/user/additional_user_info.test.ts similarity index 100% rename from packages-exp/auth-exp/src/core/user/additional_user_info.test.ts rename to packages/auth-exp/src/core/user/additional_user_info.test.ts diff --git a/packages-exp/auth-exp/src/core/user/additional_user_info.ts b/packages/auth-exp/src/core/user/additional_user_info.ts similarity index 100% rename from packages-exp/auth-exp/src/core/user/additional_user_info.ts rename to packages/auth-exp/src/core/user/additional_user_info.ts diff --git a/packages-exp/auth-exp/src/core/user/id_token_result.test.ts b/packages/auth-exp/src/core/user/id_token_result.test.ts similarity index 100% rename from packages-exp/auth-exp/src/core/user/id_token_result.test.ts rename to packages/auth-exp/src/core/user/id_token_result.test.ts diff --git a/packages-exp/auth-exp/src/core/user/id_token_result.ts b/packages/auth-exp/src/core/user/id_token_result.ts similarity index 100% rename from packages-exp/auth-exp/src/core/user/id_token_result.ts rename to packages/auth-exp/src/core/user/id_token_result.ts diff --git a/packages-exp/auth-exp/src/core/user/invalidation.test.ts b/packages/auth-exp/src/core/user/invalidation.test.ts similarity index 100% rename from packages-exp/auth-exp/src/core/user/invalidation.test.ts rename to packages/auth-exp/src/core/user/invalidation.test.ts diff --git a/packages-exp/auth-exp/src/core/user/invalidation.ts b/packages/auth-exp/src/core/user/invalidation.ts similarity index 100% rename from packages-exp/auth-exp/src/core/user/invalidation.ts rename to packages/auth-exp/src/core/user/invalidation.ts diff --git a/packages-exp/auth-exp/src/core/user/link_unlink.test.ts b/packages/auth-exp/src/core/user/link_unlink.test.ts similarity index 100% rename from packages-exp/auth-exp/src/core/user/link_unlink.test.ts rename to packages/auth-exp/src/core/user/link_unlink.test.ts diff --git a/packages-exp/auth-exp/src/core/user/link_unlink.ts b/packages/auth-exp/src/core/user/link_unlink.ts similarity index 100% rename from packages-exp/auth-exp/src/core/user/link_unlink.ts rename to packages/auth-exp/src/core/user/link_unlink.ts diff --git a/packages-exp/auth-exp/src/core/user/proactive_refresh.test.ts b/packages/auth-exp/src/core/user/proactive_refresh.test.ts similarity index 100% rename from packages-exp/auth-exp/src/core/user/proactive_refresh.test.ts rename to packages/auth-exp/src/core/user/proactive_refresh.test.ts diff --git a/packages-exp/auth-exp/src/core/user/proactive_refresh.ts b/packages/auth-exp/src/core/user/proactive_refresh.ts similarity index 100% rename from packages-exp/auth-exp/src/core/user/proactive_refresh.ts rename to packages/auth-exp/src/core/user/proactive_refresh.ts diff --git a/packages-exp/auth-exp/src/core/user/reauthenticate.test.ts b/packages/auth-exp/src/core/user/reauthenticate.test.ts similarity index 100% rename from packages-exp/auth-exp/src/core/user/reauthenticate.test.ts rename to packages/auth-exp/src/core/user/reauthenticate.test.ts diff --git a/packages-exp/auth-exp/src/core/user/reauthenticate.ts b/packages/auth-exp/src/core/user/reauthenticate.ts similarity index 100% rename from packages-exp/auth-exp/src/core/user/reauthenticate.ts rename to packages/auth-exp/src/core/user/reauthenticate.ts diff --git a/packages-exp/auth-exp/src/core/user/reload.test.ts b/packages/auth-exp/src/core/user/reload.test.ts similarity index 100% rename from packages-exp/auth-exp/src/core/user/reload.test.ts rename to packages/auth-exp/src/core/user/reload.test.ts diff --git a/packages-exp/auth-exp/src/core/user/reload.ts b/packages/auth-exp/src/core/user/reload.ts similarity index 100% rename from packages-exp/auth-exp/src/core/user/reload.ts rename to packages/auth-exp/src/core/user/reload.ts diff --git a/packages-exp/auth-exp/src/core/user/token_manager.test.ts b/packages/auth-exp/src/core/user/token_manager.test.ts similarity index 100% rename from packages-exp/auth-exp/src/core/user/token_manager.test.ts rename to packages/auth-exp/src/core/user/token_manager.test.ts diff --git a/packages-exp/auth-exp/src/core/user/token_manager.ts b/packages/auth-exp/src/core/user/token_manager.ts similarity index 100% rename from packages-exp/auth-exp/src/core/user/token_manager.ts rename to packages/auth-exp/src/core/user/token_manager.ts diff --git a/packages-exp/auth-exp/src/core/user/user_credential_impl.test.ts b/packages/auth-exp/src/core/user/user_credential_impl.test.ts similarity index 100% rename from packages-exp/auth-exp/src/core/user/user_credential_impl.test.ts rename to packages/auth-exp/src/core/user/user_credential_impl.test.ts diff --git a/packages-exp/auth-exp/src/core/user/user_credential_impl.ts b/packages/auth-exp/src/core/user/user_credential_impl.ts similarity index 100% rename from packages-exp/auth-exp/src/core/user/user_credential_impl.ts rename to packages/auth-exp/src/core/user/user_credential_impl.ts diff --git a/packages-exp/auth-exp/src/core/user/user_impl.test.ts b/packages/auth-exp/src/core/user/user_impl.test.ts similarity index 100% rename from packages-exp/auth-exp/src/core/user/user_impl.test.ts rename to packages/auth-exp/src/core/user/user_impl.test.ts diff --git a/packages-exp/auth-exp/src/core/user/user_impl.ts b/packages/auth-exp/src/core/user/user_impl.ts similarity index 100% rename from packages-exp/auth-exp/src/core/user/user_impl.ts rename to packages/auth-exp/src/core/user/user_impl.ts diff --git a/packages-exp/auth-exp/src/core/user/user_metadata.ts b/packages/auth-exp/src/core/user/user_metadata.ts similarity index 100% rename from packages-exp/auth-exp/src/core/user/user_metadata.ts rename to packages/auth-exp/src/core/user/user_metadata.ts diff --git a/packages-exp/auth-exp/src/core/util/assert.test.ts b/packages/auth-exp/src/core/util/assert.test.ts similarity index 100% rename from packages-exp/auth-exp/src/core/util/assert.test.ts rename to packages/auth-exp/src/core/util/assert.test.ts diff --git a/packages-exp/auth-exp/src/core/util/assert.ts b/packages/auth-exp/src/core/util/assert.ts similarity index 100% rename from packages-exp/auth-exp/src/core/util/assert.ts rename to packages/auth-exp/src/core/util/assert.ts diff --git a/packages-exp/auth-exp/src/core/util/browser.test.ts b/packages/auth-exp/src/core/util/browser.test.ts similarity index 100% rename from packages-exp/auth-exp/src/core/util/browser.test.ts rename to packages/auth-exp/src/core/util/browser.test.ts diff --git a/packages-exp/auth-exp/src/core/util/browser.ts b/packages/auth-exp/src/core/util/browser.ts similarity index 100% rename from packages-exp/auth-exp/src/core/util/browser.ts rename to packages/auth-exp/src/core/util/browser.ts diff --git a/packages-exp/auth-exp/src/core/util/delay.test.ts b/packages/auth-exp/src/core/util/delay.test.ts similarity index 100% rename from packages-exp/auth-exp/src/core/util/delay.test.ts rename to packages/auth-exp/src/core/util/delay.test.ts diff --git a/packages-exp/auth-exp/src/core/util/delay.ts b/packages/auth-exp/src/core/util/delay.ts similarity index 100% rename from packages-exp/auth-exp/src/core/util/delay.ts rename to packages/auth-exp/src/core/util/delay.ts diff --git a/packages-exp/auth-exp/src/core/util/emulator.test.ts b/packages/auth-exp/src/core/util/emulator.test.ts similarity index 100% rename from packages-exp/auth-exp/src/core/util/emulator.test.ts rename to packages/auth-exp/src/core/util/emulator.test.ts diff --git a/packages-exp/auth-exp/src/core/util/emulator.ts b/packages/auth-exp/src/core/util/emulator.ts similarity index 100% rename from packages-exp/auth-exp/src/core/util/emulator.ts rename to packages/auth-exp/src/core/util/emulator.ts diff --git a/packages-exp/auth-exp/src/core/util/event_id.test.ts b/packages/auth-exp/src/core/util/event_id.test.ts similarity index 100% rename from packages-exp/auth-exp/src/core/util/event_id.test.ts rename to packages/auth-exp/src/core/util/event_id.test.ts diff --git a/packages-exp/auth-exp/src/core/util/event_id.ts b/packages/auth-exp/src/core/util/event_id.ts similarity index 100% rename from packages-exp/auth-exp/src/core/util/event_id.ts rename to packages/auth-exp/src/core/util/event_id.ts diff --git a/packages-exp/auth-exp/src/core/util/fetch_provider.ts b/packages/auth-exp/src/core/util/fetch_provider.ts similarity index 100% rename from packages-exp/auth-exp/src/core/util/fetch_provider.ts rename to packages/auth-exp/src/core/util/fetch_provider.ts diff --git a/packages-exp/auth-exp/src/core/util/handler.ts b/packages/auth-exp/src/core/util/handler.ts similarity index 100% rename from packages-exp/auth-exp/src/core/util/handler.ts rename to packages/auth-exp/src/core/util/handler.ts diff --git a/packages-exp/auth-exp/src/core/util/instantiator.test.ts b/packages/auth-exp/src/core/util/instantiator.test.ts similarity index 100% rename from packages-exp/auth-exp/src/core/util/instantiator.test.ts rename to packages/auth-exp/src/core/util/instantiator.test.ts diff --git a/packages-exp/auth-exp/src/core/util/instantiator.ts b/packages/auth-exp/src/core/util/instantiator.ts similarity index 100% rename from packages-exp/auth-exp/src/core/util/instantiator.ts rename to packages/auth-exp/src/core/util/instantiator.ts diff --git a/packages-exp/auth-exp/src/core/util/location.ts b/packages/auth-exp/src/core/util/location.ts similarity index 100% rename from packages-exp/auth-exp/src/core/util/location.ts rename to packages/auth-exp/src/core/util/location.ts diff --git a/packages-exp/auth-exp/src/core/util/log.ts b/packages/auth-exp/src/core/util/log.ts similarity index 100% rename from packages-exp/auth-exp/src/core/util/log.ts rename to packages/auth-exp/src/core/util/log.ts diff --git a/packages-exp/auth-exp/src/core/util/navigator.ts b/packages/auth-exp/src/core/util/navigator.ts similarity index 100% rename from packages-exp/auth-exp/src/core/util/navigator.ts rename to packages/auth-exp/src/core/util/navigator.ts diff --git a/packages-exp/auth-exp/src/core/util/providers.ts b/packages/auth-exp/src/core/util/providers.ts similarity index 100% rename from packages-exp/auth-exp/src/core/util/providers.ts rename to packages/auth-exp/src/core/util/providers.ts diff --git a/packages-exp/auth-exp/src/core/util/resolver.ts b/packages/auth-exp/src/core/util/resolver.ts similarity index 100% rename from packages-exp/auth-exp/src/core/util/resolver.ts rename to packages/auth-exp/src/core/util/resolver.ts diff --git a/packages-exp/auth-exp/src/core/util/time.ts b/packages/auth-exp/src/core/util/time.ts similarity index 100% rename from packages-exp/auth-exp/src/core/util/time.ts rename to packages/auth-exp/src/core/util/time.ts diff --git a/packages-exp/auth-exp/src/core/util/validate_origin.test.ts b/packages/auth-exp/src/core/util/validate_origin.test.ts similarity index 100% rename from packages-exp/auth-exp/src/core/util/validate_origin.test.ts rename to packages/auth-exp/src/core/util/validate_origin.test.ts diff --git a/packages-exp/auth-exp/src/core/util/validate_origin.ts b/packages/auth-exp/src/core/util/validate_origin.ts similarity index 100% rename from packages-exp/auth-exp/src/core/util/validate_origin.ts rename to packages/auth-exp/src/core/util/validate_origin.ts diff --git a/packages-exp/auth-exp/src/core/util/version.test.ts b/packages/auth-exp/src/core/util/version.test.ts similarity index 100% rename from packages-exp/auth-exp/src/core/util/version.test.ts rename to packages/auth-exp/src/core/util/version.test.ts diff --git a/packages-exp/auth-exp/src/core/util/version.ts b/packages/auth-exp/src/core/util/version.ts similarity index 100% rename from packages-exp/auth-exp/src/core/util/version.ts rename to packages/auth-exp/src/core/util/version.ts diff --git a/packages-exp/auth-exp/src/index.ts b/packages/auth-exp/src/index.ts similarity index 100% rename from packages-exp/auth-exp/src/index.ts rename to packages/auth-exp/src/index.ts diff --git a/packages-exp/auth-exp/src/mfa/index.ts b/packages/auth-exp/src/mfa/index.ts similarity index 100% rename from packages-exp/auth-exp/src/mfa/index.ts rename to packages/auth-exp/src/mfa/index.ts diff --git a/packages-exp/auth-exp/src/mfa/mfa_assertion.ts b/packages/auth-exp/src/mfa/mfa_assertion.ts similarity index 100% rename from packages-exp/auth-exp/src/mfa/mfa_assertion.ts rename to packages/auth-exp/src/mfa/mfa_assertion.ts diff --git a/packages-exp/auth-exp/src/mfa/mfa_error.ts b/packages/auth-exp/src/mfa/mfa_error.ts similarity index 100% rename from packages-exp/auth-exp/src/mfa/mfa_error.ts rename to packages/auth-exp/src/mfa/mfa_error.ts diff --git a/packages-exp/auth-exp/src/mfa/mfa_info.test.ts b/packages/auth-exp/src/mfa/mfa_info.test.ts similarity index 100% rename from packages-exp/auth-exp/src/mfa/mfa_info.test.ts rename to packages/auth-exp/src/mfa/mfa_info.test.ts diff --git a/packages-exp/auth-exp/src/mfa/mfa_info.ts b/packages/auth-exp/src/mfa/mfa_info.ts similarity index 100% rename from packages-exp/auth-exp/src/mfa/mfa_info.ts rename to packages/auth-exp/src/mfa/mfa_info.ts diff --git a/packages-exp/auth-exp/src/mfa/mfa_resolver.test.ts b/packages/auth-exp/src/mfa/mfa_resolver.test.ts similarity index 100% rename from packages-exp/auth-exp/src/mfa/mfa_resolver.test.ts rename to packages/auth-exp/src/mfa/mfa_resolver.test.ts diff --git a/packages-exp/auth-exp/src/mfa/mfa_resolver.ts b/packages/auth-exp/src/mfa/mfa_resolver.ts similarity index 100% rename from packages-exp/auth-exp/src/mfa/mfa_resolver.ts rename to packages/auth-exp/src/mfa/mfa_resolver.ts diff --git a/packages-exp/auth-exp/src/mfa/mfa_session.test.ts b/packages/auth-exp/src/mfa/mfa_session.test.ts similarity index 100% rename from packages-exp/auth-exp/src/mfa/mfa_session.test.ts rename to packages/auth-exp/src/mfa/mfa_session.test.ts diff --git a/packages-exp/auth-exp/src/mfa/mfa_session.ts b/packages/auth-exp/src/mfa/mfa_session.ts similarity index 100% rename from packages-exp/auth-exp/src/mfa/mfa_session.ts rename to packages/auth-exp/src/mfa/mfa_session.ts diff --git a/packages-exp/auth-exp/src/mfa/mfa_user.test.ts b/packages/auth-exp/src/mfa/mfa_user.test.ts similarity index 100% rename from packages-exp/auth-exp/src/mfa/mfa_user.test.ts rename to packages/auth-exp/src/mfa/mfa_user.test.ts diff --git a/packages-exp/auth-exp/src/mfa/mfa_user.ts b/packages/auth-exp/src/mfa/mfa_user.ts similarity index 100% rename from packages-exp/auth-exp/src/mfa/mfa_user.ts rename to packages/auth-exp/src/mfa/mfa_user.ts diff --git a/packages-exp/auth-exp/src/model/application_verifier.ts b/packages/auth-exp/src/model/application_verifier.ts similarity index 100% rename from packages-exp/auth-exp/src/model/application_verifier.ts rename to packages/auth-exp/src/model/application_verifier.ts diff --git a/packages-exp/auth-exp/src/model/auth.ts b/packages/auth-exp/src/model/auth.ts similarity index 100% rename from packages-exp/auth-exp/src/model/auth.ts rename to packages/auth-exp/src/model/auth.ts diff --git a/packages-exp/auth-exp/src/model/enum_maps.ts b/packages/auth-exp/src/model/enum_maps.ts similarity index 100% rename from packages-exp/auth-exp/src/model/enum_maps.ts rename to packages/auth-exp/src/model/enum_maps.ts diff --git a/packages-exp/auth-exp/src/model/enums.ts b/packages/auth-exp/src/model/enums.ts similarity index 100% rename from packages-exp/auth-exp/src/model/enums.ts rename to packages/auth-exp/src/model/enums.ts diff --git a/packages-exp/auth-exp/src/model/id_token.ts b/packages/auth-exp/src/model/id_token.ts similarity index 100% rename from packages-exp/auth-exp/src/model/id_token.ts rename to packages/auth-exp/src/model/id_token.ts diff --git a/packages-exp/auth-exp/src/model/popup_redirect.ts b/packages/auth-exp/src/model/popup_redirect.ts similarity index 100% rename from packages-exp/auth-exp/src/model/popup_redirect.ts rename to packages/auth-exp/src/model/popup_redirect.ts diff --git a/packages-exp/auth-exp/src/model/public_types.ts b/packages/auth-exp/src/model/public_types.ts similarity index 100% rename from packages-exp/auth-exp/src/model/public_types.ts rename to packages/auth-exp/src/model/public_types.ts diff --git a/packages-exp/auth-exp/src/model/user.ts b/packages/auth-exp/src/model/user.ts similarity index 100% rename from packages-exp/auth-exp/src/model/user.ts rename to packages/auth-exp/src/model/user.ts diff --git a/packages-exp/auth-exp/src/platform_browser/auth.test.ts b/packages/auth-exp/src/platform_browser/auth.test.ts similarity index 100% rename from packages-exp/auth-exp/src/platform_browser/auth.test.ts rename to packages/auth-exp/src/platform_browser/auth.test.ts diff --git a/packages-exp/auth-exp/src/platform_browser/auth_window.ts b/packages/auth-exp/src/platform_browser/auth_window.ts similarity index 100% rename from packages-exp/auth-exp/src/platform_browser/auth_window.ts rename to packages/auth-exp/src/platform_browser/auth_window.ts diff --git a/packages-exp/auth-exp/src/platform_browser/iframe/gapi.iframes.ts b/packages/auth-exp/src/platform_browser/iframe/gapi.iframes.ts similarity index 100% rename from packages-exp/auth-exp/src/platform_browser/iframe/gapi.iframes.ts rename to packages/auth-exp/src/platform_browser/iframe/gapi.iframes.ts diff --git a/packages-exp/auth-exp/src/platform_browser/iframe/gapi.test.ts b/packages/auth-exp/src/platform_browser/iframe/gapi.test.ts similarity index 100% rename from packages-exp/auth-exp/src/platform_browser/iframe/gapi.test.ts rename to packages/auth-exp/src/platform_browser/iframe/gapi.test.ts diff --git a/packages-exp/auth-exp/src/platform_browser/iframe/gapi.ts b/packages/auth-exp/src/platform_browser/iframe/gapi.ts similarity index 100% rename from packages-exp/auth-exp/src/platform_browser/iframe/gapi.ts rename to packages/auth-exp/src/platform_browser/iframe/gapi.ts diff --git a/packages-exp/auth-exp/src/platform_browser/iframe/iframe.test.ts b/packages/auth-exp/src/platform_browser/iframe/iframe.test.ts similarity index 100% rename from packages-exp/auth-exp/src/platform_browser/iframe/iframe.test.ts rename to packages/auth-exp/src/platform_browser/iframe/iframe.test.ts diff --git a/packages-exp/auth-exp/src/platform_browser/iframe/iframe.ts b/packages/auth-exp/src/platform_browser/iframe/iframe.ts similarity index 100% rename from packages-exp/auth-exp/src/platform_browser/iframe/iframe.ts rename to packages/auth-exp/src/platform_browser/iframe/iframe.ts diff --git a/packages-exp/auth-exp/src/platform_browser/load_js.test.ts b/packages/auth-exp/src/platform_browser/load_js.test.ts similarity index 100% rename from packages-exp/auth-exp/src/platform_browser/load_js.test.ts rename to packages/auth-exp/src/platform_browser/load_js.test.ts diff --git a/packages-exp/auth-exp/src/platform_browser/load_js.ts b/packages/auth-exp/src/platform_browser/load_js.ts similarity index 100% rename from packages-exp/auth-exp/src/platform_browser/load_js.ts rename to packages/auth-exp/src/platform_browser/load_js.ts diff --git a/packages-exp/auth-exp/src/platform_browser/messagechannel/index.ts b/packages/auth-exp/src/platform_browser/messagechannel/index.ts similarity index 100% rename from packages-exp/auth-exp/src/platform_browser/messagechannel/index.ts rename to packages/auth-exp/src/platform_browser/messagechannel/index.ts diff --git a/packages-exp/auth-exp/src/platform_browser/messagechannel/promise.test.ts b/packages/auth-exp/src/platform_browser/messagechannel/promise.test.ts similarity index 100% rename from packages-exp/auth-exp/src/platform_browser/messagechannel/promise.test.ts rename to packages/auth-exp/src/platform_browser/messagechannel/promise.test.ts diff --git a/packages-exp/auth-exp/src/platform_browser/messagechannel/promise.ts b/packages/auth-exp/src/platform_browser/messagechannel/promise.ts similarity index 100% rename from packages-exp/auth-exp/src/platform_browser/messagechannel/promise.ts rename to packages/auth-exp/src/platform_browser/messagechannel/promise.ts diff --git a/packages-exp/auth-exp/src/platform_browser/messagechannel/receiver.test.ts b/packages/auth-exp/src/platform_browser/messagechannel/receiver.test.ts similarity index 100% rename from packages-exp/auth-exp/src/platform_browser/messagechannel/receiver.test.ts rename to packages/auth-exp/src/platform_browser/messagechannel/receiver.test.ts diff --git a/packages-exp/auth-exp/src/platform_browser/messagechannel/receiver.ts b/packages/auth-exp/src/platform_browser/messagechannel/receiver.ts similarity index 100% rename from packages-exp/auth-exp/src/platform_browser/messagechannel/receiver.ts rename to packages/auth-exp/src/platform_browser/messagechannel/receiver.ts diff --git a/packages-exp/auth-exp/src/platform_browser/messagechannel/sender.test.ts b/packages/auth-exp/src/platform_browser/messagechannel/sender.test.ts similarity index 100% rename from packages-exp/auth-exp/src/platform_browser/messagechannel/sender.test.ts rename to packages/auth-exp/src/platform_browser/messagechannel/sender.test.ts diff --git a/packages-exp/auth-exp/src/platform_browser/messagechannel/sender.ts b/packages/auth-exp/src/platform_browser/messagechannel/sender.ts similarity index 100% rename from packages-exp/auth-exp/src/platform_browser/messagechannel/sender.ts rename to packages/auth-exp/src/platform_browser/messagechannel/sender.ts diff --git a/packages-exp/auth-exp/src/platform_browser/mfa/assertions/phone.test.ts b/packages/auth-exp/src/platform_browser/mfa/assertions/phone.test.ts similarity index 100% rename from packages-exp/auth-exp/src/platform_browser/mfa/assertions/phone.test.ts rename to packages/auth-exp/src/platform_browser/mfa/assertions/phone.test.ts diff --git a/packages-exp/auth-exp/src/platform_browser/mfa/assertions/phone.ts b/packages/auth-exp/src/platform_browser/mfa/assertions/phone.ts similarity index 100% rename from packages-exp/auth-exp/src/platform_browser/mfa/assertions/phone.ts rename to packages/auth-exp/src/platform_browser/mfa/assertions/phone.ts diff --git a/packages-exp/auth-exp/src/platform_browser/persistence/browser.ts b/packages/auth-exp/src/platform_browser/persistence/browser.ts similarity index 100% rename from packages-exp/auth-exp/src/platform_browser/persistence/browser.ts rename to packages/auth-exp/src/platform_browser/persistence/browser.ts diff --git a/packages-exp/auth-exp/src/platform_browser/persistence/indexed_db.test.ts b/packages/auth-exp/src/platform_browser/persistence/indexed_db.test.ts similarity index 100% rename from packages-exp/auth-exp/src/platform_browser/persistence/indexed_db.test.ts rename to packages/auth-exp/src/platform_browser/persistence/indexed_db.test.ts diff --git a/packages-exp/auth-exp/src/platform_browser/persistence/indexed_db.ts b/packages/auth-exp/src/platform_browser/persistence/indexed_db.ts similarity index 100% rename from packages-exp/auth-exp/src/platform_browser/persistence/indexed_db.ts rename to packages/auth-exp/src/platform_browser/persistence/indexed_db.ts diff --git a/packages-exp/auth-exp/src/platform_browser/persistence/local_storage.test.ts b/packages/auth-exp/src/platform_browser/persistence/local_storage.test.ts similarity index 100% rename from packages-exp/auth-exp/src/platform_browser/persistence/local_storage.test.ts rename to packages/auth-exp/src/platform_browser/persistence/local_storage.test.ts diff --git a/packages-exp/auth-exp/src/platform_browser/persistence/local_storage.ts b/packages/auth-exp/src/platform_browser/persistence/local_storage.ts similarity index 100% rename from packages-exp/auth-exp/src/platform_browser/persistence/local_storage.ts rename to packages/auth-exp/src/platform_browser/persistence/local_storage.ts diff --git a/packages-exp/auth-exp/src/platform_browser/persistence/session_storage.test.ts b/packages/auth-exp/src/platform_browser/persistence/session_storage.test.ts similarity index 100% rename from packages-exp/auth-exp/src/platform_browser/persistence/session_storage.test.ts rename to packages/auth-exp/src/platform_browser/persistence/session_storage.test.ts diff --git a/packages-exp/auth-exp/src/platform_browser/persistence/session_storage.ts b/packages/auth-exp/src/platform_browser/persistence/session_storage.ts similarity index 100% rename from packages-exp/auth-exp/src/platform_browser/persistence/session_storage.ts rename to packages/auth-exp/src/platform_browser/persistence/session_storage.ts diff --git a/packages-exp/auth-exp/src/platform_browser/popup_redirect.test.ts b/packages/auth-exp/src/platform_browser/popup_redirect.test.ts similarity index 100% rename from packages-exp/auth-exp/src/platform_browser/popup_redirect.test.ts rename to packages/auth-exp/src/platform_browser/popup_redirect.test.ts diff --git a/packages-exp/auth-exp/src/platform_browser/popup_redirect.ts b/packages/auth-exp/src/platform_browser/popup_redirect.ts similarity index 100% rename from packages-exp/auth-exp/src/platform_browser/popup_redirect.ts rename to packages/auth-exp/src/platform_browser/popup_redirect.ts diff --git a/packages-exp/auth-exp/src/platform_browser/providers/phone.test.ts b/packages/auth-exp/src/platform_browser/providers/phone.test.ts similarity index 100% rename from packages-exp/auth-exp/src/platform_browser/providers/phone.test.ts rename to packages/auth-exp/src/platform_browser/providers/phone.test.ts diff --git a/packages-exp/auth-exp/src/platform_browser/providers/phone.ts b/packages/auth-exp/src/platform_browser/providers/phone.ts similarity index 100% rename from packages-exp/auth-exp/src/platform_browser/providers/phone.ts rename to packages/auth-exp/src/platform_browser/providers/phone.ts diff --git a/packages-exp/auth-exp/src/platform_browser/recaptcha/recaptcha.ts b/packages/auth-exp/src/platform_browser/recaptcha/recaptcha.ts similarity index 100% rename from packages-exp/auth-exp/src/platform_browser/recaptcha/recaptcha.ts rename to packages/auth-exp/src/platform_browser/recaptcha/recaptcha.ts diff --git a/packages-exp/auth-exp/src/platform_browser/recaptcha/recaptcha_loader.test.ts b/packages/auth-exp/src/platform_browser/recaptcha/recaptcha_loader.test.ts similarity index 100% rename from packages-exp/auth-exp/src/platform_browser/recaptcha/recaptcha_loader.test.ts rename to packages/auth-exp/src/platform_browser/recaptcha/recaptcha_loader.test.ts diff --git a/packages-exp/auth-exp/src/platform_browser/recaptcha/recaptcha_loader.ts b/packages/auth-exp/src/platform_browser/recaptcha/recaptcha_loader.ts similarity index 100% rename from packages-exp/auth-exp/src/platform_browser/recaptcha/recaptcha_loader.ts rename to packages/auth-exp/src/platform_browser/recaptcha/recaptcha_loader.ts diff --git a/packages-exp/auth-exp/src/platform_browser/recaptcha/recaptcha_mock.test.ts b/packages/auth-exp/src/platform_browser/recaptcha/recaptcha_mock.test.ts similarity index 100% rename from packages-exp/auth-exp/src/platform_browser/recaptcha/recaptcha_mock.test.ts rename to packages/auth-exp/src/platform_browser/recaptcha/recaptcha_mock.test.ts diff --git a/packages-exp/auth-exp/src/platform_browser/recaptcha/recaptcha_mock.ts b/packages/auth-exp/src/platform_browser/recaptcha/recaptcha_mock.ts similarity index 100% rename from packages-exp/auth-exp/src/platform_browser/recaptcha/recaptcha_mock.ts rename to packages/auth-exp/src/platform_browser/recaptcha/recaptcha_mock.ts diff --git a/packages-exp/auth-exp/src/platform_browser/recaptcha/recaptcha_verifier.test.ts b/packages/auth-exp/src/platform_browser/recaptcha/recaptcha_verifier.test.ts similarity index 100% rename from packages-exp/auth-exp/src/platform_browser/recaptcha/recaptcha_verifier.test.ts rename to packages/auth-exp/src/platform_browser/recaptcha/recaptcha_verifier.test.ts diff --git a/packages-exp/auth-exp/src/platform_browser/recaptcha/recaptcha_verifier.ts b/packages/auth-exp/src/platform_browser/recaptcha/recaptcha_verifier.ts similarity index 100% rename from packages-exp/auth-exp/src/platform_browser/recaptcha/recaptcha_verifier.ts rename to packages/auth-exp/src/platform_browser/recaptcha/recaptcha_verifier.ts diff --git a/packages-exp/auth-exp/src/platform_browser/strategies/phone.test.ts b/packages/auth-exp/src/platform_browser/strategies/phone.test.ts similarity index 100% rename from packages-exp/auth-exp/src/platform_browser/strategies/phone.test.ts rename to packages/auth-exp/src/platform_browser/strategies/phone.test.ts diff --git a/packages-exp/auth-exp/src/platform_browser/strategies/phone.ts b/packages/auth-exp/src/platform_browser/strategies/phone.ts similarity index 100% rename from packages-exp/auth-exp/src/platform_browser/strategies/phone.ts rename to packages/auth-exp/src/platform_browser/strategies/phone.ts diff --git a/packages-exp/auth-exp/src/platform_browser/strategies/popup.test.ts b/packages/auth-exp/src/platform_browser/strategies/popup.test.ts similarity index 100% rename from packages-exp/auth-exp/src/platform_browser/strategies/popup.test.ts rename to packages/auth-exp/src/platform_browser/strategies/popup.test.ts diff --git a/packages-exp/auth-exp/src/platform_browser/strategies/popup.ts b/packages/auth-exp/src/platform_browser/strategies/popup.ts similarity index 100% rename from packages-exp/auth-exp/src/platform_browser/strategies/popup.ts rename to packages/auth-exp/src/platform_browser/strategies/popup.ts diff --git a/packages-exp/auth-exp/src/platform_browser/strategies/redirect.test.ts b/packages/auth-exp/src/platform_browser/strategies/redirect.test.ts similarity index 100% rename from packages-exp/auth-exp/src/platform_browser/strategies/redirect.test.ts rename to packages/auth-exp/src/platform_browser/strategies/redirect.test.ts diff --git a/packages-exp/auth-exp/src/platform_browser/strategies/redirect.ts b/packages/auth-exp/src/platform_browser/strategies/redirect.ts similarity index 100% rename from packages-exp/auth-exp/src/platform_browser/strategies/redirect.ts rename to packages/auth-exp/src/platform_browser/strategies/redirect.ts diff --git a/packages-exp/auth-exp/src/platform_browser/util/popup.test.ts b/packages/auth-exp/src/platform_browser/util/popup.test.ts similarity index 100% rename from packages-exp/auth-exp/src/platform_browser/util/popup.test.ts rename to packages/auth-exp/src/platform_browser/util/popup.test.ts diff --git a/packages-exp/auth-exp/src/platform_browser/util/popup.ts b/packages/auth-exp/src/platform_browser/util/popup.ts similarity index 100% rename from packages-exp/auth-exp/src/platform_browser/util/popup.ts rename to packages/auth-exp/src/platform_browser/util/popup.ts diff --git a/packages-exp/auth-exp/src/platform_browser/util/worker.ts b/packages/auth-exp/src/platform_browser/util/worker.ts similarity index 100% rename from packages-exp/auth-exp/src/platform_browser/util/worker.ts rename to packages/auth-exp/src/platform_browser/util/worker.ts diff --git a/packages-exp/auth-exp/src/platform_cordova/plugins.ts b/packages/auth-exp/src/platform_cordova/plugins.ts similarity index 100% rename from packages-exp/auth-exp/src/platform_cordova/plugins.ts rename to packages/auth-exp/src/platform_cordova/plugins.ts diff --git a/packages-exp/auth-exp/src/platform_cordova/popup_redirect/events.test.ts b/packages/auth-exp/src/platform_cordova/popup_redirect/events.test.ts similarity index 100% rename from packages-exp/auth-exp/src/platform_cordova/popup_redirect/events.test.ts rename to packages/auth-exp/src/platform_cordova/popup_redirect/events.test.ts diff --git a/packages-exp/auth-exp/src/platform_cordova/popup_redirect/events.ts b/packages/auth-exp/src/platform_cordova/popup_redirect/events.ts similarity index 100% rename from packages-exp/auth-exp/src/platform_cordova/popup_redirect/events.ts rename to packages/auth-exp/src/platform_cordova/popup_redirect/events.ts diff --git a/packages-exp/auth-exp/src/platform_cordova/popup_redirect/popup_redirect.test.ts b/packages/auth-exp/src/platform_cordova/popup_redirect/popup_redirect.test.ts similarity index 100% rename from packages-exp/auth-exp/src/platform_cordova/popup_redirect/popup_redirect.test.ts rename to packages/auth-exp/src/platform_cordova/popup_redirect/popup_redirect.test.ts diff --git a/packages-exp/auth-exp/src/platform_cordova/popup_redirect/popup_redirect.ts b/packages/auth-exp/src/platform_cordova/popup_redirect/popup_redirect.ts similarity index 100% rename from packages-exp/auth-exp/src/platform_cordova/popup_redirect/popup_redirect.ts rename to packages/auth-exp/src/platform_cordova/popup_redirect/popup_redirect.ts diff --git a/packages-exp/auth-exp/src/platform_cordova/popup_redirect/utils.test.ts b/packages/auth-exp/src/platform_cordova/popup_redirect/utils.test.ts similarity index 100% rename from packages-exp/auth-exp/src/platform_cordova/popup_redirect/utils.test.ts rename to packages/auth-exp/src/platform_cordova/popup_redirect/utils.test.ts diff --git a/packages-exp/auth-exp/src/platform_cordova/popup_redirect/utils.ts b/packages/auth-exp/src/platform_cordova/popup_redirect/utils.ts similarity index 100% rename from packages-exp/auth-exp/src/platform_cordova/popup_redirect/utils.ts rename to packages/auth-exp/src/platform_cordova/popup_redirect/utils.ts diff --git a/packages-exp/auth-exp/src/platform_cordova/strategies/redirect.ts b/packages/auth-exp/src/platform_cordova/strategies/redirect.ts similarity index 100% rename from packages-exp/auth-exp/src/platform_cordova/strategies/redirect.ts rename to packages/auth-exp/src/platform_cordova/strategies/redirect.ts diff --git a/packages-exp/auth-exp/src/platform_react_native/persistence/react_native.test.ts b/packages/auth-exp/src/platform_react_native/persistence/react_native.test.ts similarity index 100% rename from packages-exp/auth-exp/src/platform_react_native/persistence/react_native.test.ts rename to packages/auth-exp/src/platform_react_native/persistence/react_native.test.ts diff --git a/packages-exp/auth-exp/src/platform_react_native/persistence/react_native.ts b/packages/auth-exp/src/platform_react_native/persistence/react_native.ts similarity index 100% rename from packages-exp/auth-exp/src/platform_react_native/persistence/react_native.ts rename to packages/auth-exp/src/platform_react_native/persistence/react_native.ts diff --git a/packages-exp/auth-exp/src/platform_react_native/react-native.d.ts b/packages/auth-exp/src/platform_react_native/react-native.d.ts similarity index 100% rename from packages-exp/auth-exp/src/platform_react_native/react-native.d.ts rename to packages/auth-exp/src/platform_react_native/react-native.d.ts diff --git a/packages-exp/auth-exp/test/helpers/api/helper.ts b/packages/auth-exp/test/helpers/api/helper.ts similarity index 100% rename from packages-exp/auth-exp/test/helpers/api/helper.ts rename to packages/auth-exp/test/helpers/api/helper.ts diff --git a/packages-exp/auth-exp/test/helpers/delay.ts b/packages/auth-exp/test/helpers/delay.ts similarity index 100% rename from packages-exp/auth-exp/test/helpers/delay.ts rename to packages/auth-exp/test/helpers/delay.ts diff --git a/packages-exp/auth-exp/test/helpers/fake_service_worker.ts b/packages/auth-exp/test/helpers/fake_service_worker.ts similarity index 100% rename from packages-exp/auth-exp/test/helpers/fake_service_worker.ts rename to packages/auth-exp/test/helpers/fake_service_worker.ts diff --git a/packages-exp/auth-exp/test/helpers/id_token_response.ts b/packages/auth-exp/test/helpers/id_token_response.ts similarity index 100% rename from packages-exp/auth-exp/test/helpers/id_token_response.ts rename to packages/auth-exp/test/helpers/id_token_response.ts diff --git a/packages-exp/auth-exp/test/helpers/iframe_event.ts b/packages/auth-exp/test/helpers/iframe_event.ts similarity index 100% rename from packages-exp/auth-exp/test/helpers/iframe_event.ts rename to packages/auth-exp/test/helpers/iframe_event.ts diff --git a/packages-exp/auth-exp/test/helpers/integration/emulator_rest_helpers.ts b/packages/auth-exp/test/helpers/integration/emulator_rest_helpers.ts similarity index 100% rename from packages-exp/auth-exp/test/helpers/integration/emulator_rest_helpers.ts rename to packages/auth-exp/test/helpers/integration/emulator_rest_helpers.ts diff --git a/packages-exp/auth-exp/test/helpers/integration/helpers.ts b/packages/auth-exp/test/helpers/integration/helpers.ts similarity index 100% rename from packages-exp/auth-exp/test/helpers/integration/helpers.ts rename to packages/auth-exp/test/helpers/integration/helpers.ts diff --git a/packages-exp/auth-exp/test/helpers/integration/settings.ts b/packages/auth-exp/test/helpers/integration/settings.ts similarity index 100% rename from packages-exp/auth-exp/test/helpers/integration/settings.ts rename to packages/auth-exp/test/helpers/integration/settings.ts diff --git a/packages-exp/auth-exp/test/helpers/jwt.ts b/packages/auth-exp/test/helpers/jwt.ts similarity index 100% rename from packages-exp/auth-exp/test/helpers/jwt.ts rename to packages/auth-exp/test/helpers/jwt.ts diff --git a/packages-exp/auth-exp/test/helpers/mock_auth.ts b/packages/auth-exp/test/helpers/mock_auth.ts similarity index 100% rename from packages-exp/auth-exp/test/helpers/mock_auth.ts rename to packages/auth-exp/test/helpers/mock_auth.ts diff --git a/packages-exp/auth-exp/test/helpers/mock_auth_credential.ts b/packages/auth-exp/test/helpers/mock_auth_credential.ts similarity index 100% rename from packages-exp/auth-exp/test/helpers/mock_auth_credential.ts rename to packages/auth-exp/test/helpers/mock_auth_credential.ts diff --git a/packages-exp/auth-exp/test/helpers/mock_fetch.test.ts b/packages/auth-exp/test/helpers/mock_fetch.test.ts similarity index 100% rename from packages-exp/auth-exp/test/helpers/mock_fetch.test.ts rename to packages/auth-exp/test/helpers/mock_fetch.test.ts diff --git a/packages-exp/auth-exp/test/helpers/mock_fetch.ts b/packages/auth-exp/test/helpers/mock_fetch.ts similarity index 100% rename from packages-exp/auth-exp/test/helpers/mock_fetch.ts rename to packages/auth-exp/test/helpers/mock_fetch.ts diff --git a/packages-exp/auth-exp/test/helpers/mock_popup_redirect_resolver.ts b/packages/auth-exp/test/helpers/mock_popup_redirect_resolver.ts similarity index 100% rename from packages-exp/auth-exp/test/helpers/mock_popup_redirect_resolver.ts rename to packages/auth-exp/test/helpers/mock_popup_redirect_resolver.ts diff --git a/packages-exp/auth-exp/test/helpers/redirect_persistence.ts b/packages/auth-exp/test/helpers/redirect_persistence.ts similarity index 100% rename from packages-exp/auth-exp/test/helpers/redirect_persistence.ts rename to packages/auth-exp/test/helpers/redirect_persistence.ts diff --git a/packages-exp/auth-exp/test/helpers/timeout_stub.ts b/packages/auth-exp/test/helpers/timeout_stub.ts similarity index 100% rename from packages-exp/auth-exp/test/helpers/timeout_stub.ts rename to packages/auth-exp/test/helpers/timeout_stub.ts diff --git a/packages-exp/auth-exp/test/integration/flows/anonymous.test.ts b/packages/auth-exp/test/integration/flows/anonymous.test.ts similarity index 100% rename from packages-exp/auth-exp/test/integration/flows/anonymous.test.ts rename to packages/auth-exp/test/integration/flows/anonymous.test.ts diff --git a/packages-exp/auth-exp/test/integration/flows/custom.local.test.ts b/packages/auth-exp/test/integration/flows/custom.local.test.ts similarity index 100% rename from packages-exp/auth-exp/test/integration/flows/custom.local.test.ts rename to packages/auth-exp/test/integration/flows/custom.local.test.ts diff --git a/packages-exp/auth-exp/test/integration/flows/email.test.ts b/packages/auth-exp/test/integration/flows/email.test.ts similarity index 100% rename from packages-exp/auth-exp/test/integration/flows/email.test.ts rename to packages/auth-exp/test/integration/flows/email.test.ts diff --git a/packages-exp/auth-exp/test/integration/flows/idp.local.test.ts b/packages/auth-exp/test/integration/flows/idp.local.test.ts similarity index 100% rename from packages-exp/auth-exp/test/integration/flows/idp.local.test.ts rename to packages/auth-exp/test/integration/flows/idp.local.test.ts diff --git a/packages-exp/auth-exp/test/integration/flows/oob.local.test.ts b/packages/auth-exp/test/integration/flows/oob.local.test.ts similarity index 100% rename from packages-exp/auth-exp/test/integration/flows/oob.local.test.ts rename to packages/auth-exp/test/integration/flows/oob.local.test.ts diff --git a/packages-exp/auth-exp/test/integration/flows/phone.test.ts b/packages/auth-exp/test/integration/flows/phone.test.ts similarity index 100% rename from packages-exp/auth-exp/test/integration/flows/phone.test.ts rename to packages/auth-exp/test/integration/flows/phone.test.ts diff --git a/packages-exp/auth-exp/test/integration/webdriver/anonymous.test.ts b/packages/auth-exp/test/integration/webdriver/anonymous.test.ts similarity index 100% rename from packages-exp/auth-exp/test/integration/webdriver/anonymous.test.ts rename to packages/auth-exp/test/integration/webdriver/anonymous.test.ts diff --git a/packages-exp/auth-exp/test/integration/webdriver/compat/firebaseui.test.ts b/packages/auth-exp/test/integration/webdriver/compat/firebaseui.test.ts similarity index 100% rename from packages-exp/auth-exp/test/integration/webdriver/compat/firebaseui.test.ts rename to packages/auth-exp/test/integration/webdriver/compat/firebaseui.test.ts diff --git a/packages-exp/auth-exp/test/integration/webdriver/persistence.test.ts b/packages/auth-exp/test/integration/webdriver/persistence.test.ts similarity index 100% rename from packages-exp/auth-exp/test/integration/webdriver/persistence.test.ts rename to packages/auth-exp/test/integration/webdriver/persistence.test.ts diff --git a/packages-exp/auth-exp/test/integration/webdriver/popup.test.ts b/packages/auth-exp/test/integration/webdriver/popup.test.ts similarity index 100% rename from packages-exp/auth-exp/test/integration/webdriver/popup.test.ts rename to packages/auth-exp/test/integration/webdriver/popup.test.ts diff --git a/packages-exp/auth-exp/test/integration/webdriver/redirect.test.ts b/packages/auth-exp/test/integration/webdriver/redirect.test.ts similarity index 100% rename from packages-exp/auth-exp/test/integration/webdriver/redirect.test.ts rename to packages/auth-exp/test/integration/webdriver/redirect.test.ts diff --git a/packages-exp/auth-exp/test/integration/webdriver/static/anonymous.js b/packages/auth-exp/test/integration/webdriver/static/anonymous.js similarity index 100% rename from packages-exp/auth-exp/test/integration/webdriver/static/anonymous.js rename to packages/auth-exp/test/integration/webdriver/static/anonymous.js diff --git a/packages-exp/auth-exp/test/integration/webdriver/static/core.js b/packages/auth-exp/test/integration/webdriver/static/core.js similarity index 100% rename from packages-exp/auth-exp/test/integration/webdriver/static/core.js rename to packages/auth-exp/test/integration/webdriver/static/core.js diff --git a/packages-exp/auth-exp/test/integration/webdriver/static/email.js b/packages/auth-exp/test/integration/webdriver/static/email.js similarity index 100% rename from packages-exp/auth-exp/test/integration/webdriver/static/email.js rename to packages/auth-exp/test/integration/webdriver/static/email.js diff --git a/packages-exp/auth-exp/test/integration/webdriver/static/index.html b/packages/auth-exp/test/integration/webdriver/static/index.html similarity index 100% rename from packages-exp/auth-exp/test/integration/webdriver/static/index.html rename to packages/auth-exp/test/integration/webdriver/static/index.html diff --git a/packages-exp/auth-exp/test/integration/webdriver/static/index.js b/packages/auth-exp/test/integration/webdriver/static/index.js similarity index 100% rename from packages-exp/auth-exp/test/integration/webdriver/static/index.js rename to packages/auth-exp/test/integration/webdriver/static/index.js diff --git a/packages-exp/auth-exp/test/integration/webdriver/static/persistence.js b/packages/auth-exp/test/integration/webdriver/static/persistence.js similarity index 100% rename from packages-exp/auth-exp/test/integration/webdriver/static/persistence.js rename to packages/auth-exp/test/integration/webdriver/static/persistence.js diff --git a/packages-exp/auth-exp/test/integration/webdriver/static/popup.js b/packages/auth-exp/test/integration/webdriver/static/popup.js similarity index 100% rename from packages-exp/auth-exp/test/integration/webdriver/static/popup.js rename to packages/auth-exp/test/integration/webdriver/static/popup.js diff --git a/packages-exp/auth-exp/test/integration/webdriver/static/redirect.js b/packages/auth-exp/test/integration/webdriver/static/redirect.js similarity index 100% rename from packages-exp/auth-exp/test/integration/webdriver/static/redirect.js rename to packages/auth-exp/test/integration/webdriver/static/redirect.js diff --git a/packages-exp/auth-exp/test/integration/webdriver/static/rollup.config.js b/packages/auth-exp/test/integration/webdriver/static/rollup.config.js similarity index 100% rename from packages-exp/auth-exp/test/integration/webdriver/static/rollup.config.js rename to packages/auth-exp/test/integration/webdriver/static/rollup.config.js diff --git a/packages-exp/auth-exp/test/integration/webdriver/util/auth_driver.ts b/packages/auth-exp/test/integration/webdriver/util/auth_driver.ts similarity index 100% rename from packages-exp/auth-exp/test/integration/webdriver/util/auth_driver.ts rename to packages/auth-exp/test/integration/webdriver/util/auth_driver.ts diff --git a/packages-exp/auth-exp/test/integration/webdriver/util/functions.ts b/packages/auth-exp/test/integration/webdriver/util/functions.ts similarity index 100% rename from packages-exp/auth-exp/test/integration/webdriver/util/functions.ts rename to packages/auth-exp/test/integration/webdriver/util/functions.ts diff --git a/packages-exp/auth-exp/test/integration/webdriver/util/idp_page.ts b/packages/auth-exp/test/integration/webdriver/util/idp_page.ts similarity index 100% rename from packages-exp/auth-exp/test/integration/webdriver/util/idp_page.ts rename to packages/auth-exp/test/integration/webdriver/util/idp_page.ts diff --git a/packages-exp/auth-exp/test/integration/webdriver/util/js_load_condition.ts b/packages/auth-exp/test/integration/webdriver/util/js_load_condition.ts similarity index 100% rename from packages-exp/auth-exp/test/integration/webdriver/util/js_load_condition.ts rename to packages/auth-exp/test/integration/webdriver/util/js_load_condition.ts diff --git a/packages-exp/auth-exp/test/integration/webdriver/util/test_runner.ts b/packages/auth-exp/test/integration/webdriver/util/test_runner.ts similarity index 100% rename from packages-exp/auth-exp/test/integration/webdriver/util/test_runner.ts rename to packages/auth-exp/test/integration/webdriver/util/test_runner.ts diff --git a/packages-exp/auth-exp/test/integration/webdriver/util/test_server.ts b/packages/auth-exp/test/integration/webdriver/util/test_server.ts similarity index 100% rename from packages-exp/auth-exp/test/integration/webdriver/util/test_server.ts rename to packages/auth-exp/test/integration/webdriver/util/test_server.ts diff --git a/packages-exp/auth-exp/test/integration/webdriver/util/ui_page.ts b/packages/auth-exp/test/integration/webdriver/util/ui_page.ts similarity index 100% rename from packages-exp/auth-exp/test/integration/webdriver/util/ui_page.ts rename to packages/auth-exp/test/integration/webdriver/util/ui_page.ts diff --git a/packages-exp/auth-exp/tsconfig.json b/packages/auth-exp/tsconfig.json similarity index 100% rename from packages-exp/auth-exp/tsconfig.json rename to packages/auth-exp/tsconfig.json diff --git a/packages/auth/demo/public/index.html b/packages/auth/demo/public/index.html deleted file mode 100644 index 3d518d16854..00000000000 --- a/packages/auth/demo/public/index.html +++ /dev/null @@ -1,767 +0,0 @@ - - - - - Headless App - - - - - - - - - - - - - - - - -
- - - - - - - -
-
- - -
-
- - -
-
- - - [anonymous] / - uid: - -
-
- - / - - - - - - - -
- - - -
-
-
-
- - -
- -
-
-
- - - -
-
- -
Development mode APIs
-
-
- - -
- -
- - -
Web Worker Testing
-
- -
- -
Service Worker Testing
-
- -
- - -
Auth State Persistence
-
- - -
- - -
Language code
-
- - - -
- - -
Sign Up
-
- - - -
- - - -
Sign In
-
- - - -
-
- - -
- -
- - - - - -
- -
- - - - - -
- - -
Sign In with Email Link
-
- - - -
-
- - -
- - -
Password Reset
-
- - -
-
- - - - -
- -
Fetch Sign In Methods
-
- - -
- - -
Update Current User
-
- -
-
- -
-
-
- -
Update Profile
-
- - -
-
- - -
-
- - - -
- - - -
Linking/Unlinking
- -
- - - -
-
- - - - - -
- -
- - - - - - - -
- -
- - - - - -
- -
- - -
- - -
Enroll Second Factor
- -
-
-
- - - - - - -
-
-
- - -
Other Actions
- -
- - -
- - - - - - - -
Delete account
- -
- -
-
Web
-
- -
-
Android
-
-
- -
- - -
- -
-
-
iOS
-
-
- -
-
-
-
- - -
- -
-
-
-

-              
-            
-
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/packages-exp/installations-compat/.eslintrc.js b/packages/firebase-exp/.eslintrc.js similarity index 100% rename from packages-exp/installations-compat/.eslintrc.js rename to packages/firebase-exp/.eslintrc.js diff --git a/packages/firebase/.gitignore b/packages/firebase-exp/.gitignore similarity index 100% rename from packages/firebase/.gitignore rename to packages/firebase-exp/.gitignore diff --git a/packages-exp/firebase-exp/README.md b/packages/firebase-exp/README.md similarity index 100% rename from packages-exp/firebase-exp/README.md rename to packages/firebase-exp/README.md diff --git a/packages-exp/firebase-exp/analytics/index.ts b/packages/firebase-exp/analytics/index.ts similarity index 100% rename from packages-exp/firebase-exp/analytics/index.ts rename to packages/firebase-exp/analytics/index.ts diff --git a/packages-exp/firebase-exp/analytics/package.json b/packages/firebase-exp/analytics/package.json similarity index 100% rename from packages-exp/firebase-exp/analytics/package.json rename to packages/firebase-exp/analytics/package.json diff --git a/packages-exp/firebase-exp/app-check/index.ts b/packages/firebase-exp/app-check/index.ts similarity index 100% rename from packages-exp/firebase-exp/app-check/index.ts rename to packages/firebase-exp/app-check/index.ts diff --git a/packages-exp/firebase-exp/app-check/package.json b/packages/firebase-exp/app-check/package.json similarity index 100% rename from packages-exp/firebase-exp/app-check/package.json rename to packages/firebase-exp/app-check/package.json diff --git a/packages-exp/firebase-exp/app/index.cdn.ts b/packages/firebase-exp/app/index.cdn.ts similarity index 100% rename from packages-exp/firebase-exp/app/index.cdn.ts rename to packages/firebase-exp/app/index.cdn.ts diff --git a/packages-exp/firebase-exp/app/index.ts b/packages/firebase-exp/app/index.ts similarity index 100% rename from packages-exp/firebase-exp/app/index.ts rename to packages/firebase-exp/app/index.ts diff --git a/packages-exp/firebase-exp/app/package.json b/packages/firebase-exp/app/package.json similarity index 100% rename from packages-exp/firebase-exp/app/package.json rename to packages/firebase-exp/app/package.json diff --git a/packages-exp/firebase-exp/auth/cordova/index.ts b/packages/firebase-exp/auth/cordova/index.ts similarity index 100% rename from packages-exp/firebase-exp/auth/cordova/index.ts rename to packages/firebase-exp/auth/cordova/index.ts diff --git a/packages-exp/firebase-exp/auth/cordova/package.json b/packages/firebase-exp/auth/cordova/package.json similarity index 100% rename from packages-exp/firebase-exp/auth/cordova/package.json rename to packages/firebase-exp/auth/cordova/package.json diff --git a/packages-exp/firebase-exp/auth/index.ts b/packages/firebase-exp/auth/index.ts similarity index 100% rename from packages-exp/firebase-exp/auth/index.ts rename to packages/firebase-exp/auth/index.ts diff --git a/packages-exp/firebase-exp/auth/package.json b/packages/firebase-exp/auth/package.json similarity index 100% rename from packages-exp/firebase-exp/auth/package.json rename to packages/firebase-exp/auth/package.json diff --git a/packages-exp/firebase-exp/auth/react-native/index.ts b/packages/firebase-exp/auth/react-native/index.ts similarity index 100% rename from packages-exp/firebase-exp/auth/react-native/index.ts rename to packages/firebase-exp/auth/react-native/index.ts diff --git a/packages-exp/firebase-exp/auth/react-native/package.json b/packages/firebase-exp/auth/react-native/package.json similarity index 100% rename from packages-exp/firebase-exp/auth/react-native/package.json rename to packages/firebase-exp/auth/react-native/package.json diff --git a/packages-exp/firebase-exp/compat/analytics/index.ts b/packages/firebase-exp/compat/analytics/index.ts similarity index 100% rename from packages-exp/firebase-exp/compat/analytics/index.ts rename to packages/firebase-exp/compat/analytics/index.ts diff --git a/packages-exp/firebase-exp/compat/analytics/package.json b/packages/firebase-exp/compat/analytics/package.json similarity index 100% rename from packages-exp/firebase-exp/compat/analytics/package.json rename to packages/firebase-exp/compat/analytics/package.json diff --git a/packages-exp/firebase-exp/compat/app-check/index.ts b/packages/firebase-exp/compat/app-check/index.ts similarity index 100% rename from packages-exp/firebase-exp/compat/app-check/index.ts rename to packages/firebase-exp/compat/app-check/index.ts diff --git a/packages-exp/firebase-exp/compat/app-check/package.json b/packages/firebase-exp/compat/app-check/package.json similarity index 100% rename from packages-exp/firebase-exp/compat/app-check/package.json rename to packages/firebase-exp/compat/app-check/package.json diff --git a/packages-exp/firebase-exp/compat/app/index.cdn.ts b/packages/firebase-exp/compat/app/index.cdn.ts similarity index 100% rename from packages-exp/firebase-exp/compat/app/index.cdn.ts rename to packages/firebase-exp/compat/app/index.cdn.ts diff --git a/packages-exp/firebase-exp/compat/app/index.ts b/packages/firebase-exp/compat/app/index.ts similarity index 100% rename from packages-exp/firebase-exp/compat/app/index.ts rename to packages/firebase-exp/compat/app/index.ts diff --git a/packages-exp/firebase-exp/compat/app/package.json b/packages/firebase-exp/compat/app/package.json similarity index 100% rename from packages-exp/firebase-exp/compat/app/package.json rename to packages/firebase-exp/compat/app/package.json diff --git a/packages-exp/firebase-exp/compat/auth/index.ts b/packages/firebase-exp/compat/auth/index.ts similarity index 100% rename from packages-exp/firebase-exp/compat/auth/index.ts rename to packages/firebase-exp/compat/auth/index.ts diff --git a/packages-exp/firebase-exp/compat/auth/package.json b/packages/firebase-exp/compat/auth/package.json similarity index 100% rename from packages-exp/firebase-exp/compat/auth/package.json rename to packages/firebase-exp/compat/auth/package.json diff --git a/packages-exp/firebase-exp/compat/database/index.ts b/packages/firebase-exp/compat/database/index.ts similarity index 100% rename from packages-exp/firebase-exp/compat/database/index.ts rename to packages/firebase-exp/compat/database/index.ts diff --git a/packages-exp/firebase-exp/compat/database/package.json b/packages/firebase-exp/compat/database/package.json similarity index 100% rename from packages-exp/firebase-exp/compat/database/package.json rename to packages/firebase-exp/compat/database/package.json diff --git a/packages-exp/firebase-exp/compat/firestore/index.ts b/packages/firebase-exp/compat/firestore/index.ts similarity index 100% rename from packages-exp/firebase-exp/compat/firestore/index.ts rename to packages/firebase-exp/compat/firestore/index.ts diff --git a/packages-exp/firebase-exp/compat/firestore/package.json b/packages/firebase-exp/compat/firestore/package.json similarity index 100% rename from packages-exp/firebase-exp/compat/firestore/package.json rename to packages/firebase-exp/compat/firestore/package.json diff --git a/packages-exp/firebase-exp/compat/functions/index.ts b/packages/firebase-exp/compat/functions/index.ts similarity index 100% rename from packages-exp/firebase-exp/compat/functions/index.ts rename to packages/firebase-exp/compat/functions/index.ts diff --git a/packages-exp/firebase-exp/compat/functions/package.json b/packages/firebase-exp/compat/functions/package.json similarity index 100% rename from packages-exp/firebase-exp/compat/functions/package.json rename to packages/firebase-exp/compat/functions/package.json diff --git a/packages-exp/firebase-exp/compat/index.cdn.ts b/packages/firebase-exp/compat/index.cdn.ts similarity index 100% rename from packages-exp/firebase-exp/compat/index.cdn.ts rename to packages/firebase-exp/compat/index.cdn.ts diff --git a/packages-exp/firebase-exp/compat/index.d.ts b/packages/firebase-exp/compat/index.d.ts similarity index 100% rename from packages-exp/firebase-exp/compat/index.d.ts rename to packages/firebase-exp/compat/index.d.ts diff --git a/packages-exp/firebase-exp/compat/index.node.ts b/packages/firebase-exp/compat/index.node.ts similarity index 100% rename from packages-exp/firebase-exp/compat/index.node.ts rename to packages/firebase-exp/compat/index.node.ts diff --git a/packages-exp/firebase-exp/compat/index.perf.ts b/packages/firebase-exp/compat/index.perf.ts similarity index 100% rename from packages-exp/firebase-exp/compat/index.perf.ts rename to packages/firebase-exp/compat/index.perf.ts diff --git a/packages-exp/firebase-exp/compat/index.rn.ts b/packages/firebase-exp/compat/index.rn.ts similarity index 100% rename from packages-exp/firebase-exp/compat/index.rn.ts rename to packages/firebase-exp/compat/index.rn.ts diff --git a/packages-exp/firebase-exp/compat/index.ts b/packages/firebase-exp/compat/index.ts similarity index 100% rename from packages-exp/firebase-exp/compat/index.ts rename to packages/firebase-exp/compat/index.ts diff --git a/packages-exp/firebase-exp/compat/messaging/index.ts b/packages/firebase-exp/compat/messaging/index.ts similarity index 100% rename from packages-exp/firebase-exp/compat/messaging/index.ts rename to packages/firebase-exp/compat/messaging/index.ts diff --git a/packages-exp/firebase-exp/compat/messaging/package.json b/packages/firebase-exp/compat/messaging/package.json similarity index 100% rename from packages-exp/firebase-exp/compat/messaging/package.json rename to packages/firebase-exp/compat/messaging/package.json diff --git a/packages-exp/firebase-exp/compat/package.json b/packages/firebase-exp/compat/package.json similarity index 100% rename from packages-exp/firebase-exp/compat/package.json rename to packages/firebase-exp/compat/package.json diff --git a/packages-exp/firebase-exp/compat/performance/index.ts b/packages/firebase-exp/compat/performance/index.ts similarity index 100% rename from packages-exp/firebase-exp/compat/performance/index.ts rename to packages/firebase-exp/compat/performance/index.ts diff --git a/packages-exp/firebase-exp/compat/performance/package.json b/packages/firebase-exp/compat/performance/package.json similarity index 100% rename from packages-exp/firebase-exp/compat/performance/package.json rename to packages/firebase-exp/compat/performance/package.json diff --git a/packages-exp/firebase-exp/compat/remote-config/index.ts b/packages/firebase-exp/compat/remote-config/index.ts similarity index 100% rename from packages-exp/firebase-exp/compat/remote-config/index.ts rename to packages/firebase-exp/compat/remote-config/index.ts diff --git a/packages-exp/firebase-exp/compat/remote-config/package.json b/packages/firebase-exp/compat/remote-config/package.json similarity index 100% rename from packages-exp/firebase-exp/compat/remote-config/package.json rename to packages/firebase-exp/compat/remote-config/package.json diff --git a/packages-exp/firebase-exp/compat/rollup.config.js b/packages/firebase-exp/compat/rollup.config.js similarity index 100% rename from packages-exp/firebase-exp/compat/rollup.config.js rename to packages/firebase-exp/compat/rollup.config.js diff --git a/packages-exp/firebase-exp/compat/rollup.config.release.js b/packages/firebase-exp/compat/rollup.config.release.js similarity index 100% rename from packages-exp/firebase-exp/compat/rollup.config.release.js rename to packages/firebase-exp/compat/rollup.config.release.js diff --git a/packages-exp/firebase-exp/compat/storage/index.ts b/packages/firebase-exp/compat/storage/index.ts similarity index 100% rename from packages-exp/firebase-exp/compat/storage/index.ts rename to packages/firebase-exp/compat/storage/index.ts diff --git a/packages-exp/firebase-exp/compat/storage/package.json b/packages/firebase-exp/compat/storage/package.json similarity index 100% rename from packages-exp/firebase-exp/compat/storage/package.json rename to packages/firebase-exp/compat/storage/package.json diff --git a/packages-exp/firebase-exp/database/index.ts b/packages/firebase-exp/database/index.ts similarity index 100% rename from packages-exp/firebase-exp/database/index.ts rename to packages/firebase-exp/database/index.ts diff --git a/packages-exp/firebase-exp/database/package.json b/packages/firebase-exp/database/package.json similarity index 100% rename from packages-exp/firebase-exp/database/package.json rename to packages/firebase-exp/database/package.json diff --git a/packages-exp/firebase-exp/firestore/index.ts b/packages/firebase-exp/firestore/index.ts similarity index 100% rename from packages-exp/firebase-exp/firestore/index.ts rename to packages/firebase-exp/firestore/index.ts diff --git a/packages-exp/firebase-exp/firestore/lite/index.ts b/packages/firebase-exp/firestore/lite/index.ts similarity index 100% rename from packages-exp/firebase-exp/firestore/lite/index.ts rename to packages/firebase-exp/firestore/lite/index.ts diff --git a/packages-exp/firebase-exp/firestore/lite/package.json b/packages/firebase-exp/firestore/lite/package.json similarity index 100% rename from packages-exp/firebase-exp/firestore/lite/package.json rename to packages/firebase-exp/firestore/lite/package.json diff --git a/packages-exp/firebase-exp/firestore/package.json b/packages/firebase-exp/firestore/package.json similarity index 100% rename from packages-exp/firebase-exp/firestore/package.json rename to packages/firebase-exp/firestore/package.json diff --git a/packages-exp/firebase-exp/functions/index.ts b/packages/firebase-exp/functions/index.ts similarity index 100% rename from packages-exp/firebase-exp/functions/index.ts rename to packages/firebase-exp/functions/index.ts diff --git a/packages-exp/firebase-exp/functions/package.json b/packages/firebase-exp/functions/package.json similarity index 100% rename from packages-exp/firebase-exp/functions/package.json rename to packages/firebase-exp/functions/package.json diff --git a/packages-exp/firebase-exp/gulpfile.js b/packages/firebase-exp/gulpfile.js similarity index 100% rename from packages-exp/firebase-exp/gulpfile.js rename to packages/firebase-exp/gulpfile.js diff --git a/packages-exp/firebase-exp/messaging/index.ts b/packages/firebase-exp/messaging/index.ts similarity index 100% rename from packages-exp/firebase-exp/messaging/index.ts rename to packages/firebase-exp/messaging/index.ts diff --git a/packages-exp/firebase-exp/messaging/package.json b/packages/firebase-exp/messaging/package.json similarity index 100% rename from packages-exp/firebase-exp/messaging/package.json rename to packages/firebase-exp/messaging/package.json diff --git a/packages-exp/firebase-exp/messaging/sw/index.ts b/packages/firebase-exp/messaging/sw/index.ts similarity index 100% rename from packages-exp/firebase-exp/messaging/sw/index.ts rename to packages/firebase-exp/messaging/sw/index.ts diff --git a/packages-exp/firebase-exp/messaging/sw/package.json b/packages/firebase-exp/messaging/sw/package.json similarity index 100% rename from packages-exp/firebase-exp/messaging/sw/package.json rename to packages/firebase-exp/messaging/sw/package.json diff --git a/packages-exp/firebase-exp/package.json b/packages/firebase-exp/package.json similarity index 100% rename from packages-exp/firebase-exp/package.json rename to packages/firebase-exp/package.json diff --git a/packages-exp/firebase-exp/performance/index.ts b/packages/firebase-exp/performance/index.ts similarity index 100% rename from packages-exp/firebase-exp/performance/index.ts rename to packages/firebase-exp/performance/index.ts diff --git a/packages-exp/firebase-exp/performance/package.json b/packages/firebase-exp/performance/package.json similarity index 100% rename from packages-exp/firebase-exp/performance/package.json rename to packages/firebase-exp/performance/package.json diff --git a/packages-exp/firebase-exp/remote-config/index.ts b/packages/firebase-exp/remote-config/index.ts similarity index 100% rename from packages-exp/firebase-exp/remote-config/index.ts rename to packages/firebase-exp/remote-config/index.ts diff --git a/packages-exp/firebase-exp/remote-config/package.json b/packages/firebase-exp/remote-config/package.json similarity index 100% rename from packages-exp/firebase-exp/remote-config/package.json rename to packages/firebase-exp/remote-config/package.json diff --git a/packages-exp/firebase-exp/rollup.config.js b/packages/firebase-exp/rollup.config.js similarity index 100% rename from packages-exp/firebase-exp/rollup.config.js rename to packages/firebase-exp/rollup.config.js diff --git a/packages-exp/firebase-exp/rollup.config.release.js b/packages/firebase-exp/rollup.config.release.js similarity index 100% rename from packages-exp/firebase-exp/rollup.config.release.js rename to packages/firebase-exp/rollup.config.release.js diff --git a/packages-exp/firebase-exp/storage/index.ts b/packages/firebase-exp/storage/index.ts similarity index 100% rename from packages-exp/firebase-exp/storage/index.ts rename to packages/firebase-exp/storage/index.ts diff --git a/packages-exp/firebase-exp/storage/package.json b/packages/firebase-exp/storage/package.json similarity index 100% rename from packages-exp/firebase-exp/storage/package.json rename to packages/firebase-exp/storage/package.json diff --git a/packages-exp/functions-exp/tsconfig.json b/packages/firebase-exp/tsconfig.json similarity index 100% rename from packages-exp/functions-exp/tsconfig.json rename to packages/firebase-exp/tsconfig.json diff --git a/packages-exp/functions-compat/.eslintrc.js b/packages/functions-compat/.eslintrc.js similarity index 100% rename from packages-exp/functions-compat/.eslintrc.js rename to packages/functions-compat/.eslintrc.js diff --git a/packages-exp/functions-compat/karma.conf.js b/packages/functions-compat/karma.conf.js similarity index 100% rename from packages-exp/functions-compat/karma.conf.js rename to packages/functions-compat/karma.conf.js diff --git a/packages-exp/functions-compat/package.json b/packages/functions-compat/package.json similarity index 100% rename from packages-exp/functions-compat/package.json rename to packages/functions-compat/package.json diff --git a/packages-exp/functions-compat/rollup.config.base.js b/packages/functions-compat/rollup.config.base.js similarity index 100% rename from packages-exp/functions-compat/rollup.config.base.js rename to packages/functions-compat/rollup.config.base.js diff --git a/packages-exp/functions-compat/rollup.config.js b/packages/functions-compat/rollup.config.js similarity index 100% rename from packages-exp/functions-compat/rollup.config.js rename to packages/functions-compat/rollup.config.js diff --git a/packages-exp/functions-compat/rollup.config.release.js b/packages/functions-compat/rollup.config.release.js similarity index 100% rename from packages-exp/functions-compat/rollup.config.release.js rename to packages/functions-compat/rollup.config.release.js diff --git a/packages-exp/functions-compat/src/callable.test.ts b/packages/functions-compat/src/callable.test.ts similarity index 100% rename from packages-exp/functions-compat/src/callable.test.ts rename to packages/functions-compat/src/callable.test.ts diff --git a/packages-exp/functions-compat/src/index.node.ts b/packages/functions-compat/src/index.node.ts similarity index 100% rename from packages-exp/functions-compat/src/index.node.ts rename to packages/functions-compat/src/index.node.ts diff --git a/packages-exp/functions-compat/src/index.ts b/packages/functions-compat/src/index.ts similarity index 100% rename from packages-exp/functions-compat/src/index.ts rename to packages/functions-compat/src/index.ts diff --git a/packages-exp/functions-compat/src/register.ts b/packages/functions-compat/src/register.ts similarity index 100% rename from packages-exp/functions-compat/src/register.ts rename to packages/functions-compat/src/register.ts diff --git a/packages-exp/functions-compat/src/service.test.ts b/packages/functions-compat/src/service.test.ts similarity index 100% rename from packages-exp/functions-compat/src/service.test.ts rename to packages/functions-compat/src/service.test.ts diff --git a/packages-exp/functions-compat/src/service.ts b/packages/functions-compat/src/service.ts similarity index 100% rename from packages-exp/functions-compat/src/service.ts rename to packages/functions-compat/src/service.ts diff --git a/packages-exp/functions-compat/test/utils.ts b/packages/functions-compat/test/utils.ts similarity index 100% rename from packages-exp/functions-compat/test/utils.ts rename to packages/functions-compat/test/utils.ts diff --git a/packages/app-check/tsconfig.json b/packages/functions-compat/tsconfig.json similarity index 100% rename from packages/app-check/tsconfig.json rename to packages/functions-compat/tsconfig.json diff --git a/packages-exp/functions-exp/.eslintrc.js b/packages/functions-exp/.eslintrc.js similarity index 100% rename from packages-exp/functions-exp/.eslintrc.js rename to packages/functions-exp/.eslintrc.js diff --git a/packages/functions/README.md b/packages/functions-exp/README.md similarity index 100% rename from packages/functions/README.md rename to packages/functions-exp/README.md diff --git a/packages-exp/functions-exp/api-extractor.json b/packages/functions-exp/api-extractor.json similarity index 100% rename from packages-exp/functions-exp/api-extractor.json rename to packages/functions-exp/api-extractor.json diff --git a/packages-exp/functions-exp/karma.conf.js b/packages/functions-exp/karma.conf.js similarity index 100% rename from packages-exp/functions-exp/karma.conf.js rename to packages/functions-exp/karma.conf.js diff --git a/packages-exp/functions-exp/package.json b/packages/functions-exp/package.json similarity index 100% rename from packages-exp/functions-exp/package.json rename to packages/functions-exp/package.json diff --git a/packages-exp/functions-exp/rollup.config.js b/packages/functions-exp/rollup.config.js similarity index 100% rename from packages-exp/functions-exp/rollup.config.js rename to packages/functions-exp/rollup.config.js diff --git a/packages-exp/functions-exp/rollup.config.release.js b/packages/functions-exp/rollup.config.release.js similarity index 100% rename from packages-exp/functions-exp/rollup.config.release.js rename to packages/functions-exp/rollup.config.release.js diff --git a/packages-exp/functions-exp/rollup.shared.js b/packages/functions-exp/rollup.shared.js similarity index 100% rename from packages-exp/functions-exp/rollup.shared.js rename to packages/functions-exp/rollup.shared.js diff --git a/packages-exp/functions-exp/src/api.ts b/packages/functions-exp/src/api.ts similarity index 100% rename from packages-exp/functions-exp/src/api.ts rename to packages/functions-exp/src/api.ts diff --git a/packages-exp/functions-exp/src/callable.test.ts b/packages/functions-exp/src/callable.test.ts similarity index 100% rename from packages-exp/functions-exp/src/callable.test.ts rename to packages/functions-exp/src/callable.test.ts diff --git a/packages-exp/functions-exp/src/config.ts b/packages/functions-exp/src/config.ts similarity index 100% rename from packages-exp/functions-exp/src/config.ts rename to packages/functions-exp/src/config.ts diff --git a/packages-exp/functions-exp/src/constants.ts b/packages/functions-exp/src/constants.ts similarity index 100% rename from packages-exp/functions-exp/src/constants.ts rename to packages/functions-exp/src/constants.ts diff --git a/packages-exp/functions-exp/src/context.ts b/packages/functions-exp/src/context.ts similarity index 100% rename from packages-exp/functions-exp/src/context.ts rename to packages/functions-exp/src/context.ts diff --git a/packages-exp/functions-exp/src/error.ts b/packages/functions-exp/src/error.ts similarity index 100% rename from packages-exp/functions-exp/src/error.ts rename to packages/functions-exp/src/error.ts diff --git a/packages-exp/functions-exp/src/index.node.ts b/packages/functions-exp/src/index.node.ts similarity index 100% rename from packages-exp/functions-exp/src/index.node.ts rename to packages/functions-exp/src/index.node.ts diff --git a/packages-exp/functions-exp/src/index.ts b/packages/functions-exp/src/index.ts similarity index 100% rename from packages-exp/functions-exp/src/index.ts rename to packages/functions-exp/src/index.ts diff --git a/packages-exp/functions-exp/src/public-types.ts b/packages/functions-exp/src/public-types.ts similarity index 100% rename from packages-exp/functions-exp/src/public-types.ts rename to packages/functions-exp/src/public-types.ts diff --git a/packages-exp/functions-exp/src/serializer.test.ts b/packages/functions-exp/src/serializer.test.ts similarity index 100% rename from packages-exp/functions-exp/src/serializer.test.ts rename to packages/functions-exp/src/serializer.test.ts diff --git a/packages-exp/functions-exp/src/serializer.ts b/packages/functions-exp/src/serializer.ts similarity index 100% rename from packages-exp/functions-exp/src/serializer.ts rename to packages/functions-exp/src/serializer.ts diff --git a/packages-exp/functions-exp/src/service.test.ts b/packages/functions-exp/src/service.test.ts similarity index 100% rename from packages-exp/functions-exp/src/service.test.ts rename to packages/functions-exp/src/service.test.ts diff --git a/packages-exp/functions-exp/src/service.ts b/packages/functions-exp/src/service.ts similarity index 100% rename from packages-exp/functions-exp/src/service.ts rename to packages/functions-exp/src/service.ts diff --git a/packages-exp/functions-exp/test/utils.ts b/packages/functions-exp/test/utils.ts similarity index 100% rename from packages-exp/functions-exp/test/utils.ts rename to packages/functions-exp/test/utils.ts diff --git a/packages/functions/tsconfig.json b/packages/functions-exp/tsconfig.json similarity index 100% rename from packages/functions/tsconfig.json rename to packages/functions-exp/tsconfig.json diff --git a/packages-exp/installations-exp/.eslintrc.js b/packages/installations-compat/.eslintrc.js similarity index 100% rename from packages-exp/installations-exp/.eslintrc.js rename to packages/installations-compat/.eslintrc.js diff --git a/packages-exp/installations-compat/karma.conf.js b/packages/installations-compat/karma.conf.js similarity index 100% rename from packages-exp/installations-compat/karma.conf.js rename to packages/installations-compat/karma.conf.js diff --git a/packages-exp/installations-compat/package.json b/packages/installations-compat/package.json similarity index 100% rename from packages-exp/installations-compat/package.json rename to packages/installations-compat/package.json diff --git a/packages-exp/installations-compat/rollup.config.js b/packages/installations-compat/rollup.config.js similarity index 100% rename from packages-exp/installations-compat/rollup.config.js rename to packages/installations-compat/rollup.config.js diff --git a/packages-exp/installations-compat/rollup.config.release.js b/packages/installations-compat/rollup.config.release.js similarity index 100% rename from packages-exp/installations-compat/rollup.config.release.js rename to packages/installations-compat/rollup.config.release.js diff --git a/packages-exp/installations-compat/rollup.shared.js b/packages/installations-compat/rollup.shared.js similarity index 100% rename from packages-exp/installations-compat/rollup.shared.js rename to packages/installations-compat/rollup.shared.js diff --git a/packages-exp/installations-compat/src/index.ts b/packages/installations-compat/src/index.ts similarity index 100% rename from packages-exp/installations-compat/src/index.ts rename to packages/installations-compat/src/index.ts diff --git a/packages-exp/installations-compat/src/installationsCompat.test.ts b/packages/installations-compat/src/installationsCompat.test.ts similarity index 100% rename from packages-exp/installations-compat/src/installationsCompat.test.ts rename to packages/installations-compat/src/installationsCompat.test.ts diff --git a/packages-exp/installations-compat/src/installationsCompat.ts b/packages/installations-compat/src/installationsCompat.ts similarity index 100% rename from packages-exp/installations-compat/src/installationsCompat.ts rename to packages/installations-compat/src/installationsCompat.ts diff --git a/packages-exp/installations-compat/src/testing/setup.ts b/packages/installations-compat/src/testing/setup.ts similarity index 100% rename from packages-exp/installations-compat/src/testing/setup.ts rename to packages/installations-compat/src/testing/setup.ts diff --git a/packages-exp/installations-compat/src/testing/util.ts b/packages/installations-compat/src/testing/util.ts similarity index 100% rename from packages-exp/installations-compat/src/testing/util.ts rename to packages/installations-compat/src/testing/util.ts diff --git a/packages-exp/installations-compat/tsconfig.json b/packages/installations-compat/tsconfig.json similarity index 100% rename from packages-exp/installations-compat/tsconfig.json rename to packages/installations-compat/tsconfig.json diff --git a/packages-exp/messaging-exp/.eslintrc.js b/packages/installations-exp/.eslintrc.js similarity index 100% rename from packages-exp/messaging-exp/.eslintrc.js rename to packages/installations-exp/.eslintrc.js diff --git a/packages-exp/installations-exp/api-extractor.json b/packages/installations-exp/api-extractor.json similarity index 100% rename from packages-exp/installations-exp/api-extractor.json rename to packages/installations-exp/api-extractor.json diff --git a/packages-exp/installations-exp/karma.conf.js b/packages/installations-exp/karma.conf.js similarity index 100% rename from packages-exp/installations-exp/karma.conf.js rename to packages/installations-exp/karma.conf.js diff --git a/packages-exp/installations-exp/package.json b/packages/installations-exp/package.json similarity index 100% rename from packages-exp/installations-exp/package.json rename to packages/installations-exp/package.json diff --git a/packages-exp/installations-exp/rollup.config.js b/packages/installations-exp/rollup.config.js similarity index 100% rename from packages-exp/installations-exp/rollup.config.js rename to packages/installations-exp/rollup.config.js diff --git a/packages-exp/installations-exp/rollup.config.release.js b/packages/installations-exp/rollup.config.release.js similarity index 100% rename from packages-exp/installations-exp/rollup.config.release.js rename to packages/installations-exp/rollup.config.release.js diff --git a/packages-exp/installations-exp/rollup.shared.js b/packages/installations-exp/rollup.shared.js similarity index 100% rename from packages-exp/installations-exp/rollup.shared.js rename to packages/installations-exp/rollup.shared.js diff --git a/packages-exp/installations-exp/src/api/delete-installations.test.ts b/packages/installations-exp/src/api/delete-installations.test.ts similarity index 100% rename from packages-exp/installations-exp/src/api/delete-installations.test.ts rename to packages/installations-exp/src/api/delete-installations.test.ts diff --git a/packages-exp/installations-exp/src/api/delete-installations.ts b/packages/installations-exp/src/api/delete-installations.ts similarity index 100% rename from packages-exp/installations-exp/src/api/delete-installations.ts rename to packages/installations-exp/src/api/delete-installations.ts diff --git a/packages-exp/installations-exp/src/api/get-id.test.ts b/packages/installations-exp/src/api/get-id.test.ts similarity index 100% rename from packages-exp/installations-exp/src/api/get-id.test.ts rename to packages/installations-exp/src/api/get-id.test.ts diff --git a/packages-exp/installations-exp/src/api/get-id.ts b/packages/installations-exp/src/api/get-id.ts similarity index 100% rename from packages-exp/installations-exp/src/api/get-id.ts rename to packages/installations-exp/src/api/get-id.ts diff --git a/packages-exp/installations-exp/src/api/get-installations.ts b/packages/installations-exp/src/api/get-installations.ts similarity index 100% rename from packages-exp/installations-exp/src/api/get-installations.ts rename to packages/installations-exp/src/api/get-installations.ts diff --git a/packages-exp/installations-exp/src/api/get-token.test.ts b/packages/installations-exp/src/api/get-token.test.ts similarity index 100% rename from packages-exp/installations-exp/src/api/get-token.test.ts rename to packages/installations-exp/src/api/get-token.test.ts diff --git a/packages-exp/installations-exp/src/api/get-token.ts b/packages/installations-exp/src/api/get-token.ts similarity index 100% rename from packages-exp/installations-exp/src/api/get-token.ts rename to packages/installations-exp/src/api/get-token.ts diff --git a/packages-exp/installations-exp/src/api/index.ts b/packages/installations-exp/src/api/index.ts similarity index 100% rename from packages-exp/installations-exp/src/api/index.ts rename to packages/installations-exp/src/api/index.ts diff --git a/packages-exp/installations-exp/src/api/on-id-change.test.ts b/packages/installations-exp/src/api/on-id-change.test.ts similarity index 100% rename from packages-exp/installations-exp/src/api/on-id-change.test.ts rename to packages/installations-exp/src/api/on-id-change.test.ts diff --git a/packages-exp/installations-exp/src/api/on-id-change.ts b/packages/installations-exp/src/api/on-id-change.ts similarity index 100% rename from packages-exp/installations-exp/src/api/on-id-change.ts rename to packages/installations-exp/src/api/on-id-change.ts diff --git a/packages/installations/src/api/common.test.ts b/packages/installations-exp/src/functions/common.test.ts similarity index 100% rename from packages/installations/src/api/common.test.ts rename to packages/installations-exp/src/functions/common.test.ts diff --git a/packages-exp/installations-exp/src/functions/common.ts b/packages/installations-exp/src/functions/common.ts similarity index 100% rename from packages-exp/installations-exp/src/functions/common.ts rename to packages/installations-exp/src/functions/common.ts diff --git a/packages-exp/installations-exp/src/functions/config.ts b/packages/installations-exp/src/functions/config.ts similarity index 100% rename from packages-exp/installations-exp/src/functions/config.ts rename to packages/installations-exp/src/functions/config.ts diff --git a/packages-exp/installations-exp/src/functions/create-installation-request.test.ts b/packages/installations-exp/src/functions/create-installation-request.test.ts similarity index 100% rename from packages-exp/installations-exp/src/functions/create-installation-request.test.ts rename to packages/installations-exp/src/functions/create-installation-request.test.ts diff --git a/packages-exp/installations-exp/src/functions/create-installation-request.ts b/packages/installations-exp/src/functions/create-installation-request.ts similarity index 100% rename from packages-exp/installations-exp/src/functions/create-installation-request.ts rename to packages/installations-exp/src/functions/create-installation-request.ts diff --git a/packages-exp/installations-exp/src/functions/delete-installation-request.test.ts b/packages/installations-exp/src/functions/delete-installation-request.test.ts similarity index 100% rename from packages-exp/installations-exp/src/functions/delete-installation-request.test.ts rename to packages/installations-exp/src/functions/delete-installation-request.test.ts diff --git a/packages-exp/installations-exp/src/functions/delete-installation-request.ts b/packages/installations-exp/src/functions/delete-installation-request.ts similarity index 100% rename from packages-exp/installations-exp/src/functions/delete-installation-request.ts rename to packages/installations-exp/src/functions/delete-installation-request.ts diff --git a/packages-exp/installations-exp/src/functions/generate-auth-token-request.test.ts b/packages/installations-exp/src/functions/generate-auth-token-request.test.ts similarity index 100% rename from packages-exp/installations-exp/src/functions/generate-auth-token-request.test.ts rename to packages/installations-exp/src/functions/generate-auth-token-request.test.ts diff --git a/packages-exp/installations-exp/src/functions/generate-auth-token-request.ts b/packages/installations-exp/src/functions/generate-auth-token-request.ts similarity index 100% rename from packages-exp/installations-exp/src/functions/generate-auth-token-request.ts rename to packages/installations-exp/src/functions/generate-auth-token-request.ts diff --git a/packages/installations/src/helpers/buffer-to-base64-url-safe.test.ts b/packages/installations-exp/src/helpers/buffer-to-base64-url-safe.test.ts similarity index 100% rename from packages/installations/src/helpers/buffer-to-base64-url-safe.test.ts rename to packages/installations-exp/src/helpers/buffer-to-base64-url-safe.test.ts diff --git a/packages/installations/src/helpers/buffer-to-base64-url-safe.ts b/packages/installations-exp/src/helpers/buffer-to-base64-url-safe.ts similarity index 100% rename from packages/installations/src/helpers/buffer-to-base64-url-safe.ts rename to packages/installations-exp/src/helpers/buffer-to-base64-url-safe.ts diff --git a/packages-exp/installations-exp/src/helpers/extract-app-config.test.ts b/packages/installations-exp/src/helpers/extract-app-config.test.ts similarity index 100% rename from packages-exp/installations-exp/src/helpers/extract-app-config.test.ts rename to packages/installations-exp/src/helpers/extract-app-config.test.ts diff --git a/packages-exp/installations-exp/src/helpers/extract-app-config.ts b/packages/installations-exp/src/helpers/extract-app-config.ts similarity index 100% rename from packages-exp/installations-exp/src/helpers/extract-app-config.ts rename to packages/installations-exp/src/helpers/extract-app-config.ts diff --git a/packages-exp/installations-exp/src/helpers/fid-changed.test.ts b/packages/installations-exp/src/helpers/fid-changed.test.ts similarity index 100% rename from packages-exp/installations-exp/src/helpers/fid-changed.test.ts rename to packages/installations-exp/src/helpers/fid-changed.test.ts diff --git a/packages-exp/installations-exp/src/helpers/fid-changed.ts b/packages/installations-exp/src/helpers/fid-changed.ts similarity index 100% rename from packages-exp/installations-exp/src/helpers/fid-changed.ts rename to packages/installations-exp/src/helpers/fid-changed.ts diff --git a/packages/installations/src/helpers/generate-fid.test.ts b/packages/installations-exp/src/helpers/generate-fid.test.ts similarity index 100% rename from packages/installations/src/helpers/generate-fid.test.ts rename to packages/installations-exp/src/helpers/generate-fid.test.ts diff --git a/packages/installations/src/helpers/generate-fid.ts b/packages/installations-exp/src/helpers/generate-fid.ts similarity index 100% rename from packages/installations/src/helpers/generate-fid.ts rename to packages/installations-exp/src/helpers/generate-fid.ts diff --git a/packages-exp/installations-exp/src/helpers/get-installation-entry.test.ts b/packages/installations-exp/src/helpers/get-installation-entry.test.ts similarity index 100% rename from packages-exp/installations-exp/src/helpers/get-installation-entry.test.ts rename to packages/installations-exp/src/helpers/get-installation-entry.test.ts diff --git a/packages-exp/installations-exp/src/helpers/get-installation-entry.ts b/packages/installations-exp/src/helpers/get-installation-entry.ts similarity index 100% rename from packages-exp/installations-exp/src/helpers/get-installation-entry.ts rename to packages/installations-exp/src/helpers/get-installation-entry.ts diff --git a/packages-exp/installations-exp/src/helpers/idb-manager.test.ts b/packages/installations-exp/src/helpers/idb-manager.test.ts similarity index 100% rename from packages-exp/installations-exp/src/helpers/idb-manager.test.ts rename to packages/installations-exp/src/helpers/idb-manager.test.ts diff --git a/packages-exp/installations-exp/src/helpers/idb-manager.ts b/packages/installations-exp/src/helpers/idb-manager.ts similarity index 100% rename from packages-exp/installations-exp/src/helpers/idb-manager.ts rename to packages/installations-exp/src/helpers/idb-manager.ts diff --git a/packages-exp/installations-exp/src/helpers/refresh-auth-token.test.ts b/packages/installations-exp/src/helpers/refresh-auth-token.test.ts similarity index 100% rename from packages-exp/installations-exp/src/helpers/refresh-auth-token.test.ts rename to packages/installations-exp/src/helpers/refresh-auth-token.test.ts diff --git a/packages-exp/installations-exp/src/helpers/refresh-auth-token.ts b/packages/installations-exp/src/helpers/refresh-auth-token.ts similarity index 100% rename from packages-exp/installations-exp/src/helpers/refresh-auth-token.ts rename to packages/installations-exp/src/helpers/refresh-auth-token.ts diff --git a/packages-exp/installations-exp/src/index.ts b/packages/installations-exp/src/index.ts similarity index 100% rename from packages-exp/installations-exp/src/index.ts rename to packages/installations-exp/src/index.ts diff --git a/packages/installations/src/interfaces/api-response.ts b/packages/installations-exp/src/interfaces/api-response.ts similarity index 100% rename from packages/installations/src/interfaces/api-response.ts rename to packages/installations-exp/src/interfaces/api-response.ts diff --git a/packages/installations/src/interfaces/installation-entry.ts b/packages/installations-exp/src/interfaces/installation-entry.ts similarity index 100% rename from packages/installations/src/interfaces/installation-entry.ts rename to packages/installations-exp/src/interfaces/installation-entry.ts diff --git a/packages-exp/installations-exp/src/interfaces/installation-impl.ts b/packages/installations-exp/src/interfaces/installation-impl.ts similarity index 100% rename from packages-exp/installations-exp/src/interfaces/installation-impl.ts rename to packages/installations-exp/src/interfaces/installation-impl.ts diff --git a/packages-exp/installations-exp/src/interfaces/public-types.ts b/packages/installations-exp/src/interfaces/public-types.ts similarity index 100% rename from packages-exp/installations-exp/src/interfaces/public-types.ts rename to packages/installations-exp/src/interfaces/public-types.ts diff --git a/packages/installations/src/testing/compare-headers.test.ts b/packages/installations-exp/src/testing/compare-headers.test.ts similarity index 100% rename from packages/installations/src/testing/compare-headers.test.ts rename to packages/installations-exp/src/testing/compare-headers.test.ts diff --git a/packages/installations/src/testing/compare-headers.ts b/packages/installations-exp/src/testing/compare-headers.ts similarity index 100% rename from packages/installations/src/testing/compare-headers.ts rename to packages/installations-exp/src/testing/compare-headers.ts diff --git a/packages-exp/installations-exp/src/testing/fake-generators.ts b/packages/installations-exp/src/testing/fake-generators.ts similarity index 100% rename from packages-exp/installations-exp/src/testing/fake-generators.ts rename to packages/installations-exp/src/testing/fake-generators.ts diff --git a/packages/installations/src/testing/setup.ts b/packages/installations-exp/src/testing/setup.ts similarity index 100% rename from packages/installations/src/testing/setup.ts rename to packages/installations-exp/src/testing/setup.ts diff --git a/packages/installations/src/util/constants.ts b/packages/installations-exp/src/util/constants.ts similarity index 100% rename from packages/installations/src/util/constants.ts rename to packages/installations-exp/src/util/constants.ts diff --git a/packages/installations/src/util/errors.ts b/packages/installations-exp/src/util/errors.ts similarity index 100% rename from packages/installations/src/util/errors.ts rename to packages/installations-exp/src/util/errors.ts diff --git a/packages-exp/installations-exp/src/util/get-key.ts b/packages/installations-exp/src/util/get-key.ts similarity index 100% rename from packages-exp/installations-exp/src/util/get-key.ts rename to packages/installations-exp/src/util/get-key.ts diff --git a/packages-exp/installations-exp/src/util/sleep.test.ts b/packages/installations-exp/src/util/sleep.test.ts similarity index 100% rename from packages-exp/installations-exp/src/util/sleep.test.ts rename to packages/installations-exp/src/util/sleep.test.ts diff --git a/packages-exp/messaging-exp/src/helpers/sleep.ts b/packages/installations-exp/src/util/sleep.ts similarity index 100% rename from packages-exp/messaging-exp/src/helpers/sleep.ts rename to packages/installations-exp/src/util/sleep.ts diff --git a/packages/installations/test-app/.gitignore b/packages/installations-exp/test-app/.gitignore similarity index 100% rename from packages/installations/test-app/.gitignore rename to packages/installations-exp/test-app/.gitignore diff --git a/packages-exp/installations-exp/test-app/index.html b/packages/installations-exp/test-app/index.html similarity index 100% rename from packages-exp/installations-exp/test-app/index.html rename to packages/installations-exp/test-app/index.html diff --git a/packages-exp/installations-exp/test-app/index.js b/packages/installations-exp/test-app/index.js similarity index 100% rename from packages-exp/installations-exp/test-app/index.js rename to packages/installations-exp/test-app/index.js diff --git a/packages-exp/installations-exp/test-app/rollup.config.js b/packages/installations-exp/test-app/rollup.config.js similarity index 100% rename from packages-exp/installations-exp/test-app/rollup.config.js rename to packages/installations-exp/test-app/rollup.config.js diff --git a/packages-exp/installations-exp/tsconfig.json b/packages/installations-exp/tsconfig.json similarity index 100% rename from packages-exp/installations-exp/tsconfig.json rename to packages/installations-exp/tsconfig.json diff --git a/packages-exp/messaging-compat/.eslintrc.js b/packages/messaging-compat/.eslintrc.js similarity index 100% rename from packages-exp/messaging-compat/.eslintrc.js rename to packages/messaging-compat/.eslintrc.js diff --git a/packages-exp/messaging-compat/README.md b/packages/messaging-compat/README.md similarity index 100% rename from packages-exp/messaging-compat/README.md rename to packages/messaging-compat/README.md diff --git a/packages-exp/messaging-compat/karma.conf.js b/packages/messaging-compat/karma.conf.js similarity index 100% rename from packages-exp/messaging-compat/karma.conf.js rename to packages/messaging-compat/karma.conf.js diff --git a/packages-exp/messaging-compat/package.json b/packages/messaging-compat/package.json similarity index 100% rename from packages-exp/messaging-compat/package.json rename to packages/messaging-compat/package.json diff --git a/packages-exp/messaging-compat/rollup.config.js b/packages/messaging-compat/rollup.config.js similarity index 100% rename from packages-exp/messaging-compat/rollup.config.js rename to packages/messaging-compat/rollup.config.js diff --git a/packages-exp/messaging-compat/rollup.config.release.js b/packages/messaging-compat/rollup.config.release.js similarity index 100% rename from packages-exp/messaging-compat/rollup.config.release.js rename to packages/messaging-compat/rollup.config.release.js diff --git a/packages-exp/messaging-compat/src/index.ts b/packages/messaging-compat/src/index.ts similarity index 100% rename from packages-exp/messaging-compat/src/index.ts rename to packages/messaging-compat/src/index.ts diff --git a/packages-exp/messaging-compat/src/messaging-compat.ts b/packages/messaging-compat/src/messaging-compat.ts similarity index 100% rename from packages-exp/messaging-compat/src/messaging-compat.ts rename to packages/messaging-compat/src/messaging-compat.ts diff --git a/packages-exp/messaging-compat/src/registerMessagingCompat.ts b/packages/messaging-compat/src/registerMessagingCompat.ts similarity index 100% rename from packages-exp/messaging-compat/src/registerMessagingCompat.ts rename to packages/messaging-compat/src/registerMessagingCompat.ts diff --git a/packages-exp/messaging-compat/test/fakes.ts b/packages/messaging-compat/test/fakes.ts similarity index 100% rename from packages-exp/messaging-compat/test/fakes.ts rename to packages/messaging-compat/test/fakes.ts diff --git a/packages-exp/messaging-compat/test/messaging-compat.test.ts b/packages/messaging-compat/test/messaging-compat.test.ts similarity index 100% rename from packages-exp/messaging-compat/test/messaging-compat.test.ts rename to packages/messaging-compat/test/messaging-compat.test.ts diff --git a/packages-exp/messaging-exp/tsconfig.json b/packages/messaging-compat/tsconfig.json similarity index 100% rename from packages-exp/messaging-exp/tsconfig.json rename to packages/messaging-compat/tsconfig.json diff --git a/packages-exp/performance-compat/.eslintrc.js b/packages/messaging-exp/.eslintrc.js similarity index 100% rename from packages-exp/performance-compat/.eslintrc.js rename to packages/messaging-exp/.eslintrc.js diff --git a/packages/messaging/README.md b/packages/messaging-exp/README.md similarity index 100% rename from packages/messaging/README.md rename to packages/messaging-exp/README.md diff --git a/packages-exp/messaging-exp/api-extractor.json b/packages/messaging-exp/api-extractor.json similarity index 100% rename from packages-exp/messaging-exp/api-extractor.json rename to packages/messaging-exp/api-extractor.json diff --git a/packages/messaging/karma.conf.js b/packages/messaging-exp/karma.conf.js similarity index 100% rename from packages/messaging/karma.conf.js rename to packages/messaging-exp/karma.conf.js diff --git a/packages-exp/messaging-exp/package.json b/packages/messaging-exp/package.json similarity index 100% rename from packages-exp/messaging-exp/package.json rename to packages/messaging-exp/package.json diff --git a/packages-exp/messaging-exp/rollup.config.js b/packages/messaging-exp/rollup.config.js similarity index 100% rename from packages-exp/messaging-exp/rollup.config.js rename to packages/messaging-exp/rollup.config.js diff --git a/packages-exp/messaging-exp/rollup.config.release.js b/packages/messaging-exp/rollup.config.release.js similarity index 100% rename from packages-exp/messaging-exp/rollup.config.release.js rename to packages/messaging-exp/rollup.config.release.js diff --git a/packages-exp/messaging-exp/src/api.ts b/packages/messaging-exp/src/api.ts similarity index 100% rename from packages-exp/messaging-exp/src/api.ts rename to packages/messaging-exp/src/api.ts diff --git a/packages-exp/messaging-exp/src/api/deleteToken.ts b/packages/messaging-exp/src/api/deleteToken.ts similarity index 100% rename from packages-exp/messaging-exp/src/api/deleteToken.ts rename to packages/messaging-exp/src/api/deleteToken.ts diff --git a/packages-exp/messaging-exp/src/api/getToken.ts b/packages/messaging-exp/src/api/getToken.ts similarity index 100% rename from packages-exp/messaging-exp/src/api/getToken.ts rename to packages/messaging-exp/src/api/getToken.ts diff --git a/packages-exp/messaging-exp/src/api/isSupported.ts b/packages/messaging-exp/src/api/isSupported.ts similarity index 100% rename from packages-exp/messaging-exp/src/api/isSupported.ts rename to packages/messaging-exp/src/api/isSupported.ts diff --git a/packages-exp/messaging-exp/src/api/onBackgroundMessage.ts b/packages/messaging-exp/src/api/onBackgroundMessage.ts similarity index 100% rename from packages-exp/messaging-exp/src/api/onBackgroundMessage.ts rename to packages/messaging-exp/src/api/onBackgroundMessage.ts diff --git a/packages-exp/messaging-exp/src/api/onMessage.ts b/packages/messaging-exp/src/api/onMessage.ts similarity index 100% rename from packages-exp/messaging-exp/src/api/onMessage.ts rename to packages/messaging-exp/src/api/onMessage.ts diff --git a/packages-exp/messaging-exp/src/api/setDeliveryMetricsExportedToBigQueryEnabled.ts b/packages/messaging-exp/src/api/setDeliveryMetricsExportedToBigQueryEnabled.ts similarity index 100% rename from packages-exp/messaging-exp/src/api/setDeliveryMetricsExportedToBigQueryEnabled.ts rename to packages/messaging-exp/src/api/setDeliveryMetricsExportedToBigQueryEnabled.ts diff --git a/packages/messaging/src/helpers/array-base64-translator.test.ts b/packages/messaging-exp/src/helpers/array-base64-translator.test.ts similarity index 100% rename from packages/messaging/src/helpers/array-base64-translator.test.ts rename to packages/messaging-exp/src/helpers/array-base64-translator.test.ts diff --git a/packages/messaging/src/helpers/array-base64-translator.ts b/packages/messaging-exp/src/helpers/array-base64-translator.ts similarity index 100% rename from packages/messaging/src/helpers/array-base64-translator.ts rename to packages/messaging-exp/src/helpers/array-base64-translator.ts diff --git a/packages-exp/messaging-exp/src/helpers/externalizePayload.test.ts b/packages/messaging-exp/src/helpers/externalizePayload.test.ts similarity index 100% rename from packages-exp/messaging-exp/src/helpers/externalizePayload.test.ts rename to packages/messaging-exp/src/helpers/externalizePayload.test.ts diff --git a/packages-exp/messaging-exp/src/helpers/externalizePayload.ts b/packages/messaging-exp/src/helpers/externalizePayload.ts similarity index 100% rename from packages-exp/messaging-exp/src/helpers/externalizePayload.ts rename to packages/messaging-exp/src/helpers/externalizePayload.ts diff --git a/packages-exp/messaging-exp/src/helpers/extract-app-config.test.ts b/packages/messaging-exp/src/helpers/extract-app-config.test.ts similarity index 100% rename from packages-exp/messaging-exp/src/helpers/extract-app-config.test.ts rename to packages/messaging-exp/src/helpers/extract-app-config.test.ts diff --git a/packages-exp/messaging-exp/src/helpers/extract-app-config.ts b/packages/messaging-exp/src/helpers/extract-app-config.ts similarity index 100% rename from packages-exp/messaging-exp/src/helpers/extract-app-config.ts rename to packages/messaging-exp/src/helpers/extract-app-config.ts diff --git a/packages/messaging/src/helpers/is-console-message.ts b/packages/messaging-exp/src/helpers/is-console-message.ts similarity index 100% rename from packages/messaging/src/helpers/is-console-message.ts rename to packages/messaging-exp/src/helpers/is-console-message.ts diff --git a/packages-exp/messaging-exp/src/helpers/logToFirelog.test.ts b/packages/messaging-exp/src/helpers/logToFirelog.test.ts similarity index 100% rename from packages-exp/messaging-exp/src/helpers/logToFirelog.test.ts rename to packages/messaging-exp/src/helpers/logToFirelog.test.ts diff --git a/packages-exp/messaging-exp/src/helpers/logToFirelog.ts b/packages/messaging-exp/src/helpers/logToFirelog.ts similarity index 100% rename from packages-exp/messaging-exp/src/helpers/logToFirelog.ts rename to packages/messaging-exp/src/helpers/logToFirelog.ts diff --git a/packages-exp/messaging-exp/src/helpers/logToScion.ts b/packages/messaging-exp/src/helpers/logToScion.ts similarity index 100% rename from packages-exp/messaging-exp/src/helpers/logToScion.ts rename to packages/messaging-exp/src/helpers/logToScion.ts diff --git a/packages/messaging/src/helpers/migrate-old-database.test.ts b/packages/messaging-exp/src/helpers/migrate-old-database.test.ts similarity index 100% rename from packages/messaging/src/helpers/migrate-old-database.test.ts rename to packages/messaging-exp/src/helpers/migrate-old-database.test.ts diff --git a/packages/messaging/src/helpers/migrate-old-database.ts b/packages/messaging-exp/src/helpers/migrate-old-database.ts similarity index 100% rename from packages/messaging/src/helpers/migrate-old-database.ts rename to packages/messaging-exp/src/helpers/migrate-old-database.ts diff --git a/packages-exp/messaging-exp/src/helpers/register.ts b/packages/messaging-exp/src/helpers/register.ts similarity index 100% rename from packages-exp/messaging-exp/src/helpers/register.ts rename to packages/messaging-exp/src/helpers/register.ts diff --git a/packages-exp/messaging-exp/src/helpers/registerDefaultSw.ts b/packages/messaging-exp/src/helpers/registerDefaultSw.ts similarity index 100% rename from packages-exp/messaging-exp/src/helpers/registerDefaultSw.ts rename to packages/messaging-exp/src/helpers/registerDefaultSw.ts diff --git a/packages/messaging/src/helpers/sleep.test.ts b/packages/messaging-exp/src/helpers/sleep.test.ts similarity index 100% rename from packages/messaging/src/helpers/sleep.test.ts rename to packages/messaging-exp/src/helpers/sleep.test.ts diff --git a/packages/messaging/src/helpers/sleep.ts b/packages/messaging-exp/src/helpers/sleep.ts similarity index 100% rename from packages/messaging/src/helpers/sleep.ts rename to packages/messaging-exp/src/helpers/sleep.ts diff --git a/packages-exp/messaging-exp/src/helpers/updateSwReg.ts b/packages/messaging-exp/src/helpers/updateSwReg.ts similarity index 100% rename from packages-exp/messaging-exp/src/helpers/updateSwReg.ts rename to packages/messaging-exp/src/helpers/updateSwReg.ts diff --git a/packages-exp/messaging-exp/src/helpers/updateVapidKey.ts b/packages/messaging-exp/src/helpers/updateVapidKey.ts similarity index 100% rename from packages-exp/messaging-exp/src/helpers/updateVapidKey.ts rename to packages/messaging-exp/src/helpers/updateVapidKey.ts diff --git a/packages-exp/messaging-exp/src/index.sw.ts b/packages/messaging-exp/src/index.sw.ts similarity index 100% rename from packages-exp/messaging-exp/src/index.sw.ts rename to packages/messaging-exp/src/index.sw.ts diff --git a/packages-exp/messaging-exp/src/index.ts b/packages/messaging-exp/src/index.ts similarity index 100% rename from packages-exp/messaging-exp/src/index.ts rename to packages/messaging-exp/src/index.ts diff --git a/packages/messaging/src/interfaces/app-config.ts b/packages/messaging-exp/src/interfaces/app-config.ts similarity index 100% rename from packages/messaging/src/interfaces/app-config.ts rename to packages/messaging-exp/src/interfaces/app-config.ts diff --git a/packages-exp/messaging-exp/src/interfaces/internal-dependencies.ts b/packages/messaging-exp/src/interfaces/internal-dependencies.ts similarity index 100% rename from packages-exp/messaging-exp/src/interfaces/internal-dependencies.ts rename to packages/messaging-exp/src/interfaces/internal-dependencies.ts diff --git a/packages/messaging/src/interfaces/internal-message-payload.ts b/packages/messaging-exp/src/interfaces/internal-message-payload.ts similarity index 100% rename from packages/messaging/src/interfaces/internal-message-payload.ts rename to packages/messaging-exp/src/interfaces/internal-message-payload.ts diff --git a/packages-exp/messaging-exp/src/interfaces/logging-types.ts b/packages/messaging-exp/src/interfaces/logging-types.ts similarity index 100% rename from packages-exp/messaging-exp/src/interfaces/logging-types.ts rename to packages/messaging-exp/src/interfaces/logging-types.ts diff --git a/packages-exp/messaging-exp/src/interfaces/public-types.ts b/packages/messaging-exp/src/interfaces/public-types.ts similarity index 100% rename from packages-exp/messaging-exp/src/interfaces/public-types.ts rename to packages/messaging-exp/src/interfaces/public-types.ts diff --git a/packages/messaging/src/interfaces/token-details.ts b/packages/messaging-exp/src/interfaces/token-details.ts similarity index 100% rename from packages/messaging/src/interfaces/token-details.ts rename to packages/messaging-exp/src/interfaces/token-details.ts diff --git a/packages-exp/messaging-exp/src/internals/idb-manager.test.ts b/packages/messaging-exp/src/internals/idb-manager.test.ts similarity index 100% rename from packages-exp/messaging-exp/src/internals/idb-manager.test.ts rename to packages/messaging-exp/src/internals/idb-manager.test.ts diff --git a/packages-exp/messaging-exp/src/internals/idb-manager.ts b/packages/messaging-exp/src/internals/idb-manager.ts similarity index 100% rename from packages-exp/messaging-exp/src/internals/idb-manager.ts rename to packages/messaging-exp/src/internals/idb-manager.ts diff --git a/packages-exp/messaging-exp/src/internals/requests.test.ts b/packages/messaging-exp/src/internals/requests.test.ts similarity index 100% rename from packages-exp/messaging-exp/src/internals/requests.test.ts rename to packages/messaging-exp/src/internals/requests.test.ts diff --git a/packages-exp/messaging-exp/src/internals/requests.ts b/packages/messaging-exp/src/internals/requests.ts similarity index 100% rename from packages-exp/messaging-exp/src/internals/requests.ts rename to packages/messaging-exp/src/internals/requests.ts diff --git a/packages-exp/messaging-exp/src/internals/token-manager.test.ts b/packages/messaging-exp/src/internals/token-manager.test.ts similarity index 100% rename from packages-exp/messaging-exp/src/internals/token-manager.test.ts rename to packages/messaging-exp/src/internals/token-manager.test.ts diff --git a/packages-exp/messaging-exp/src/internals/token-manager.ts b/packages/messaging-exp/src/internals/token-manager.ts similarity index 100% rename from packages-exp/messaging-exp/src/internals/token-manager.ts rename to packages/messaging-exp/src/internals/token-manager.ts diff --git a/packages-exp/messaging-exp/src/listeners/sw-listeners.test.ts b/packages/messaging-exp/src/listeners/sw-listeners.test.ts similarity index 100% rename from packages-exp/messaging-exp/src/listeners/sw-listeners.test.ts rename to packages/messaging-exp/src/listeners/sw-listeners.test.ts diff --git a/packages-exp/messaging-exp/src/listeners/sw-listeners.ts b/packages/messaging-exp/src/listeners/sw-listeners.ts similarity index 100% rename from packages-exp/messaging-exp/src/listeners/sw-listeners.ts rename to packages/messaging-exp/src/listeners/sw-listeners.ts diff --git a/packages-exp/messaging-exp/src/listeners/window-listener.ts b/packages/messaging-exp/src/listeners/window-listener.ts similarity index 100% rename from packages-exp/messaging-exp/src/listeners/window-listener.ts rename to packages/messaging-exp/src/listeners/window-listener.ts diff --git a/packages-exp/messaging-exp/src/messaging-service.ts b/packages/messaging-exp/src/messaging-service.ts similarity index 100% rename from packages-exp/messaging-exp/src/messaging-service.ts rename to packages/messaging-exp/src/messaging-service.ts diff --git a/packages-exp/messaging-exp/src/testing/compare-headers.test.ts b/packages/messaging-exp/src/testing/compare-headers.test.ts similarity index 100% rename from packages-exp/messaging-exp/src/testing/compare-headers.test.ts rename to packages/messaging-exp/src/testing/compare-headers.test.ts diff --git a/packages-exp/messaging-exp/src/testing/compare-headers.ts b/packages/messaging-exp/src/testing/compare-headers.ts similarity index 100% rename from packages-exp/messaging-exp/src/testing/compare-headers.ts rename to packages/messaging-exp/src/testing/compare-headers.ts diff --git a/packages-exp/messaging-exp/src/testing/fakes/firebase-dependencies.ts b/packages/messaging-exp/src/testing/fakes/firebase-dependencies.ts similarity index 100% rename from packages-exp/messaging-exp/src/testing/fakes/firebase-dependencies.ts rename to packages/messaging-exp/src/testing/fakes/firebase-dependencies.ts diff --git a/packages-exp/messaging-exp/src/testing/fakes/logging-object.ts b/packages/messaging-exp/src/testing/fakes/logging-object.ts similarity index 100% rename from packages-exp/messaging-exp/src/testing/fakes/logging-object.ts rename to packages/messaging-exp/src/testing/fakes/logging-object.ts diff --git a/packages-exp/messaging-exp/src/testing/fakes/messaging-service.ts b/packages/messaging-exp/src/testing/fakes/messaging-service.ts similarity index 100% rename from packages-exp/messaging-exp/src/testing/fakes/messaging-service.ts rename to packages/messaging-exp/src/testing/fakes/messaging-service.ts diff --git a/packages-exp/messaging-exp/src/testing/fakes/service-worker.ts b/packages/messaging-exp/src/testing/fakes/service-worker.ts similarity index 100% rename from packages-exp/messaging-exp/src/testing/fakes/service-worker.ts rename to packages/messaging-exp/src/testing/fakes/service-worker.ts diff --git a/packages/messaging/src/testing/fakes/token-details.ts b/packages/messaging-exp/src/testing/fakes/token-details.ts similarity index 100% rename from packages/messaging/src/testing/fakes/token-details.ts rename to packages/messaging-exp/src/testing/fakes/token-details.ts diff --git a/packages-exp/messaging-exp/src/testing/setup.ts b/packages/messaging-exp/src/testing/setup.ts similarity index 100% rename from packages-exp/messaging-exp/src/testing/setup.ts rename to packages/messaging-exp/src/testing/setup.ts diff --git a/packages/messaging/src/testing/sinon-types.ts b/packages/messaging-exp/src/testing/sinon-types.ts similarity index 100% rename from packages/messaging/src/testing/sinon-types.ts rename to packages/messaging-exp/src/testing/sinon-types.ts diff --git a/packages-exp/messaging-exp/src/util/constants.ts b/packages/messaging-exp/src/util/constants.ts similarity index 100% rename from packages-exp/messaging-exp/src/util/constants.ts rename to packages/messaging-exp/src/util/constants.ts diff --git a/packages-exp/messaging-exp/src/util/errors.ts b/packages/messaging-exp/src/util/errors.ts similarity index 100% rename from packages-exp/messaging-exp/src/util/errors.ts rename to packages/messaging-exp/src/util/errors.ts diff --git a/packages-exp/messaging-exp/src/util/sw-types.ts b/packages/messaging-exp/src/util/sw-types.ts similarity index 100% rename from packages-exp/messaging-exp/src/util/sw-types.ts rename to packages/messaging-exp/src/util/sw-types.ts diff --git a/packages-exp/messaging-exp/sw/package.json b/packages/messaging-exp/sw/package.json similarity index 100% rename from packages-exp/messaging-exp/sw/package.json rename to packages/messaging-exp/sw/package.json diff --git a/packages/messaging/tsconfig.json b/packages/messaging-exp/tsconfig.json similarity index 100% rename from packages/messaging/tsconfig.json rename to packages/messaging-exp/tsconfig.json diff --git a/packages-exp/performance-exp/.eslintrc.js b/packages/performance-compat/.eslintrc.js similarity index 100% rename from packages-exp/performance-exp/.eslintrc.js rename to packages/performance-compat/.eslintrc.js diff --git a/packages-exp/performance-compat/README.md b/packages/performance-compat/README.md similarity index 100% rename from packages-exp/performance-compat/README.md rename to packages/performance-compat/README.md diff --git a/packages-exp/performance-compat/karma.conf.js b/packages/performance-compat/karma.conf.js similarity index 100% rename from packages-exp/performance-compat/karma.conf.js rename to packages/performance-compat/karma.conf.js diff --git a/packages-exp/performance-compat/package.json b/packages/performance-compat/package.json similarity index 100% rename from packages-exp/performance-compat/package.json rename to packages/performance-compat/package.json diff --git a/packages-exp/performance-compat/rollup.config.js b/packages/performance-compat/rollup.config.js similarity index 100% rename from packages-exp/performance-compat/rollup.config.js rename to packages/performance-compat/rollup.config.js diff --git a/packages-exp/performance-compat/rollup.config.release.js b/packages/performance-compat/rollup.config.release.js similarity index 100% rename from packages-exp/performance-compat/rollup.config.release.js rename to packages/performance-compat/rollup.config.release.js diff --git a/packages-exp/performance-compat/rollup.shared.js b/packages/performance-compat/rollup.shared.js similarity index 100% rename from packages-exp/performance-compat/rollup.shared.js rename to packages/performance-compat/rollup.shared.js diff --git a/packages-exp/performance-compat/src/index.ts b/packages/performance-compat/src/index.ts similarity index 100% rename from packages-exp/performance-compat/src/index.ts rename to packages/performance-compat/src/index.ts diff --git a/packages-exp/performance-compat/src/performance.test.ts b/packages/performance-compat/src/performance.test.ts similarity index 100% rename from packages-exp/performance-compat/src/performance.test.ts rename to packages/performance-compat/src/performance.test.ts diff --git a/packages-exp/performance-compat/src/performance.ts b/packages/performance-compat/src/performance.ts similarity index 100% rename from packages-exp/performance-compat/src/performance.ts rename to packages/performance-compat/src/performance.ts diff --git a/packages-exp/remote-config-compat/test/setup.ts b/packages/performance-compat/test/setup.ts similarity index 100% rename from packages-exp/remote-config-compat/test/setup.ts rename to packages/performance-compat/test/setup.ts diff --git a/packages-exp/performance-compat/test/util.ts b/packages/performance-compat/test/util.ts similarity index 100% rename from packages-exp/performance-compat/test/util.ts rename to packages/performance-compat/test/util.ts diff --git a/packages-exp/performance-compat/tsconfig.json b/packages/performance-compat/tsconfig.json similarity index 100% rename from packages-exp/performance-compat/tsconfig.json rename to packages/performance-compat/tsconfig.json diff --git a/packages-exp/remote-config-compat/.eslintrc.js b/packages/performance-exp/.eslintrc.js similarity index 100% rename from packages-exp/remote-config-compat/.eslintrc.js rename to packages/performance-exp/.eslintrc.js diff --git a/packages-exp/performance-exp/README.md b/packages/performance-exp/README.md similarity index 100% rename from packages-exp/performance-exp/README.md rename to packages/performance-exp/README.md diff --git a/packages-exp/performance-exp/api-extractor.json b/packages/performance-exp/api-extractor.json similarity index 100% rename from packages-exp/performance-exp/api-extractor.json rename to packages/performance-exp/api-extractor.json diff --git a/packages-exp/performance-exp/karma.conf.js b/packages/performance-exp/karma.conf.js similarity index 100% rename from packages-exp/performance-exp/karma.conf.js rename to packages/performance-exp/karma.conf.js diff --git a/packages-exp/performance-exp/package.json b/packages/performance-exp/package.json similarity index 100% rename from packages-exp/performance-exp/package.json rename to packages/performance-exp/package.json diff --git a/packages-exp/performance-exp/rollup.config.js b/packages/performance-exp/rollup.config.js similarity index 100% rename from packages-exp/performance-exp/rollup.config.js rename to packages/performance-exp/rollup.config.js diff --git a/packages-exp/performance-exp/rollup.config.release.js b/packages/performance-exp/rollup.config.release.js similarity index 100% rename from packages-exp/performance-exp/rollup.config.release.js rename to packages/performance-exp/rollup.config.release.js diff --git a/packages-exp/performance-exp/rollup.shared.js b/packages/performance-exp/rollup.shared.js similarity index 100% rename from packages-exp/performance-exp/rollup.shared.js rename to packages/performance-exp/rollup.shared.js diff --git a/packages-exp/performance-exp/src/constants.ts b/packages/performance-exp/src/constants.ts similarity index 100% rename from packages-exp/performance-exp/src/constants.ts rename to packages/performance-exp/src/constants.ts diff --git a/packages-exp/performance-exp/src/controllers/perf.test.ts b/packages/performance-exp/src/controllers/perf.test.ts similarity index 100% rename from packages-exp/performance-exp/src/controllers/perf.test.ts rename to packages/performance-exp/src/controllers/perf.test.ts diff --git a/packages-exp/performance-exp/src/controllers/perf.ts b/packages/performance-exp/src/controllers/perf.ts similarity index 100% rename from packages-exp/performance-exp/src/controllers/perf.ts rename to packages/performance-exp/src/controllers/perf.ts diff --git a/packages-exp/performance-exp/src/index.test.ts b/packages/performance-exp/src/index.test.ts similarity index 100% rename from packages-exp/performance-exp/src/index.test.ts rename to packages/performance-exp/src/index.test.ts diff --git a/packages-exp/performance-exp/src/index.ts b/packages/performance-exp/src/index.ts similarity index 100% rename from packages-exp/performance-exp/src/index.ts rename to packages/performance-exp/src/index.ts diff --git a/packages-exp/performance-exp/src/public_types.ts b/packages/performance-exp/src/public_types.ts similarity index 100% rename from packages-exp/performance-exp/src/public_types.ts rename to packages/performance-exp/src/public_types.ts diff --git a/packages-exp/performance-exp/src/resources/network_request.test.ts b/packages/performance-exp/src/resources/network_request.test.ts similarity index 100% rename from packages-exp/performance-exp/src/resources/network_request.test.ts rename to packages/performance-exp/src/resources/network_request.test.ts diff --git a/packages-exp/performance-exp/src/resources/network_request.ts b/packages/performance-exp/src/resources/network_request.ts similarity index 100% rename from packages-exp/performance-exp/src/resources/network_request.ts rename to packages/performance-exp/src/resources/network_request.ts diff --git a/packages-exp/performance-exp/src/resources/trace.test.ts b/packages/performance-exp/src/resources/trace.test.ts similarity index 100% rename from packages-exp/performance-exp/src/resources/trace.test.ts rename to packages/performance-exp/src/resources/trace.test.ts diff --git a/packages-exp/performance-exp/src/resources/trace.ts b/packages/performance-exp/src/resources/trace.ts similarity index 100% rename from packages-exp/performance-exp/src/resources/trace.ts rename to packages/performance-exp/src/resources/trace.ts diff --git a/packages-exp/performance-exp/src/services/api_service.test.ts b/packages/performance-exp/src/services/api_service.test.ts similarity index 100% rename from packages-exp/performance-exp/src/services/api_service.test.ts rename to packages/performance-exp/src/services/api_service.test.ts diff --git a/packages-exp/performance-exp/src/services/api_service.ts b/packages/performance-exp/src/services/api_service.ts similarity index 100% rename from packages-exp/performance-exp/src/services/api_service.ts rename to packages/performance-exp/src/services/api_service.ts diff --git a/packages-exp/performance-exp/src/services/iid_service.test.ts b/packages/performance-exp/src/services/iid_service.test.ts similarity index 100% rename from packages-exp/performance-exp/src/services/iid_service.test.ts rename to packages/performance-exp/src/services/iid_service.test.ts diff --git a/packages-exp/performance-exp/src/services/iid_service.ts b/packages/performance-exp/src/services/iid_service.ts similarity index 100% rename from packages-exp/performance-exp/src/services/iid_service.ts rename to packages/performance-exp/src/services/iid_service.ts diff --git a/packages-exp/performance-exp/src/services/initialization_service.test.ts b/packages/performance-exp/src/services/initialization_service.test.ts similarity index 100% rename from packages-exp/performance-exp/src/services/initialization_service.test.ts rename to packages/performance-exp/src/services/initialization_service.test.ts diff --git a/packages-exp/performance-exp/src/services/initialization_service.ts b/packages/performance-exp/src/services/initialization_service.ts similarity index 100% rename from packages-exp/performance-exp/src/services/initialization_service.ts rename to packages/performance-exp/src/services/initialization_service.ts diff --git a/packages-exp/performance-exp/src/services/oob_resources_service.test.ts b/packages/performance-exp/src/services/oob_resources_service.test.ts similarity index 100% rename from packages-exp/performance-exp/src/services/oob_resources_service.test.ts rename to packages/performance-exp/src/services/oob_resources_service.test.ts diff --git a/packages-exp/performance-exp/src/services/oob_resources_service.ts b/packages/performance-exp/src/services/oob_resources_service.ts similarity index 100% rename from packages-exp/performance-exp/src/services/oob_resources_service.ts rename to packages/performance-exp/src/services/oob_resources_service.ts diff --git a/packages-exp/performance-exp/src/services/perf_logger.test.ts b/packages/performance-exp/src/services/perf_logger.test.ts similarity index 100% rename from packages-exp/performance-exp/src/services/perf_logger.test.ts rename to packages/performance-exp/src/services/perf_logger.test.ts diff --git a/packages-exp/performance-exp/src/services/perf_logger.ts b/packages/performance-exp/src/services/perf_logger.ts similarity index 100% rename from packages-exp/performance-exp/src/services/perf_logger.ts rename to packages/performance-exp/src/services/perf_logger.ts diff --git a/packages-exp/performance-exp/src/services/remote_config_service.test.ts b/packages/performance-exp/src/services/remote_config_service.test.ts similarity index 100% rename from packages-exp/performance-exp/src/services/remote_config_service.test.ts rename to packages/performance-exp/src/services/remote_config_service.test.ts diff --git a/packages-exp/performance-exp/src/services/remote_config_service.ts b/packages/performance-exp/src/services/remote_config_service.ts similarity index 100% rename from packages-exp/performance-exp/src/services/remote_config_service.ts rename to packages/performance-exp/src/services/remote_config_service.ts diff --git a/packages-exp/performance-exp/src/services/settings_service.ts b/packages/performance-exp/src/services/settings_service.ts similarity index 100% rename from packages-exp/performance-exp/src/services/settings_service.ts rename to packages/performance-exp/src/services/settings_service.ts diff --git a/packages-exp/performance-exp/src/services/transport_service.test.ts b/packages/performance-exp/src/services/transport_service.test.ts similarity index 100% rename from packages-exp/performance-exp/src/services/transport_service.test.ts rename to packages/performance-exp/src/services/transport_service.test.ts diff --git a/packages-exp/performance-exp/src/services/transport_service.ts b/packages/performance-exp/src/services/transport_service.ts similarity index 100% rename from packages-exp/performance-exp/src/services/transport_service.ts rename to packages/performance-exp/src/services/transport_service.ts diff --git a/packages-exp/performance-exp/src/utils/app_utils.ts b/packages/performance-exp/src/utils/app_utils.ts similarity index 100% rename from packages-exp/performance-exp/src/utils/app_utils.ts rename to packages/performance-exp/src/utils/app_utils.ts diff --git a/packages-exp/performance-exp/src/utils/attribute_utils.test.ts b/packages/performance-exp/src/utils/attribute_utils.test.ts similarity index 100% rename from packages-exp/performance-exp/src/utils/attribute_utils.test.ts rename to packages/performance-exp/src/utils/attribute_utils.test.ts diff --git a/packages-exp/performance-exp/src/utils/attributes_utils.ts b/packages/performance-exp/src/utils/attributes_utils.ts similarity index 100% rename from packages-exp/performance-exp/src/utils/attributes_utils.ts rename to packages/performance-exp/src/utils/attributes_utils.ts diff --git a/packages-exp/performance-exp/src/utils/console_logger.ts b/packages/performance-exp/src/utils/console_logger.ts similarity index 100% rename from packages-exp/performance-exp/src/utils/console_logger.ts rename to packages/performance-exp/src/utils/console_logger.ts diff --git a/packages-exp/performance-exp/src/utils/errors.ts b/packages/performance-exp/src/utils/errors.ts similarity index 100% rename from packages-exp/performance-exp/src/utils/errors.ts rename to packages/performance-exp/src/utils/errors.ts diff --git a/packages-exp/performance-exp/src/utils/metric_utils.test.ts b/packages/performance-exp/src/utils/metric_utils.test.ts similarity index 100% rename from packages-exp/performance-exp/src/utils/metric_utils.test.ts rename to packages/performance-exp/src/utils/metric_utils.test.ts diff --git a/packages-exp/performance-exp/src/utils/metric_utils.ts b/packages/performance-exp/src/utils/metric_utils.ts similarity index 100% rename from packages-exp/performance-exp/src/utils/metric_utils.ts rename to packages/performance-exp/src/utils/metric_utils.ts diff --git a/packages-exp/performance-exp/src/utils/string_merger.test.ts b/packages/performance-exp/src/utils/string_merger.test.ts similarity index 100% rename from packages-exp/performance-exp/src/utils/string_merger.test.ts rename to packages/performance-exp/src/utils/string_merger.test.ts diff --git a/packages-exp/performance-exp/src/utils/string_merger.ts b/packages/performance-exp/src/utils/string_merger.ts similarity index 100% rename from packages-exp/performance-exp/src/utils/string_merger.ts rename to packages/performance-exp/src/utils/string_merger.ts diff --git a/packages-exp/performance-exp/test/setup.ts b/packages/performance-exp/test/setup.ts similarity index 100% rename from packages-exp/performance-exp/test/setup.ts rename to packages/performance-exp/test/setup.ts diff --git a/packages/performance/tsconfig.json b/packages/performance-exp/tsconfig.json similarity index 100% rename from packages/performance/tsconfig.json rename to packages/performance-exp/tsconfig.json diff --git a/packages/app-check/.eslintrc.js b/packages/remote-config-compat/.eslintrc.js similarity index 100% rename from packages/app-check/.eslintrc.js rename to packages/remote-config-compat/.eslintrc.js diff --git a/packages-exp/remote-config-compat/README.md b/packages/remote-config-compat/README.md similarity index 100% rename from packages-exp/remote-config-compat/README.md rename to packages/remote-config-compat/README.md diff --git a/packages-exp/remote-config-compat/karma.conf.js b/packages/remote-config-compat/karma.conf.js similarity index 100% rename from packages-exp/remote-config-compat/karma.conf.js rename to packages/remote-config-compat/karma.conf.js diff --git a/packages-exp/remote-config-compat/package.json b/packages/remote-config-compat/package.json similarity index 100% rename from packages-exp/remote-config-compat/package.json rename to packages/remote-config-compat/package.json diff --git a/packages-exp/remote-config-compat/rollup.config.js b/packages/remote-config-compat/rollup.config.js similarity index 100% rename from packages-exp/remote-config-compat/rollup.config.js rename to packages/remote-config-compat/rollup.config.js diff --git a/packages-exp/remote-config-compat/rollup.config.release.js b/packages/remote-config-compat/rollup.config.release.js similarity index 100% rename from packages-exp/remote-config-compat/rollup.config.release.js rename to packages/remote-config-compat/rollup.config.release.js diff --git a/packages-exp/remote-config-compat/rollup.shared.js b/packages/remote-config-compat/rollup.shared.js similarity index 100% rename from packages-exp/remote-config-compat/rollup.shared.js rename to packages/remote-config-compat/rollup.shared.js diff --git a/packages-exp/remote-config-compat/src/index.ts b/packages/remote-config-compat/src/index.ts similarity index 100% rename from packages-exp/remote-config-compat/src/index.ts rename to packages/remote-config-compat/src/index.ts diff --git a/packages-exp/remote-config-compat/src/remoteConfig.test.ts b/packages/remote-config-compat/src/remoteConfig.test.ts similarity index 100% rename from packages-exp/remote-config-compat/src/remoteConfig.test.ts rename to packages/remote-config-compat/src/remoteConfig.test.ts diff --git a/packages-exp/remote-config-compat/src/remoteConfig.ts b/packages/remote-config-compat/src/remoteConfig.ts similarity index 100% rename from packages-exp/remote-config-compat/src/remoteConfig.ts rename to packages/remote-config-compat/src/remoteConfig.ts diff --git a/packages/app/test/setup.ts b/packages/remote-config-compat/test/setup.ts similarity index 100% rename from packages/app/test/setup.ts rename to packages/remote-config-compat/test/setup.ts diff --git a/packages-exp/remote-config-compat/test/util.ts b/packages/remote-config-compat/test/util.ts similarity index 100% rename from packages-exp/remote-config-compat/test/util.ts rename to packages/remote-config-compat/test/util.ts diff --git a/packages-exp/remote-config-compat/tsconfig.json b/packages/remote-config-compat/tsconfig.json similarity index 100% rename from packages-exp/remote-config-compat/tsconfig.json rename to packages/remote-config-compat/tsconfig.json diff --git a/packages-exp/remote-config-exp/.eslintrc.js b/packages/remote-config-exp/.eslintrc.js similarity index 100% rename from packages-exp/remote-config-exp/.eslintrc.js rename to packages/remote-config-exp/.eslintrc.js diff --git a/packages/remote-config/.npmignore b/packages/remote-config-exp/.npmignore similarity index 100% rename from packages/remote-config/.npmignore rename to packages/remote-config-exp/.npmignore diff --git a/packages/remote-config/README.md b/packages/remote-config-exp/README.md similarity index 100% rename from packages/remote-config/README.md rename to packages/remote-config-exp/README.md diff --git a/packages-exp/remote-config-exp/api-extractor.json b/packages/remote-config-exp/api-extractor.json similarity index 100% rename from packages-exp/remote-config-exp/api-extractor.json rename to packages/remote-config-exp/api-extractor.json diff --git a/packages/remote-config/karma.conf.js b/packages/remote-config-exp/karma.conf.js similarity index 100% rename from packages/remote-config/karma.conf.js rename to packages/remote-config-exp/karma.conf.js diff --git a/packages-exp/remote-config-exp/package.json b/packages/remote-config-exp/package.json similarity index 100% rename from packages-exp/remote-config-exp/package.json rename to packages/remote-config-exp/package.json diff --git a/packages-exp/remote-config-exp/rollup.config.js b/packages/remote-config-exp/rollup.config.js similarity index 100% rename from packages-exp/remote-config-exp/rollup.config.js rename to packages/remote-config-exp/rollup.config.js diff --git a/packages-exp/remote-config-exp/rollup.config.release.js b/packages/remote-config-exp/rollup.config.release.js similarity index 100% rename from packages-exp/remote-config-exp/rollup.config.release.js rename to packages/remote-config-exp/rollup.config.release.js diff --git a/packages-exp/remote-config-exp/rollup.shared.js b/packages/remote-config-exp/rollup.shared.js similarity index 100% rename from packages-exp/remote-config-exp/rollup.shared.js rename to packages/remote-config-exp/rollup.shared.js diff --git a/packages-exp/remote-config-exp/src/api.ts b/packages/remote-config-exp/src/api.ts similarity index 100% rename from packages-exp/remote-config-exp/src/api.ts rename to packages/remote-config-exp/src/api.ts diff --git a/packages-exp/remote-config-exp/src/api2.ts b/packages/remote-config-exp/src/api2.ts similarity index 100% rename from packages-exp/remote-config-exp/src/api2.ts rename to packages/remote-config-exp/src/api2.ts diff --git a/packages/remote-config/src/client/caching_client.ts b/packages/remote-config-exp/src/client/caching_client.ts similarity index 100% rename from packages/remote-config/src/client/caching_client.ts rename to packages/remote-config-exp/src/client/caching_client.ts diff --git a/packages/remote-config/src/client/remote_config_fetch_client.ts b/packages/remote-config-exp/src/client/remote_config_fetch_client.ts similarity index 100% rename from packages/remote-config/src/client/remote_config_fetch_client.ts rename to packages/remote-config-exp/src/client/remote_config_fetch_client.ts diff --git a/packages-exp/remote-config-exp/src/client/rest_client.ts b/packages/remote-config-exp/src/client/rest_client.ts similarity index 100% rename from packages-exp/remote-config-exp/src/client/rest_client.ts rename to packages/remote-config-exp/src/client/rest_client.ts diff --git a/packages/remote-config/src/client/retrying_client.ts b/packages/remote-config-exp/src/client/retrying_client.ts similarity index 100% rename from packages/remote-config/src/client/retrying_client.ts rename to packages/remote-config-exp/src/client/retrying_client.ts diff --git a/packages-exp/remote-config-exp/src/constants.ts b/packages/remote-config-exp/src/constants.ts similarity index 100% rename from packages-exp/remote-config-exp/src/constants.ts rename to packages/remote-config-exp/src/constants.ts diff --git a/packages/remote-config/src/errors.ts b/packages/remote-config-exp/src/errors.ts similarity index 100% rename from packages/remote-config/src/errors.ts rename to packages/remote-config-exp/src/errors.ts diff --git a/packages-exp/remote-config-exp/src/index.ts b/packages/remote-config-exp/src/index.ts similarity index 100% rename from packages-exp/remote-config-exp/src/index.ts rename to packages/remote-config-exp/src/index.ts diff --git a/packages/remote-config/src/language.ts b/packages/remote-config-exp/src/language.ts similarity index 100% rename from packages/remote-config/src/language.ts rename to packages/remote-config-exp/src/language.ts diff --git a/packages-exp/remote-config-exp/src/public_types.ts b/packages/remote-config-exp/src/public_types.ts similarity index 100% rename from packages-exp/remote-config-exp/src/public_types.ts rename to packages/remote-config-exp/src/public_types.ts diff --git a/packages-exp/remote-config-exp/src/register.ts b/packages/remote-config-exp/src/register.ts similarity index 100% rename from packages-exp/remote-config-exp/src/register.ts rename to packages/remote-config-exp/src/register.ts diff --git a/packages-exp/remote-config-exp/src/remote_config.ts b/packages/remote-config-exp/src/remote_config.ts similarity index 100% rename from packages-exp/remote-config-exp/src/remote_config.ts rename to packages/remote-config-exp/src/remote_config.ts diff --git a/packages/remote-config/src/storage/storage.ts b/packages/remote-config-exp/src/storage/storage.ts similarity index 100% rename from packages/remote-config/src/storage/storage.ts rename to packages/remote-config-exp/src/storage/storage.ts diff --git a/packages/remote-config/src/storage/storage_cache.ts b/packages/remote-config-exp/src/storage/storage_cache.ts similarity index 100% rename from packages/remote-config/src/storage/storage_cache.ts rename to packages/remote-config-exp/src/storage/storage_cache.ts diff --git a/packages/remote-config/src/value.ts b/packages/remote-config-exp/src/value.ts similarity index 100% rename from packages/remote-config/src/value.ts rename to packages/remote-config-exp/src/value.ts diff --git a/packages/remote-config/test/client/caching_client.test.ts b/packages/remote-config-exp/test/client/caching_client.test.ts similarity index 100% rename from packages/remote-config/test/client/caching_client.test.ts rename to packages/remote-config-exp/test/client/caching_client.test.ts diff --git a/packages/remote-config/test/client/rest_client.test.ts b/packages/remote-config-exp/test/client/rest_client.test.ts similarity index 100% rename from packages/remote-config/test/client/rest_client.test.ts rename to packages/remote-config-exp/test/client/rest_client.test.ts diff --git a/packages/remote-config/test/client/retrying_client.test.ts b/packages/remote-config-exp/test/client/retrying_client.test.ts similarity index 100% rename from packages/remote-config/test/client/retrying_client.test.ts rename to packages/remote-config-exp/test/client/retrying_client.test.ts diff --git a/packages/remote-config/test/errors.test.ts b/packages/remote-config-exp/test/errors.test.ts similarity index 100% rename from packages/remote-config/test/errors.test.ts rename to packages/remote-config-exp/test/errors.test.ts diff --git a/packages/remote-config/test/language.test.ts b/packages/remote-config-exp/test/language.test.ts similarity index 100% rename from packages/remote-config/test/language.test.ts rename to packages/remote-config-exp/test/language.test.ts diff --git a/packages-exp/remote-config-exp/test/remote_config.test.ts b/packages/remote-config-exp/test/remote_config.test.ts similarity index 100% rename from packages-exp/remote-config-exp/test/remote_config.test.ts rename to packages/remote-config-exp/test/remote_config.test.ts diff --git a/packages/remote-config/test/setup.ts b/packages/remote-config-exp/test/setup.ts similarity index 100% rename from packages/remote-config/test/setup.ts rename to packages/remote-config-exp/test/setup.ts diff --git a/packages/remote-config/test/storage/storage.test.ts b/packages/remote-config-exp/test/storage/storage.test.ts similarity index 100% rename from packages/remote-config/test/storage/storage.test.ts rename to packages/remote-config-exp/test/storage/storage.test.ts diff --git a/packages/remote-config/test/storage/storage_cache.test.ts b/packages/remote-config-exp/test/storage/storage_cache.test.ts similarity index 100% rename from packages/remote-config/test/storage/storage_cache.test.ts rename to packages/remote-config-exp/test/storage/storage_cache.test.ts diff --git a/packages/remote-config/test/value.test.ts b/packages/remote-config-exp/test/value.test.ts similarity index 100% rename from packages/remote-config/test/value.test.ts rename to packages/remote-config-exp/test/value.test.ts diff --git a/packages-exp/remote-config-exp/test_app/index.html b/packages/remote-config-exp/test_app/index.html similarity index 100% rename from packages-exp/remote-config-exp/test_app/index.html rename to packages/remote-config-exp/test_app/index.html diff --git a/packages-exp/remote-config-exp/test_app/index.js b/packages/remote-config-exp/test_app/index.js similarity index 100% rename from packages-exp/remote-config-exp/test_app/index.js rename to packages/remote-config-exp/test_app/index.js diff --git a/packages/remote-config/tsconfig.json b/packages/remote-config-exp/tsconfig.json similarity index 100% rename from packages/remote-config/tsconfig.json rename to packages/remote-config-exp/tsconfig.json From fd7159073141fedb8751ee2dfd860e59679e0d77 Mon Sep 17 00:00:00 2001 From: Feiyang1 Date: Wed, 18 Aug 2021 14:45:09 -0700 Subject: [PATCH 02/38] rename folders --- packages/analytics-compat/README.md | 5 +++ packages/analytics-compat/package.json | 7 ++-- .../{analytics-exp => analytics}/.eslintrc.js | 0 .../{analytics-exp => analytics}/README.md | 0 .../api-extractor.json | 0 .../karma.conf.js | 0 .../karma.integration.conf.js | 0 .../{analytics-exp => analytics}/package.json | 0 .../rollup.config.js | 0 .../rollup.config.release.js | 0 .../rollup.shared.js | 0 .../src/api.test.ts | 0 .../{analytics-exp => analytics}/src/api.ts | 0 .../src/constants.ts | 0 .../src/errors.ts | 0 .../src/factory.ts | 0 .../src/functions.test.ts | 0 .../src/functions.ts | 0 .../src/get-config.test.ts | 0 .../src/get-config.ts | 0 .../src/helpers.test.ts | 0 .../src/helpers.ts | 0 .../src/index.test.ts | 0 .../{analytics-exp => analytics}/src/index.ts | 0 .../src/initialize-analytics.test.ts | 0 .../src/initialize-analytics.ts | 0 .../src/logger.ts | 0 .../src/public-types.ts | 0 .../{analytics-exp => analytics}/src/types.ts | 0 .../testing/get-fake-firebase-services.ts | 0 .../testing/gtag-script-util.ts | 0 .../testing/integration-tests/integration.ts | 0 .../testing/setup.ts | 0 .../tsconfig.json | 0 .../{app-check-exp => app-check}/.eslintrc.js | 0 .../{app-check-exp => app-check}/README.md | 0 .../api-extractor.json | 0 .../karma.conf.js | 0 .../{app-check-exp => app-check}/package.json | 0 .../rollup.config.js | 0 .../rollup.config.release.js | 0 .../rollup.shared.js | 0 .../src/api.test.ts | 0 .../{app-check-exp => app-check}/src/api.ts | 0 .../src/client.test.ts | 0 .../src/client.ts | 0 .../src/constants.ts | 0 .../src/debug.test.ts | 0 .../{app-check-exp => app-check}/src/debug.ts | 0 .../src/errors.ts | 0 .../src/factory.ts | 0 .../{app-check-exp => app-check}/src/index.ts | 0 .../src/indexeddb.ts | 0 .../src/internal-api.test.ts | 0 .../src/internal-api.ts | 0 .../src/logger.ts | 0 .../src/proactive-refresh.test.ts | 0 .../src/proactive-refresh.ts | 0 .../src/providers.ts | 0 .../src/public-types.ts | 0 .../src/recaptcha.test.ts | 0 .../src/recaptcha.ts | 0 .../{app-check-exp => app-check}/src/state.ts | 0 .../src/storage.test.ts | 0 .../src/storage.ts | 0 .../{app-check-exp => app-check}/src/types.ts | 0 .../{app-check-exp => app-check}/src/util.ts | 0 .../test/setup.ts | 0 .../{app-check-exp => app-check}/test/util.ts | 0 .../tsconfig.json | 0 packages/{app-exp => app}/.eslintrc.js | 0 packages/{app-exp => app}/README.md | 2 +- packages/{app-exp => app}/api-extractor.json | 0 packages/{app-exp => app}/karma.conf.js | 0 packages/{app-exp => app}/package.json | 7 ++-- packages/{app-exp => app}/rollup.config.js | 0 .../{app-exp => app}/rollup.config.release.js | 0 packages/{app-exp => app}/rollup.shared.js | 0 packages/{app-exp => app}/src/api.test.ts | 0 packages/{app-exp => app}/src/api.ts | 0 packages/{app-exp => app}/src/constants.ts | 34 +++++++++---------- packages/{app-exp => app}/src/errors.ts | 0 .../{app-exp => app}/src/firebaseApp.test.ts | 0 packages/{app-exp => app}/src/firebaseApp.ts | 2 +- packages/{app-exp => app}/src/index.ts | 0 .../{app-exp => app}/src/internal.test.ts | 0 packages/{app-exp => app}/src/internal.ts | 0 packages/{app-exp => app}/src/logger.ts | 0 .../src/platformLoggerService.test.ts | 0 .../src/platformLoggerService.ts | 0 packages/{app-exp => app}/src/public-types.ts | 4 +-- .../src/registerCoreComponents.ts | 0 packages/{app-exp => app}/src/types.ts | 0 packages/{app-exp => app}/test/setup.ts | 0 packages/{app-exp => app}/test/util.ts | 2 +- packages/{app-exp => app}/tsconfig.json | 0 .../.eslintrc.js | 0 .../README.md | 0 .../demo/.eslintignore | 0 .../demo/.eslintrc.js | 0 .../demo/.gitignore | 0 .../demo/README.md | 0 .../demo/database.rules.json | 0 .../demo/firebase.json | 0 .../demo/functions/index.js | 0 .../demo/functions/package.json | 0 .../demo/functions/yarn.lock | 0 .../demo/package.json | 0 .../demo/public/common.js | 0 .../demo/public/manifest.json | 0 .../demo/public/sample-config.js | 0 .../demo/public/script.js | 0 .../demo/public/style.css | 0 .../demo/rollup.config.js | 0 .../demo/tsconfig.json | 0 .../demo/yarn.lock | 0 .../index.node.ts | 0 .../{auth-compat-exp => auth-compat}/index.ts | 0 .../karma.conf.js | 0 .../package.json | 0 .../rollup.config.js | 0 .../rollup.config.release.js | 0 .../rollup.config.shared.js | 0 .../scripts/run_node_tests.ts | 0 .../src/auth.test.ts | 0 .../src/auth.ts | 0 .../src/persistence.ts | 0 .../src/phone_auth_provider.ts | 0 .../src/platform.ts | 0 .../src/popup_redirect.test.ts | 0 .../src/popup_redirect.ts | 0 .../src/recaptcha_verifier.ts | 0 .../src/user.ts | 0 .../src/user_credential.ts | 0 .../src/wrap.ts | 0 .../test/helpers/helpers.ts | 0 .../test/integration/flows/anonymous.test.ts | 0 .../test/integration/flows/custom.test.ts | 0 .../test/integration/flows/email.test.ts | 0 .../test/integration/flows/idp.test.ts | 0 .../test/integration/flows/oob.test.ts | 0 .../test/integration/flows/phone.test.ts | 0 .../integration/webdriver/static/anonymous.js | 0 .../test/integration/webdriver/static/core.js | 0 .../integration/webdriver/static/email.js | 0 .../integration/webdriver/static/index.html | 0 .../integration/webdriver/static/index.js | 0 .../integration/webdriver/static/lazy_load.js | 0 .../webdriver/static/logged_in.html | 0 .../webdriver/static/persistence.js | 0 .../integration/webdriver/static/popup.js | 0 .../integration/webdriver/static/redirect.js | 0 .../webdriver/static/rollup.config.js | 0 .../test/integration/webdriver/static/ui.js | 0 .../tsconfig.json | 0 packages/{auth-exp => auth}/.eslintrc.js | 0 packages/{auth-exp => auth}/README.md | 0 .../{auth-exp => auth}/api-extractor.json | 0 .../cordova/demo/.gitignore | 0 .../{auth-exp => auth}/cordova/demo/README.md | 0 .../cordova/demo/package.json | 0 .../cordova/demo/rollup.config.js | 0 .../cordova/demo/sample-config.xml | 0 .../cordova/demo/src/index.js | 0 .../cordova/demo/src/logging.js | 0 .../cordova/demo/src/sample-config.js | 0 .../cordova/demo/www/index.html | 0 .../cordova/demo/www/style.css | 0 .../{auth-exp => auth}/cordova/package.json | 0 .../{auth-exp => auth}/demo/.eslintignore | 0 packages/{auth-exp => auth}/demo/.eslintrc.js | 0 packages/{auth-exp => auth}/demo/.gitignore | 0 packages/{auth-exp => auth}/demo/README.md | 0 .../demo/database.rules.json | 0 .../{auth-exp => auth}/demo/firebase.json | 0 .../demo/functions/index.js | 0 .../demo/functions/package.json | 0 .../demo/functions/yarn.lock | 0 packages/{auth-exp => auth}/demo/package.json | 0 .../{auth-exp => auth}/demo/public/common.js | 0 .../{auth-exp => auth}/demo/public/index.html | 0 .../demo/public/manifest.json | 0 .../{auth-exp => auth}/demo/public/style.css | 0 .../{auth-exp => auth}/demo/rollup.config.js | 0 .../{auth-exp => auth}/demo/src/config.d.ts | 0 packages/{auth-exp => auth}/demo/src/index.js | 0 .../{auth-exp => auth}/demo/src/logging.js | 0 .../demo/src/sample-config.js | 0 .../demo/src/worker/service-worker.ts | 0 .../demo/src/worker/tsconfig.json | 0 .../demo/src/worker/web-worker.ts | 0 .../{auth-exp => auth}/demo/tsconfig.json | 0 packages/{auth-exp => auth}/index.cordova.ts | 0 packages/{auth-exp => auth}/index.doc.ts | 0 packages/{auth-exp => auth}/index.node.ts | 0 packages/{auth-exp => auth}/index.rn.ts | 0 packages/{auth-exp => auth}/index.ts | 0 .../{auth-exp => auth}/index.webworker.ts | 0 packages/{auth-exp => auth}/internal/index.ts | 0 .../{auth-exp => auth}/internal/package.json | 0 packages/{auth-exp => auth}/karma.conf.js | 0 packages/{auth-exp => auth}/package.json | 0 .../react-native/package.json | 0 packages/{auth-exp => auth}/rollup.config.js | 0 .../rollup.config.release.js | 0 .../rollup.config.shared.js | 0 .../scripts/run-node-tests.js | 0 .../scripts/run-node-tests.ts | 0 .../api/account_management/account.test.ts | 0 .../src/api/account_management/account.ts | 0 .../email_and_password.test.ts | 0 .../account_management/email_and_password.ts | 0 .../src/api/account_management/mfa.test.ts | 0 .../src/api/account_management/mfa.ts | 0 .../api/account_management/profile.test.ts | 0 .../src/api/account_management/profile.ts | 0 .../authentication/create_auth_uri.test.ts | 0 .../src/api/authentication/create_auth_uri.ts | 0 .../api/authentication/custom_token.test.ts | 0 .../src/api/authentication/custom_token.ts | 0 .../authentication/email_and_password.test.ts | 0 .../api/authentication/email_and_password.ts | 0 .../src/api/authentication/email_link.test.ts | 0 .../src/api/authentication/email_link.ts | 0 .../src/api/authentication/idp.test.ts | 0 .../src/api/authentication/idp.ts | 0 .../src/api/authentication/mfa.test.ts | 0 .../src/api/authentication/mfa.ts | 0 .../src/api/authentication/recaptcha.test.ts | 0 .../src/api/authentication/recaptcha.ts | 0 .../src/api/authentication/sign_up.test.ts | 0 .../src/api/authentication/sign_up.ts | 0 .../src/api/authentication/sms.test.ts | 0 .../src/api/authentication/sms.ts | 0 .../src/api/authentication/token.test.ts | 0 .../src/api/authentication/token.ts | 0 packages/{auth-exp => auth}/src/api/errors.ts | 0 .../{auth-exp => auth}/src/api/index.test.ts | 0 packages/{auth-exp => auth}/src/api/index.ts | 0 .../project_config/get_project_config.test.ts | 0 .../api/project_config/get_project_config.ts | 0 .../src/core/action_code_url.test.ts | 0 .../src/core/action_code_url.ts | 0 .../src/core/auth/auth_event_manager.test.ts | 0 .../src/core/auth/auth_event_manager.ts | 0 .../src/core/auth/auth_impl.test.ts | 0 .../src/core/auth/auth_impl.ts | 0 .../src/core/auth/emulator.test.ts | 0 .../src/core/auth/emulator.ts | 0 .../src/core/auth/firebase_internal.test.ts | 0 .../src/core/auth/firebase_internal.ts | 0 .../src/core/auth/initialize.test.ts | 0 .../src/core/auth/initialize.ts | 0 .../src/core/auth/register.ts | 0 .../src/core/credentials/auth_credential.ts | 0 .../src/core/credentials/email.test.ts | 0 .../src/core/credentials/email.ts | 0 .../src/core/credentials/index.ts | 0 .../src/core/credentials/oauth.test.ts | 0 .../src/core/credentials/oauth.ts | 0 .../src/core/credentials/phone.test.ts | 0 .../src/core/credentials/phone.ts | 0 .../src/core/credentials/saml.test.ts | 0 .../src/core/credentials/saml.ts | 0 .../src/core/errors.test.ts | 0 .../{auth-exp => auth}/src/core/errors.ts | 0 packages/{auth-exp => auth}/src/core/index.ts | 0 .../src/core/persistence/in_memory.test.ts | 0 .../src/core/persistence/in_memory.ts | 0 .../src/core/persistence/index.ts | 0 .../persistence_user_manager.test.ts | 0 .../persistence/persistence_user_manager.ts | 0 .../src/core/providers/email.test.ts | 0 .../src/core/providers/email.ts | 0 .../src/core/providers/facebook.test.ts | 0 .../src/core/providers/facebook.ts | 0 .../src/core/providers/federated.test.ts | 0 .../src/core/providers/federated.ts | 0 .../src/core/providers/github.test.ts | 0 .../src/core/providers/github.ts | 0 .../src/core/providers/google.test.ts | 0 .../src/core/providers/google.ts | 0 .../src/core/providers/oauth.test.ts | 0 .../src/core/providers/oauth.ts | 0 .../src/core/providers/saml.test.ts | 0 .../src/core/providers/saml.ts | 0 .../src/core/providers/twitter.test.ts | 0 .../src/core/providers/twitter.ts | 0 .../abstract_popup_redirect_operation.test.ts | 0 .../abstract_popup_redirect_operation.ts | 0 .../strategies/action_code_settings.test.ts | 0 .../core/strategies/action_code_settings.ts | 0 .../src/core/strategies/anonymous.test.ts | 0 .../src/core/strategies/anonymous.ts | 0 .../src/core/strategies/credential.test.ts | 0 .../src/core/strategies/credential.ts | 0 .../src/core/strategies/custom_token.test.ts | 0 .../src/core/strategies/custom_token.ts | 0 .../src/core/strategies/email.test.ts | 0 .../src/core/strategies/email.ts | 0 .../strategies/email_and_password.test.ts | 0 .../src/core/strategies/email_and_password.ts | 0 .../src/core/strategies/email_link.test.ts | 0 .../src/core/strategies/email_link.ts | 0 .../src/core/strategies/idp.test.ts | 0 .../src/core/strategies/idp.ts | 0 .../src/core/strategies/redirect.test.ts | 0 .../src/core/strategies/redirect.ts | 0 .../src/core/user/account_info.test.ts | 0 .../src/core/user/account_info.ts | 0 .../core/user/additional_user_info.test.ts | 0 .../src/core/user/additional_user_info.ts | 0 .../src/core/user/id_token_result.test.ts | 0 .../src/core/user/id_token_result.ts | 0 .../src/core/user/invalidation.test.ts | 0 .../src/core/user/invalidation.ts | 0 .../src/core/user/link_unlink.test.ts | 0 .../src/core/user/link_unlink.ts | 0 .../src/core/user/proactive_refresh.test.ts | 0 .../src/core/user/proactive_refresh.ts | 0 .../src/core/user/reauthenticate.test.ts | 0 .../src/core/user/reauthenticate.ts | 0 .../src/core/user/reload.test.ts | 0 .../src/core/user/reload.ts | 0 .../src/core/user/token_manager.test.ts | 0 .../src/core/user/token_manager.ts | 0 .../core/user/user_credential_impl.test.ts | 0 .../src/core/user/user_credential_impl.ts | 0 .../src/core/user/user_impl.test.ts | 0 .../src/core/user/user_impl.ts | 0 .../src/core/user/user_metadata.ts | 0 .../src/core/util/assert.test.ts | 0 .../src/core/util/assert.ts | 0 .../src/core/util/browser.test.ts | 0 .../src/core/util/browser.ts | 0 .../src/core/util/delay.test.ts | 0 .../{auth-exp => auth}/src/core/util/delay.ts | 0 .../src/core/util/emulator.test.ts | 0 .../src/core/util/emulator.ts | 0 .../src/core/util/event_id.test.ts | 0 .../src/core/util/event_id.ts | 0 .../src/core/util/fetch_provider.ts | 0 .../src/core/util/handler.ts | 0 .../src/core/util/instantiator.test.ts | 0 .../src/core/util/instantiator.ts | 0 .../src/core/util/location.ts | 0 .../{auth-exp => auth}/src/core/util/log.ts | 0 .../src/core/util/navigator.ts | 0 .../src/core/util/providers.ts | 0 .../src/core/util/resolver.ts | 0 .../{auth-exp => auth}/src/core/util/time.ts | 0 .../src/core/util/validate_origin.test.ts | 0 .../src/core/util/validate_origin.ts | 0 .../src/core/util/version.test.ts | 0 .../src/core/util/version.ts | 0 packages/{auth-exp => auth}/src/index.ts | 0 packages/{auth-exp => auth}/src/mfa/index.ts | 0 .../src/mfa/mfa_assertion.ts | 0 .../{auth-exp => auth}/src/mfa/mfa_error.ts | 0 .../src/mfa/mfa_info.test.ts | 0 .../{auth-exp => auth}/src/mfa/mfa_info.ts | 0 .../src/mfa/mfa_resolver.test.ts | 0 .../src/mfa/mfa_resolver.ts | 0 .../src/mfa/mfa_session.test.ts | 0 .../{auth-exp => auth}/src/mfa/mfa_session.ts | 0 .../src/mfa/mfa_user.test.ts | 0 .../{auth-exp => auth}/src/mfa/mfa_user.ts | 0 .../src/model/application_verifier.ts | 0 packages/{auth-exp => auth}/src/model/auth.ts | 0 .../{auth-exp => auth}/src/model/enum_maps.ts | 0 .../{auth-exp => auth}/src/model/enums.ts | 0 .../{auth-exp => auth}/src/model/id_token.ts | 0 .../src/model/popup_redirect.ts | 0 .../src/model/public_types.ts | 0 packages/{auth-exp => auth}/src/model/user.ts | 0 .../src/platform_browser/auth.test.ts | 0 .../src/platform_browser/auth_window.ts | 0 .../platform_browser/iframe/gapi.iframes.ts | 0 .../src/platform_browser/iframe/gapi.test.ts | 0 .../src/platform_browser/iframe/gapi.ts | 0 .../platform_browser/iframe/iframe.test.ts | 0 .../src/platform_browser/iframe/iframe.ts | 0 .../src/platform_browser/load_js.test.ts | 0 .../src/platform_browser/load_js.ts | 0 .../platform_browser/messagechannel/index.ts | 0 .../messagechannel/promise.test.ts | 0 .../messagechannel/promise.ts | 0 .../messagechannel/receiver.test.ts | 0 .../messagechannel/receiver.ts | 0 .../messagechannel/sender.test.ts | 0 .../platform_browser/messagechannel/sender.ts | 0 .../mfa/assertions/phone.test.ts | 0 .../platform_browser/mfa/assertions/phone.ts | 0 .../platform_browser/persistence/browser.ts | 0 .../persistence/indexed_db.test.ts | 0 .../persistence/indexed_db.ts | 0 .../persistence/local_storage.test.ts | 0 .../persistence/local_storage.ts | 0 .../persistence/session_storage.test.ts | 0 .../persistence/session_storage.ts | 0 .../platform_browser/popup_redirect.test.ts | 0 .../src/platform_browser/popup_redirect.ts | 0 .../platform_browser/providers/phone.test.ts | 0 .../src/platform_browser/providers/phone.ts | 0 .../platform_browser/recaptcha/recaptcha.ts | 0 .../recaptcha/recaptcha_loader.test.ts | 0 .../recaptcha/recaptcha_loader.ts | 0 .../recaptcha/recaptcha_mock.test.ts | 0 .../recaptcha/recaptcha_mock.ts | 0 .../recaptcha/recaptcha_verifier.test.ts | 0 .../recaptcha/recaptcha_verifier.ts | 0 .../platform_browser/strategies/phone.test.ts | 0 .../src/platform_browser/strategies/phone.ts | 0 .../platform_browser/strategies/popup.test.ts | 0 .../src/platform_browser/strategies/popup.ts | 0 .../strategies/redirect.test.ts | 0 .../platform_browser/strategies/redirect.ts | 0 .../src/platform_browser/util/popup.test.ts | 0 .../src/platform_browser/util/popup.ts | 0 .../src/platform_browser/util/worker.ts | 0 .../src/platform_cordova/plugins.ts | 0 .../popup_redirect/events.test.ts | 0 .../platform_cordova/popup_redirect/events.ts | 0 .../popup_redirect/popup_redirect.test.ts | 0 .../popup_redirect/popup_redirect.ts | 0 .../popup_redirect/utils.test.ts | 0 .../platform_cordova/popup_redirect/utils.ts | 0 .../platform_cordova/strategies/redirect.ts | 0 .../persistence/react_native.test.ts | 0 .../persistence/react_native.ts | 0 .../platform_react_native/react-native.d.ts | 0 .../test/helpers/api/helper.ts | 0 .../{auth-exp => auth}/test/helpers/delay.ts | 0 .../test/helpers/fake_service_worker.ts | 0 .../test/helpers/id_token_response.ts | 0 .../test/helpers/iframe_event.ts | 0 .../integration/emulator_rest_helpers.ts | 0 .../test/helpers/integration/helpers.ts | 0 .../test/helpers/integration/settings.ts | 0 .../{auth-exp => auth}/test/helpers/jwt.ts | 0 .../test/helpers/mock_auth.ts | 0 .../test/helpers/mock_auth_credential.ts | 0 .../test/helpers/mock_fetch.test.ts | 0 .../test/helpers/mock_fetch.ts | 0 .../helpers/mock_popup_redirect_resolver.ts | 0 .../test/helpers/redirect_persistence.ts | 0 .../test/helpers/timeout_stub.ts | 0 .../test/integration/flows/anonymous.test.ts | 0 .../integration/flows/custom.local.test.ts | 0 .../test/integration/flows/email.test.ts | 0 .../test/integration/flows/idp.local.test.ts | 0 .../test/integration/flows/oob.local.test.ts | 0 .../test/integration/flows/phone.test.ts | 0 .../integration/webdriver/anonymous.test.ts | 0 .../webdriver/compat/firebaseui.test.ts | 0 .../integration/webdriver/persistence.test.ts | 0 .../test/integration/webdriver/popup.test.ts | 0 .../integration/webdriver/redirect.test.ts | 0 .../integration/webdriver/static/anonymous.js | 0 .../test/integration/webdriver/static/core.js | 0 .../integration/webdriver/static/email.js | 0 .../integration/webdriver/static/index.html | 0 .../integration/webdriver/static/index.js | 0 .../webdriver/static/persistence.js | 0 .../integration/webdriver/static/popup.js | 0 .../integration/webdriver/static/redirect.js | 0 .../webdriver/static/rollup.config.js | 0 .../integration/webdriver/util/auth_driver.ts | 0 .../integration/webdriver/util/functions.ts | 0 .../integration/webdriver/util/idp_page.ts | 0 .../webdriver/util/js_load_condition.ts | 0 .../integration/webdriver/util/test_runner.ts | 0 .../integration/webdriver/util/test_server.ts | 0 .../integration/webdriver/util/ui_page.ts | 0 packages/{auth-exp => auth}/tsconfig.json | 0 .../{firebase-exp => firebase}/.eslintrc.js | 0 .../{firebase-exp => firebase}/.gitignore | 0 packages/{firebase-exp => firebase}/README.md | 0 .../analytics/index.ts | 0 .../analytics/package.json | 0 .../app-check/index.ts | 0 .../app-check/package.json | 0 .../app/index.cdn.ts | 0 .../{firebase-exp => firebase}/app/index.ts | 0 .../app/package.json | 0 .../auth/cordova/index.ts | 0 .../auth/cordova/package.json | 0 .../{firebase-exp => firebase}/auth/index.ts | 0 .../auth/package.json | 0 .../auth/react-native/index.ts | 0 .../auth/react-native/package.json | 0 .../compat/analytics/index.ts | 0 .../compat/analytics/package.json | 0 .../compat/app-check/index.ts | 0 .../compat/app-check/package.json | 0 .../compat/app/index.cdn.ts | 0 .../compat/app/index.ts | 0 .../compat/app/package.json | 0 .../compat/auth/index.ts | 0 .../compat/auth/package.json | 0 .../compat/database/index.ts | 0 .../compat/database/package.json | 0 .../compat/firestore/index.ts | 0 .../compat/firestore/package.json | 0 .../compat/functions/index.ts | 0 .../compat/functions/package.json | 0 .../compat/index.cdn.ts | 0 .../compat/index.d.ts | 0 .../compat/index.node.ts | 0 .../compat/index.perf.ts | 0 .../compat/index.rn.ts | 0 .../compat/index.ts | 0 .../compat/messaging/index.ts | 0 .../compat/messaging/package.json | 0 .../compat/package.json | 0 .../compat/performance/index.ts | 0 .../compat/performance/package.json | 0 .../compat/remote-config/index.ts | 0 .../compat/remote-config/package.json | 0 .../compat/rollup.config.js | 0 .../compat/rollup.config.release.js | 0 .../compat/storage/index.ts | 0 .../compat/storage/package.json | 0 .../database/index.ts | 0 .../database/package.json | 0 .../firestore/index.ts | 0 .../firestore/lite/index.ts | 0 .../firestore/lite/package.json | 0 .../firestore/package.json | 0 .../functions/index.ts | 0 .../functions/package.json | 0 .../{firebase-exp => firebase}/gulpfile.js | 0 .../messaging/index.ts | 0 .../messaging/package.json | 0 .../messaging/sw/index.ts | 0 .../messaging/sw/package.json | 0 .../{firebase-exp => firebase}/package.json | 0 .../performance/index.ts | 0 .../performance/package.json | 0 .../remote-config/index.ts | 0 .../remote-config/package.json | 0 .../rollup.config.js | 0 .../rollup.config.release.js | 0 .../storage/index.ts | 0 .../storage/package.json | 0 .../{firebase-exp => firebase}/tsconfig.json | 0 .../{functions-exp => functions}/.eslintrc.js | 0 .../{functions-exp => functions}/README.md | 0 .../api-extractor.json | 0 .../karma.conf.js | 0 .../{functions-exp => functions}/package.json | 0 .../rollup.config.js | 0 .../rollup.config.release.js | 0 .../rollup.shared.js | 0 .../{functions-exp => functions}/src/api.ts | 0 .../src/callable.test.ts | 0 .../src/config.ts | 0 .../src/constants.ts | 0 .../src/context.ts | 0 .../{functions-exp => functions}/src/error.ts | 0 .../src/index.node.ts | 0 .../{functions-exp => functions}/src/index.ts | 0 .../src/public-types.ts | 0 .../src/serializer.test.ts | 0 .../src/serializer.ts | 0 .../src/service.test.ts | 0 .../src/service.ts | 0 .../test/utils.ts | 0 .../tsconfig.json | 0 .../.eslintrc.js | 0 .../api-extractor.json | 0 .../karma.conf.js | 0 .../package.json | 0 .../rollup.config.js | 0 .../rollup.config.release.js | 0 .../rollup.shared.js | 0 .../src/api/delete-installations.test.ts | 0 .../src/api/delete-installations.ts | 0 .../src/api/get-id.test.ts | 0 .../src/api/get-id.ts | 0 .../src/api/get-installations.ts | 0 .../src/api/get-token.test.ts | 0 .../src/api/get-token.ts | 0 .../src/api/index.ts | 0 .../src/api/on-id-change.test.ts | 0 .../src/api/on-id-change.ts | 0 .../src/functions/common.test.ts | 0 .../src/functions/common.ts | 0 .../src/functions/config.ts | 0 .../create-installation-request.test.ts | 0 .../functions/create-installation-request.ts | 0 .../delete-installation-request.test.ts | 0 .../functions/delete-installation-request.ts | 0 .../generate-auth-token-request.test.ts | 0 .../functions/generate-auth-token-request.ts | 0 .../helpers/buffer-to-base64-url-safe.test.ts | 0 .../src/helpers/buffer-to-base64-url-safe.ts | 0 .../src/helpers/extract-app-config.test.ts | 0 .../src/helpers/extract-app-config.ts | 0 .../src/helpers/fid-changed.test.ts | 0 .../src/helpers/fid-changed.ts | 0 .../src/helpers/generate-fid.test.ts | 0 .../src/helpers/generate-fid.ts | 0 .../helpers/get-installation-entry.test.ts | 0 .../src/helpers/get-installation-entry.ts | 0 .../src/helpers/idb-manager.test.ts | 0 .../src/helpers/idb-manager.ts | 0 .../src/helpers/refresh-auth-token.test.ts | 0 .../src/helpers/refresh-auth-token.ts | 0 .../src/index.ts | 0 .../src/interfaces/api-response.ts | 0 .../src/interfaces/installation-entry.ts | 0 .../src/interfaces/installation-impl.ts | 0 .../src/interfaces/public-types.ts | 0 .../src/testing/compare-headers.test.ts | 0 .../src/testing/compare-headers.ts | 0 .../src/testing/fake-generators.ts | 0 .../src/testing/setup.ts | 0 .../src/util/constants.ts | 0 .../src/util/errors.ts | 0 .../src/util/get-key.ts | 0 .../src/util/sleep.test.ts | 0 .../src/util/sleep.ts | 0 .../test-app/.gitignore | 0 .../test-app/index.html | 0 .../test-app/index.js | 0 .../test-app/rollup.config.js | 0 .../tsconfig.json | 0 .../{messaging-exp => messaging}/.eslintrc.js | 0 .../{messaging-exp => messaging}/README.md | 0 .../api-extractor.json | 0 .../karma.conf.js | 0 .../{messaging-exp => messaging}/package.json | 0 .../rollup.config.js | 0 .../rollup.config.release.js | 0 .../{messaging-exp => messaging}/src/api.ts | 0 .../src/api/deleteToken.ts | 0 .../src/api/getToken.ts | 0 .../src/api/isSupported.ts | 0 .../src/api/onBackgroundMessage.ts | 0 .../src/api/onMessage.ts | 0 ...eliveryMetricsExportedToBigQueryEnabled.ts | 0 .../helpers/array-base64-translator.test.ts | 0 .../src/helpers/array-base64-translator.ts | 0 .../src/helpers/externalizePayload.test.ts | 0 .../src/helpers/externalizePayload.ts | 0 .../src/helpers/extract-app-config.test.ts | 0 .../src/helpers/extract-app-config.ts | 0 .../src/helpers/is-console-message.ts | 0 .../src/helpers/logToFirelog.test.ts | 0 .../src/helpers/logToFirelog.ts | 0 .../src/helpers/logToScion.ts | 0 .../src/helpers/migrate-old-database.test.ts | 0 .../src/helpers/migrate-old-database.ts | 0 .../src/helpers/register.ts | 0 .../src/helpers/registerDefaultSw.ts | 0 .../src/helpers/sleep.test.ts | 0 .../src/helpers/sleep.ts | 0 .../src/helpers/updateSwReg.ts | 0 .../src/helpers/updateVapidKey.ts | 0 .../src/index.sw.ts | 0 .../{messaging-exp => messaging}/src/index.ts | 0 .../src/interfaces/app-config.ts | 0 .../src/interfaces/internal-dependencies.ts | 0 .../interfaces/internal-message-payload.ts | 0 .../src/interfaces/logging-types.ts | 0 .../src/interfaces/public-types.ts | 0 .../src/interfaces/token-details.ts | 0 .../src/internals/idb-manager.test.ts | 0 .../src/internals/idb-manager.ts | 0 .../src/internals/requests.test.ts | 0 .../src/internals/requests.ts | 0 .../src/internals/token-manager.test.ts | 0 .../src/internals/token-manager.ts | 0 .../src/listeners/sw-listeners.test.ts | 0 .../src/listeners/sw-listeners.ts | 0 .../src/listeners/window-listener.ts | 0 .../src/messaging-service.ts | 0 .../src/testing/compare-headers.test.ts | 0 .../src/testing/compare-headers.ts | 0 .../testing/fakes/firebase-dependencies.ts | 0 .../src/testing/fakes/logging-object.ts | 0 .../src/testing/fakes/messaging-service.ts | 0 .../src/testing/fakes/service-worker.ts | 0 .../src/testing/fakes/token-details.ts | 0 .../src/testing/setup.ts | 0 .../src/testing/sinon-types.ts | 0 .../src/util/constants.ts | 0 .../src/util/errors.ts | 0 .../src/util/sw-types.ts | 0 .../sw/package.json | 0 .../tsconfig.json | 0 .../.eslintrc.js | 0 .../README.md | 0 .../api-extractor.json | 0 .../karma.conf.js | 0 .../package.json | 0 .../rollup.config.js | 0 .../rollup.config.release.js | 0 .../rollup.shared.js | 0 .../src/constants.ts | 0 .../src/controllers/perf.test.ts | 0 .../src/controllers/perf.ts | 0 .../src/index.test.ts | 0 .../src/index.ts | 0 .../src/public_types.ts | 0 .../src/resources/network_request.test.ts | 0 .../src/resources/network_request.ts | 0 .../src/resources/trace.test.ts | 0 .../src/resources/trace.ts | 0 .../src/services/api_service.test.ts | 0 .../src/services/api_service.ts | 0 .../src/services/iid_service.test.ts | 0 .../src/services/iid_service.ts | 0 .../services/initialization_service.test.ts | 0 .../src/services/initialization_service.ts | 0 .../services/oob_resources_service.test.ts | 0 .../src/services/oob_resources_service.ts | 0 .../src/services/perf_logger.test.ts | 0 .../src/services/perf_logger.ts | 0 .../services/remote_config_service.test.ts | 0 .../src/services/remote_config_service.ts | 0 .../src/services/settings_service.ts | 0 .../src/services/transport_service.test.ts | 0 .../src/services/transport_service.ts | 0 .../src/utils/app_utils.ts | 0 .../src/utils/attribute_utils.test.ts | 0 .../src/utils/attributes_utils.ts | 0 .../src/utils/console_logger.ts | 0 .../src/utils/errors.ts | 0 .../src/utils/metric_utils.test.ts | 0 .../src/utils/metric_utils.ts | 0 .../src/utils/string_merger.test.ts | 0 .../src/utils/string_merger.ts | 0 .../test/setup.ts | 0 .../tsconfig.json | 0 .../.eslintrc.js | 0 .../.npmignore | 0 .../README.md | 0 .../api-extractor.json | 0 .../karma.conf.js | 0 .../package.json | 0 .../rollup.config.js | 0 .../rollup.config.release.js | 0 .../rollup.shared.js | 0 .../src/api.ts | 0 .../src/api2.ts | 0 .../src/client/caching_client.ts | 0 .../src/client/remote_config_fetch_client.ts | 0 .../src/client/rest_client.ts | 0 .../src/client/retrying_client.ts | 0 .../src/constants.ts | 0 .../src/errors.ts | 0 .../src/index.ts | 0 .../src/language.ts | 0 .../src/public_types.ts | 0 .../src/register.ts | 0 .../src/remote_config.ts | 0 .../src/storage/storage.ts | 0 .../src/storage/storage_cache.ts | 0 .../src/value.ts | 0 .../test/client/caching_client.test.ts | 0 .../test/client/rest_client.test.ts | 0 .../test/client/retrying_client.test.ts | 0 .../test/errors.test.ts | 0 .../test/language.test.ts | 0 .../test/remote_config.test.ts | 0 .../test/setup.ts | 0 .../test/storage/storage.test.ts | 0 .../test/storage/storage_cache.test.ts | 0 .../test/value.test.ts | 0 .../test_app/index.html | 0 .../test_app/index.js | 0 .../tsconfig.json | 0 774 files changed, 33 insertions(+), 30 deletions(-) create mode 100644 packages/analytics-compat/README.md rename packages/{analytics-exp => analytics}/.eslintrc.js (100%) rename packages/{analytics-exp => analytics}/README.md (100%) rename packages/{analytics-exp => analytics}/api-extractor.json (100%) rename packages/{analytics-exp => analytics}/karma.conf.js (100%) rename packages/{analytics-exp => analytics}/karma.integration.conf.js (100%) rename packages/{analytics-exp => analytics}/package.json (100%) rename packages/{analytics-exp => analytics}/rollup.config.js (100%) rename packages/{analytics-exp => analytics}/rollup.config.release.js (100%) rename packages/{analytics-exp => analytics}/rollup.shared.js (100%) rename packages/{analytics-exp => analytics}/src/api.test.ts (100%) rename packages/{analytics-exp => analytics}/src/api.ts (100%) rename packages/{analytics-exp => analytics}/src/constants.ts (100%) rename packages/{analytics-exp => analytics}/src/errors.ts (100%) rename packages/{analytics-exp => analytics}/src/factory.ts (100%) rename packages/{analytics-exp => analytics}/src/functions.test.ts (100%) rename packages/{analytics-exp => analytics}/src/functions.ts (100%) rename packages/{analytics-exp => analytics}/src/get-config.test.ts (100%) rename packages/{analytics-exp => analytics}/src/get-config.ts (100%) rename packages/{analytics-exp => analytics}/src/helpers.test.ts (100%) rename packages/{analytics-exp => analytics}/src/helpers.ts (100%) rename packages/{analytics-exp => analytics}/src/index.test.ts (100%) rename packages/{analytics-exp => analytics}/src/index.ts (100%) rename packages/{analytics-exp => analytics}/src/initialize-analytics.test.ts (100%) rename packages/{analytics-exp => analytics}/src/initialize-analytics.ts (100%) rename packages/{analytics-exp => analytics}/src/logger.ts (100%) rename packages/{analytics-exp => analytics}/src/public-types.ts (100%) rename packages/{analytics-exp => analytics}/src/types.ts (100%) rename packages/{analytics-exp => analytics}/testing/get-fake-firebase-services.ts (100%) rename packages/{analytics-exp => analytics}/testing/gtag-script-util.ts (100%) rename packages/{analytics-exp => analytics}/testing/integration-tests/integration.ts (100%) rename packages/{analytics-exp => analytics}/testing/setup.ts (100%) rename packages/{analytics-exp => analytics}/tsconfig.json (100%) rename packages/{app-check-exp => app-check}/.eslintrc.js (100%) rename packages/{app-check-exp => app-check}/README.md (100%) rename packages/{app-check-exp => app-check}/api-extractor.json (100%) rename packages/{app-check-exp => app-check}/karma.conf.js (100%) rename packages/{app-check-exp => app-check}/package.json (100%) rename packages/{app-check-exp => app-check}/rollup.config.js (100%) rename packages/{app-check-exp => app-check}/rollup.config.release.js (100%) rename packages/{app-check-exp => app-check}/rollup.shared.js (100%) rename packages/{app-check-exp => app-check}/src/api.test.ts (100%) rename packages/{app-check-exp => app-check}/src/api.ts (100%) rename packages/{app-check-exp => app-check}/src/client.test.ts (100%) rename packages/{app-check-exp => app-check}/src/client.ts (100%) rename packages/{app-check-exp => app-check}/src/constants.ts (100%) rename packages/{app-check-exp => app-check}/src/debug.test.ts (100%) rename packages/{app-check-exp => app-check}/src/debug.ts (100%) rename packages/{app-check-exp => app-check}/src/errors.ts (100%) rename packages/{app-check-exp => app-check}/src/factory.ts (100%) rename packages/{app-check-exp => app-check}/src/index.ts (100%) rename packages/{app-check-exp => app-check}/src/indexeddb.ts (100%) rename packages/{app-check-exp => app-check}/src/internal-api.test.ts (100%) rename packages/{app-check-exp => app-check}/src/internal-api.ts (100%) rename packages/{app-check-exp => app-check}/src/logger.ts (100%) rename packages/{app-check-exp => app-check}/src/proactive-refresh.test.ts (100%) rename packages/{app-check-exp => app-check}/src/proactive-refresh.ts (100%) rename packages/{app-check-exp => app-check}/src/providers.ts (100%) rename packages/{app-check-exp => app-check}/src/public-types.ts (100%) rename packages/{app-check-exp => app-check}/src/recaptcha.test.ts (100%) rename packages/{app-check-exp => app-check}/src/recaptcha.ts (100%) rename packages/{app-check-exp => app-check}/src/state.ts (100%) rename packages/{app-check-exp => app-check}/src/storage.test.ts (100%) rename packages/{app-check-exp => app-check}/src/storage.ts (100%) rename packages/{app-check-exp => app-check}/src/types.ts (100%) rename packages/{app-check-exp => app-check}/src/util.ts (100%) rename packages/{app-check-exp => app-check}/test/setup.ts (100%) rename packages/{app-check-exp => app-check}/test/util.ts (100%) rename packages/{app-check-exp => app-check}/tsconfig.json (100%) rename packages/{app-exp => app}/.eslintrc.js (100%) rename packages/{app-exp => app}/README.md (92%) rename packages/{app-exp => app}/api-extractor.json (100%) rename packages/{app-exp => app}/karma.conf.js (100%) rename packages/{app-exp => app}/package.json (93%) rename packages/{app-exp => app}/rollup.config.js (100%) rename packages/{app-exp => app}/rollup.config.release.js (100%) rename packages/{app-exp => app}/rollup.shared.js (100%) rename packages/{app-exp => app}/src/api.test.ts (100%) rename packages/{app-exp => app}/src/api.ts (100%) rename packages/{app-exp => app}/src/constants.ts (64%) rename packages/{app-exp => app}/src/errors.ts (100%) rename packages/{app-exp => app}/src/firebaseApp.test.ts (100%) rename packages/{app-exp => app}/src/firebaseApp.ts (97%) rename packages/{app-exp => app}/src/index.ts (100%) rename packages/{app-exp => app}/src/internal.test.ts (100%) rename packages/{app-exp => app}/src/internal.ts (100%) rename packages/{app-exp => app}/src/logger.ts (100%) rename packages/{app-exp => app}/src/platformLoggerService.test.ts (100%) rename packages/{app-exp => app}/src/platformLoggerService.ts (100%) rename packages/{app-exp => app}/src/public-types.ts (98%) rename packages/{app-exp => app}/src/registerCoreComponents.ts (100%) rename packages/{app-exp => app}/src/types.ts (100%) rename packages/{app-exp => app}/test/setup.ts (100%) rename packages/{app-exp => app}/test/util.ts (95%) rename packages/{app-exp => app}/tsconfig.json (100%) rename packages/{auth-compat-exp => auth-compat}/.eslintrc.js (100%) rename packages/{auth-compat-exp => auth-compat}/README.md (100%) rename packages/{auth-compat-exp => auth-compat}/demo/.eslintignore (100%) rename packages/{auth-compat-exp => auth-compat}/demo/.eslintrc.js (100%) rename packages/{auth-compat-exp => auth-compat}/demo/.gitignore (100%) rename packages/{auth-compat-exp => auth-compat}/demo/README.md (100%) rename packages/{auth-compat-exp => auth-compat}/demo/database.rules.json (100%) rename packages/{auth-compat-exp => auth-compat}/demo/firebase.json (100%) rename packages/{auth-compat-exp => auth-compat}/demo/functions/index.js (100%) rename packages/{auth-compat-exp => auth-compat}/demo/functions/package.json (100%) rename packages/{auth-compat-exp => auth-compat}/demo/functions/yarn.lock (100%) rename packages/{auth-compat-exp => auth-compat}/demo/package.json (100%) rename packages/{auth-compat-exp => auth-compat}/demo/public/common.js (100%) rename packages/{auth-compat-exp => auth-compat}/demo/public/manifest.json (100%) rename packages/{auth-compat-exp => auth-compat}/demo/public/sample-config.js (100%) rename packages/{auth-compat-exp => auth-compat}/demo/public/script.js (100%) rename packages/{auth-compat-exp => auth-compat}/demo/public/style.css (100%) rename packages/{auth-compat-exp => auth-compat}/demo/rollup.config.js (100%) rename packages/{auth-compat-exp => auth-compat}/demo/tsconfig.json (100%) rename packages/{auth-compat-exp => auth-compat}/demo/yarn.lock (100%) rename packages/{auth-compat-exp => auth-compat}/index.node.ts (100%) rename packages/{auth-compat-exp => auth-compat}/index.ts (100%) rename packages/{auth-compat-exp => auth-compat}/karma.conf.js (100%) rename packages/{auth-compat-exp => auth-compat}/package.json (100%) rename packages/{auth-compat-exp => auth-compat}/rollup.config.js (100%) rename packages/{auth-compat-exp => auth-compat}/rollup.config.release.js (100%) rename packages/{auth-compat-exp => auth-compat}/rollup.config.shared.js (100%) rename packages/{auth-compat-exp => auth-compat}/scripts/run_node_tests.ts (100%) rename packages/{auth-compat-exp => auth-compat}/src/auth.test.ts (100%) rename packages/{auth-compat-exp => auth-compat}/src/auth.ts (100%) rename packages/{auth-compat-exp => auth-compat}/src/persistence.ts (100%) rename packages/{auth-compat-exp => auth-compat}/src/phone_auth_provider.ts (100%) rename packages/{auth-compat-exp => auth-compat}/src/platform.ts (100%) rename packages/{auth-compat-exp => auth-compat}/src/popup_redirect.test.ts (100%) rename packages/{auth-compat-exp => auth-compat}/src/popup_redirect.ts (100%) rename packages/{auth-compat-exp => auth-compat}/src/recaptcha_verifier.ts (100%) rename packages/{auth-compat-exp => auth-compat}/src/user.ts (100%) rename packages/{auth-compat-exp => auth-compat}/src/user_credential.ts (100%) rename packages/{auth-compat-exp => auth-compat}/src/wrap.ts (100%) rename packages/{auth-compat-exp => auth-compat}/test/helpers/helpers.ts (100%) rename packages/{auth-compat-exp => auth-compat}/test/integration/flows/anonymous.test.ts (100%) rename packages/{auth-compat-exp => auth-compat}/test/integration/flows/custom.test.ts (100%) rename packages/{auth-compat-exp => auth-compat}/test/integration/flows/email.test.ts (100%) rename packages/{auth-compat-exp => auth-compat}/test/integration/flows/idp.test.ts (100%) rename packages/{auth-compat-exp => auth-compat}/test/integration/flows/oob.test.ts (100%) rename packages/{auth-compat-exp => auth-compat}/test/integration/flows/phone.test.ts (100%) rename packages/{auth-compat-exp => auth-compat}/test/integration/webdriver/static/anonymous.js (100%) rename packages/{auth-compat-exp => auth-compat}/test/integration/webdriver/static/core.js (100%) rename packages/{auth-compat-exp => auth-compat}/test/integration/webdriver/static/email.js (100%) rename packages/{auth-compat-exp => auth-compat}/test/integration/webdriver/static/index.html (100%) rename packages/{auth-compat-exp => auth-compat}/test/integration/webdriver/static/index.js (100%) rename packages/{auth-compat-exp => auth-compat}/test/integration/webdriver/static/lazy_load.js (100%) rename packages/{auth-compat-exp => auth-compat}/test/integration/webdriver/static/logged_in.html (100%) rename packages/{auth-compat-exp => auth-compat}/test/integration/webdriver/static/persistence.js (100%) rename packages/{auth-compat-exp => auth-compat}/test/integration/webdriver/static/popup.js (100%) rename packages/{auth-compat-exp => auth-compat}/test/integration/webdriver/static/redirect.js (100%) rename packages/{auth-compat-exp => auth-compat}/test/integration/webdriver/static/rollup.config.js (100%) rename packages/{auth-compat-exp => auth-compat}/test/integration/webdriver/static/ui.js (100%) rename packages/{auth-compat-exp => auth-compat}/tsconfig.json (100%) rename packages/{auth-exp => auth}/.eslintrc.js (100%) rename packages/{auth-exp => auth}/README.md (100%) rename packages/{auth-exp => auth}/api-extractor.json (100%) rename packages/{auth-exp => auth}/cordova/demo/.gitignore (100%) rename packages/{auth-exp => auth}/cordova/demo/README.md (100%) rename packages/{auth-exp => auth}/cordova/demo/package.json (100%) rename packages/{auth-exp => auth}/cordova/demo/rollup.config.js (100%) rename packages/{auth-exp => auth}/cordova/demo/sample-config.xml (100%) rename packages/{auth-exp => auth}/cordova/demo/src/index.js (100%) rename packages/{auth-exp => auth}/cordova/demo/src/logging.js (100%) rename packages/{auth-exp => auth}/cordova/demo/src/sample-config.js (100%) rename packages/{auth-exp => auth}/cordova/demo/www/index.html (100%) rename packages/{auth-exp => auth}/cordova/demo/www/style.css (100%) rename packages/{auth-exp => auth}/cordova/package.json (100%) rename packages/{auth-exp => auth}/demo/.eslintignore (100%) rename packages/{auth-exp => auth}/demo/.eslintrc.js (100%) rename packages/{auth-exp => auth}/demo/.gitignore (100%) rename packages/{auth-exp => auth}/demo/README.md (100%) rename packages/{auth-exp => auth}/demo/database.rules.json (100%) rename packages/{auth-exp => auth}/demo/firebase.json (100%) rename packages/{auth-exp => auth}/demo/functions/index.js (100%) rename packages/{auth-exp => auth}/demo/functions/package.json (100%) rename packages/{auth-exp => auth}/demo/functions/yarn.lock (100%) rename packages/{auth-exp => auth}/demo/package.json (100%) rename packages/{auth-exp => auth}/demo/public/common.js (100%) rename packages/{auth-exp => auth}/demo/public/index.html (100%) rename packages/{auth-exp => auth}/demo/public/manifest.json (100%) rename packages/{auth-exp => auth}/demo/public/style.css (100%) rename packages/{auth-exp => auth}/demo/rollup.config.js (100%) rename packages/{auth-exp => auth}/demo/src/config.d.ts (100%) rename packages/{auth-exp => auth}/demo/src/index.js (100%) rename packages/{auth-exp => auth}/demo/src/logging.js (100%) rename packages/{auth-exp => auth}/demo/src/sample-config.js (100%) rename packages/{auth-exp => auth}/demo/src/worker/service-worker.ts (100%) rename packages/{auth-exp => auth}/demo/src/worker/tsconfig.json (100%) rename packages/{auth-exp => auth}/demo/src/worker/web-worker.ts (100%) rename packages/{auth-exp => auth}/demo/tsconfig.json (100%) rename packages/{auth-exp => auth}/index.cordova.ts (100%) rename packages/{auth-exp => auth}/index.doc.ts (100%) rename packages/{auth-exp => auth}/index.node.ts (100%) rename packages/{auth-exp => auth}/index.rn.ts (100%) rename packages/{auth-exp => auth}/index.ts (100%) rename packages/{auth-exp => auth}/index.webworker.ts (100%) rename packages/{auth-exp => auth}/internal/index.ts (100%) rename packages/{auth-exp => auth}/internal/package.json (100%) rename packages/{auth-exp => auth}/karma.conf.js (100%) rename packages/{auth-exp => auth}/package.json (100%) rename packages/{auth-exp => auth}/react-native/package.json (100%) rename packages/{auth-exp => auth}/rollup.config.js (100%) rename packages/{auth-exp => auth}/rollup.config.release.js (100%) rename packages/{auth-exp => auth}/rollup.config.shared.js (100%) rename packages/{auth-exp => auth}/scripts/run-node-tests.js (100%) rename packages/{auth-exp => auth}/scripts/run-node-tests.ts (100%) rename packages/{auth-exp => auth}/src/api/account_management/account.test.ts (100%) rename packages/{auth-exp => auth}/src/api/account_management/account.ts (100%) rename packages/{auth-exp => auth}/src/api/account_management/email_and_password.test.ts (100%) rename packages/{auth-exp => auth}/src/api/account_management/email_and_password.ts (100%) rename packages/{auth-exp => auth}/src/api/account_management/mfa.test.ts (100%) rename packages/{auth-exp => auth}/src/api/account_management/mfa.ts (100%) rename packages/{auth-exp => auth}/src/api/account_management/profile.test.ts (100%) rename packages/{auth-exp => auth}/src/api/account_management/profile.ts (100%) rename packages/{auth-exp => auth}/src/api/authentication/create_auth_uri.test.ts (100%) rename packages/{auth-exp => auth}/src/api/authentication/create_auth_uri.ts (100%) rename packages/{auth-exp => auth}/src/api/authentication/custom_token.test.ts (100%) rename packages/{auth-exp => auth}/src/api/authentication/custom_token.ts (100%) rename packages/{auth-exp => auth}/src/api/authentication/email_and_password.test.ts (100%) rename packages/{auth-exp => auth}/src/api/authentication/email_and_password.ts (100%) rename packages/{auth-exp => auth}/src/api/authentication/email_link.test.ts (100%) rename packages/{auth-exp => auth}/src/api/authentication/email_link.ts (100%) rename packages/{auth-exp => auth}/src/api/authentication/idp.test.ts (100%) rename packages/{auth-exp => auth}/src/api/authentication/idp.ts (100%) rename packages/{auth-exp => auth}/src/api/authentication/mfa.test.ts (100%) rename packages/{auth-exp => auth}/src/api/authentication/mfa.ts (100%) rename packages/{auth-exp => auth}/src/api/authentication/recaptcha.test.ts (100%) rename packages/{auth-exp => auth}/src/api/authentication/recaptcha.ts (100%) rename packages/{auth-exp => auth}/src/api/authentication/sign_up.test.ts (100%) rename packages/{auth-exp => auth}/src/api/authentication/sign_up.ts (100%) rename packages/{auth-exp => auth}/src/api/authentication/sms.test.ts (100%) rename packages/{auth-exp => auth}/src/api/authentication/sms.ts (100%) rename packages/{auth-exp => auth}/src/api/authentication/token.test.ts (100%) rename packages/{auth-exp => auth}/src/api/authentication/token.ts (100%) rename packages/{auth-exp => auth}/src/api/errors.ts (100%) rename packages/{auth-exp => auth}/src/api/index.test.ts (100%) rename packages/{auth-exp => auth}/src/api/index.ts (100%) rename packages/{auth-exp => auth}/src/api/project_config/get_project_config.test.ts (100%) rename packages/{auth-exp => auth}/src/api/project_config/get_project_config.ts (100%) rename packages/{auth-exp => auth}/src/core/action_code_url.test.ts (100%) rename packages/{auth-exp => auth}/src/core/action_code_url.ts (100%) rename packages/{auth-exp => auth}/src/core/auth/auth_event_manager.test.ts (100%) rename packages/{auth-exp => auth}/src/core/auth/auth_event_manager.ts (100%) rename packages/{auth-exp => auth}/src/core/auth/auth_impl.test.ts (100%) rename packages/{auth-exp => auth}/src/core/auth/auth_impl.ts (100%) rename packages/{auth-exp => auth}/src/core/auth/emulator.test.ts (100%) rename packages/{auth-exp => auth}/src/core/auth/emulator.ts (100%) rename packages/{auth-exp => auth}/src/core/auth/firebase_internal.test.ts (100%) rename packages/{auth-exp => auth}/src/core/auth/firebase_internal.ts (100%) rename packages/{auth-exp => auth}/src/core/auth/initialize.test.ts (100%) rename packages/{auth-exp => auth}/src/core/auth/initialize.ts (100%) rename packages/{auth-exp => auth}/src/core/auth/register.ts (100%) rename packages/{auth-exp => auth}/src/core/credentials/auth_credential.ts (100%) rename packages/{auth-exp => auth}/src/core/credentials/email.test.ts (100%) rename packages/{auth-exp => auth}/src/core/credentials/email.ts (100%) rename packages/{auth-exp => auth}/src/core/credentials/index.ts (100%) rename packages/{auth-exp => auth}/src/core/credentials/oauth.test.ts (100%) rename packages/{auth-exp => auth}/src/core/credentials/oauth.ts (100%) rename packages/{auth-exp => auth}/src/core/credentials/phone.test.ts (100%) rename packages/{auth-exp => auth}/src/core/credentials/phone.ts (100%) rename packages/{auth-exp => auth}/src/core/credentials/saml.test.ts (100%) rename packages/{auth-exp => auth}/src/core/credentials/saml.ts (100%) rename packages/{auth-exp => auth}/src/core/errors.test.ts (100%) rename packages/{auth-exp => auth}/src/core/errors.ts (100%) rename packages/{auth-exp => auth}/src/core/index.ts (100%) rename packages/{auth-exp => auth}/src/core/persistence/in_memory.test.ts (100%) rename packages/{auth-exp => auth}/src/core/persistence/in_memory.ts (100%) rename packages/{auth-exp => auth}/src/core/persistence/index.ts (100%) rename packages/{auth-exp => auth}/src/core/persistence/persistence_user_manager.test.ts (100%) rename packages/{auth-exp => auth}/src/core/persistence/persistence_user_manager.ts (100%) rename packages/{auth-exp => auth}/src/core/providers/email.test.ts (100%) rename packages/{auth-exp => auth}/src/core/providers/email.ts (100%) rename packages/{auth-exp => auth}/src/core/providers/facebook.test.ts (100%) rename packages/{auth-exp => auth}/src/core/providers/facebook.ts (100%) rename packages/{auth-exp => auth}/src/core/providers/federated.test.ts (100%) rename packages/{auth-exp => auth}/src/core/providers/federated.ts (100%) rename packages/{auth-exp => auth}/src/core/providers/github.test.ts (100%) rename packages/{auth-exp => auth}/src/core/providers/github.ts (100%) rename packages/{auth-exp => auth}/src/core/providers/google.test.ts (100%) rename packages/{auth-exp => auth}/src/core/providers/google.ts (100%) rename packages/{auth-exp => auth}/src/core/providers/oauth.test.ts (100%) rename packages/{auth-exp => auth}/src/core/providers/oauth.ts (100%) rename packages/{auth-exp => auth}/src/core/providers/saml.test.ts (100%) rename packages/{auth-exp => auth}/src/core/providers/saml.ts (100%) rename packages/{auth-exp => auth}/src/core/providers/twitter.test.ts (100%) rename packages/{auth-exp => auth}/src/core/providers/twitter.ts (100%) rename packages/{auth-exp => auth}/src/core/strategies/abstract_popup_redirect_operation.test.ts (100%) rename packages/{auth-exp => auth}/src/core/strategies/abstract_popup_redirect_operation.ts (100%) rename packages/{auth-exp => auth}/src/core/strategies/action_code_settings.test.ts (100%) rename packages/{auth-exp => auth}/src/core/strategies/action_code_settings.ts (100%) rename packages/{auth-exp => auth}/src/core/strategies/anonymous.test.ts (100%) rename packages/{auth-exp => auth}/src/core/strategies/anonymous.ts (100%) rename packages/{auth-exp => auth}/src/core/strategies/credential.test.ts (100%) rename packages/{auth-exp => auth}/src/core/strategies/credential.ts (100%) rename packages/{auth-exp => auth}/src/core/strategies/custom_token.test.ts (100%) rename packages/{auth-exp => auth}/src/core/strategies/custom_token.ts (100%) rename packages/{auth-exp => auth}/src/core/strategies/email.test.ts (100%) rename packages/{auth-exp => auth}/src/core/strategies/email.ts (100%) rename packages/{auth-exp => auth}/src/core/strategies/email_and_password.test.ts (100%) rename packages/{auth-exp => auth}/src/core/strategies/email_and_password.ts (100%) rename packages/{auth-exp => auth}/src/core/strategies/email_link.test.ts (100%) rename packages/{auth-exp => auth}/src/core/strategies/email_link.ts (100%) rename packages/{auth-exp => auth}/src/core/strategies/idp.test.ts (100%) rename packages/{auth-exp => auth}/src/core/strategies/idp.ts (100%) rename packages/{auth-exp => auth}/src/core/strategies/redirect.test.ts (100%) rename packages/{auth-exp => auth}/src/core/strategies/redirect.ts (100%) rename packages/{auth-exp => auth}/src/core/user/account_info.test.ts (100%) rename packages/{auth-exp => auth}/src/core/user/account_info.ts (100%) rename packages/{auth-exp => auth}/src/core/user/additional_user_info.test.ts (100%) rename packages/{auth-exp => auth}/src/core/user/additional_user_info.ts (100%) rename packages/{auth-exp => auth}/src/core/user/id_token_result.test.ts (100%) rename packages/{auth-exp => auth}/src/core/user/id_token_result.ts (100%) rename packages/{auth-exp => auth}/src/core/user/invalidation.test.ts (100%) rename packages/{auth-exp => auth}/src/core/user/invalidation.ts (100%) rename packages/{auth-exp => auth}/src/core/user/link_unlink.test.ts (100%) rename packages/{auth-exp => auth}/src/core/user/link_unlink.ts (100%) rename packages/{auth-exp => auth}/src/core/user/proactive_refresh.test.ts (100%) rename packages/{auth-exp => auth}/src/core/user/proactive_refresh.ts (100%) rename packages/{auth-exp => auth}/src/core/user/reauthenticate.test.ts (100%) rename packages/{auth-exp => auth}/src/core/user/reauthenticate.ts (100%) rename packages/{auth-exp => auth}/src/core/user/reload.test.ts (100%) rename packages/{auth-exp => auth}/src/core/user/reload.ts (100%) rename packages/{auth-exp => auth}/src/core/user/token_manager.test.ts (100%) rename packages/{auth-exp => auth}/src/core/user/token_manager.ts (100%) rename packages/{auth-exp => auth}/src/core/user/user_credential_impl.test.ts (100%) rename packages/{auth-exp => auth}/src/core/user/user_credential_impl.ts (100%) rename packages/{auth-exp => auth}/src/core/user/user_impl.test.ts (100%) rename packages/{auth-exp => auth}/src/core/user/user_impl.ts (100%) rename packages/{auth-exp => auth}/src/core/user/user_metadata.ts (100%) rename packages/{auth-exp => auth}/src/core/util/assert.test.ts (100%) rename packages/{auth-exp => auth}/src/core/util/assert.ts (100%) rename packages/{auth-exp => auth}/src/core/util/browser.test.ts (100%) rename packages/{auth-exp => auth}/src/core/util/browser.ts (100%) rename packages/{auth-exp => auth}/src/core/util/delay.test.ts (100%) rename packages/{auth-exp => auth}/src/core/util/delay.ts (100%) rename packages/{auth-exp => auth}/src/core/util/emulator.test.ts (100%) rename packages/{auth-exp => auth}/src/core/util/emulator.ts (100%) rename packages/{auth-exp => auth}/src/core/util/event_id.test.ts (100%) rename packages/{auth-exp => auth}/src/core/util/event_id.ts (100%) rename packages/{auth-exp => auth}/src/core/util/fetch_provider.ts (100%) rename packages/{auth-exp => auth}/src/core/util/handler.ts (100%) rename packages/{auth-exp => auth}/src/core/util/instantiator.test.ts (100%) rename packages/{auth-exp => auth}/src/core/util/instantiator.ts (100%) rename packages/{auth-exp => auth}/src/core/util/location.ts (100%) rename packages/{auth-exp => auth}/src/core/util/log.ts (100%) rename packages/{auth-exp => auth}/src/core/util/navigator.ts (100%) rename packages/{auth-exp => auth}/src/core/util/providers.ts (100%) rename packages/{auth-exp => auth}/src/core/util/resolver.ts (100%) rename packages/{auth-exp => auth}/src/core/util/time.ts (100%) rename packages/{auth-exp => auth}/src/core/util/validate_origin.test.ts (100%) rename packages/{auth-exp => auth}/src/core/util/validate_origin.ts (100%) rename packages/{auth-exp => auth}/src/core/util/version.test.ts (100%) rename packages/{auth-exp => auth}/src/core/util/version.ts (100%) rename packages/{auth-exp => auth}/src/index.ts (100%) rename packages/{auth-exp => auth}/src/mfa/index.ts (100%) rename packages/{auth-exp => auth}/src/mfa/mfa_assertion.ts (100%) rename packages/{auth-exp => auth}/src/mfa/mfa_error.ts (100%) rename packages/{auth-exp => auth}/src/mfa/mfa_info.test.ts (100%) rename packages/{auth-exp => auth}/src/mfa/mfa_info.ts (100%) rename packages/{auth-exp => auth}/src/mfa/mfa_resolver.test.ts (100%) rename packages/{auth-exp => auth}/src/mfa/mfa_resolver.ts (100%) rename packages/{auth-exp => auth}/src/mfa/mfa_session.test.ts (100%) rename packages/{auth-exp => auth}/src/mfa/mfa_session.ts (100%) rename packages/{auth-exp => auth}/src/mfa/mfa_user.test.ts (100%) rename packages/{auth-exp => auth}/src/mfa/mfa_user.ts (100%) rename packages/{auth-exp => auth}/src/model/application_verifier.ts (100%) rename packages/{auth-exp => auth}/src/model/auth.ts (100%) rename packages/{auth-exp => auth}/src/model/enum_maps.ts (100%) rename packages/{auth-exp => auth}/src/model/enums.ts (100%) rename packages/{auth-exp => auth}/src/model/id_token.ts (100%) rename packages/{auth-exp => auth}/src/model/popup_redirect.ts (100%) rename packages/{auth-exp => auth}/src/model/public_types.ts (100%) rename packages/{auth-exp => auth}/src/model/user.ts (100%) rename packages/{auth-exp => auth}/src/platform_browser/auth.test.ts (100%) rename packages/{auth-exp => auth}/src/platform_browser/auth_window.ts (100%) rename packages/{auth-exp => auth}/src/platform_browser/iframe/gapi.iframes.ts (100%) rename packages/{auth-exp => auth}/src/platform_browser/iframe/gapi.test.ts (100%) rename packages/{auth-exp => auth}/src/platform_browser/iframe/gapi.ts (100%) rename packages/{auth-exp => auth}/src/platform_browser/iframe/iframe.test.ts (100%) rename packages/{auth-exp => auth}/src/platform_browser/iframe/iframe.ts (100%) rename packages/{auth-exp => auth}/src/platform_browser/load_js.test.ts (100%) rename packages/{auth-exp => auth}/src/platform_browser/load_js.ts (100%) rename packages/{auth-exp => auth}/src/platform_browser/messagechannel/index.ts (100%) rename packages/{auth-exp => auth}/src/platform_browser/messagechannel/promise.test.ts (100%) rename packages/{auth-exp => auth}/src/platform_browser/messagechannel/promise.ts (100%) rename packages/{auth-exp => auth}/src/platform_browser/messagechannel/receiver.test.ts (100%) rename packages/{auth-exp => auth}/src/platform_browser/messagechannel/receiver.ts (100%) rename packages/{auth-exp => auth}/src/platform_browser/messagechannel/sender.test.ts (100%) rename packages/{auth-exp => auth}/src/platform_browser/messagechannel/sender.ts (100%) rename packages/{auth-exp => auth}/src/platform_browser/mfa/assertions/phone.test.ts (100%) rename packages/{auth-exp => auth}/src/platform_browser/mfa/assertions/phone.ts (100%) rename packages/{auth-exp => auth}/src/platform_browser/persistence/browser.ts (100%) rename packages/{auth-exp => auth}/src/platform_browser/persistence/indexed_db.test.ts (100%) rename packages/{auth-exp => auth}/src/platform_browser/persistence/indexed_db.ts (100%) rename packages/{auth-exp => auth}/src/platform_browser/persistence/local_storage.test.ts (100%) rename packages/{auth-exp => auth}/src/platform_browser/persistence/local_storage.ts (100%) rename packages/{auth-exp => auth}/src/platform_browser/persistence/session_storage.test.ts (100%) rename packages/{auth-exp => auth}/src/platform_browser/persistence/session_storage.ts (100%) rename packages/{auth-exp => auth}/src/platform_browser/popup_redirect.test.ts (100%) rename packages/{auth-exp => auth}/src/platform_browser/popup_redirect.ts (100%) rename packages/{auth-exp => auth}/src/platform_browser/providers/phone.test.ts (100%) rename packages/{auth-exp => auth}/src/platform_browser/providers/phone.ts (100%) rename packages/{auth-exp => auth}/src/platform_browser/recaptcha/recaptcha.ts (100%) rename packages/{auth-exp => auth}/src/platform_browser/recaptcha/recaptcha_loader.test.ts (100%) rename packages/{auth-exp => auth}/src/platform_browser/recaptcha/recaptcha_loader.ts (100%) rename packages/{auth-exp => auth}/src/platform_browser/recaptcha/recaptcha_mock.test.ts (100%) rename packages/{auth-exp => auth}/src/platform_browser/recaptcha/recaptcha_mock.ts (100%) rename packages/{auth-exp => auth}/src/platform_browser/recaptcha/recaptcha_verifier.test.ts (100%) rename packages/{auth-exp => auth}/src/platform_browser/recaptcha/recaptcha_verifier.ts (100%) rename packages/{auth-exp => auth}/src/platform_browser/strategies/phone.test.ts (100%) rename packages/{auth-exp => auth}/src/platform_browser/strategies/phone.ts (100%) rename packages/{auth-exp => auth}/src/platform_browser/strategies/popup.test.ts (100%) rename packages/{auth-exp => auth}/src/platform_browser/strategies/popup.ts (100%) rename packages/{auth-exp => auth}/src/platform_browser/strategies/redirect.test.ts (100%) rename packages/{auth-exp => auth}/src/platform_browser/strategies/redirect.ts (100%) rename packages/{auth-exp => auth}/src/platform_browser/util/popup.test.ts (100%) rename packages/{auth-exp => auth}/src/platform_browser/util/popup.ts (100%) rename packages/{auth-exp => auth}/src/platform_browser/util/worker.ts (100%) rename packages/{auth-exp => auth}/src/platform_cordova/plugins.ts (100%) rename packages/{auth-exp => auth}/src/platform_cordova/popup_redirect/events.test.ts (100%) rename packages/{auth-exp => auth}/src/platform_cordova/popup_redirect/events.ts (100%) rename packages/{auth-exp => auth}/src/platform_cordova/popup_redirect/popup_redirect.test.ts (100%) rename packages/{auth-exp => auth}/src/platform_cordova/popup_redirect/popup_redirect.ts (100%) rename packages/{auth-exp => auth}/src/platform_cordova/popup_redirect/utils.test.ts (100%) rename packages/{auth-exp => auth}/src/platform_cordova/popup_redirect/utils.ts (100%) rename packages/{auth-exp => auth}/src/platform_cordova/strategies/redirect.ts (100%) rename packages/{auth-exp => auth}/src/platform_react_native/persistence/react_native.test.ts (100%) rename packages/{auth-exp => auth}/src/platform_react_native/persistence/react_native.ts (100%) rename packages/{auth-exp => auth}/src/platform_react_native/react-native.d.ts (100%) rename packages/{auth-exp => auth}/test/helpers/api/helper.ts (100%) rename packages/{auth-exp => auth}/test/helpers/delay.ts (100%) rename packages/{auth-exp => auth}/test/helpers/fake_service_worker.ts (100%) rename packages/{auth-exp => auth}/test/helpers/id_token_response.ts (100%) rename packages/{auth-exp => auth}/test/helpers/iframe_event.ts (100%) rename packages/{auth-exp => auth}/test/helpers/integration/emulator_rest_helpers.ts (100%) rename packages/{auth-exp => auth}/test/helpers/integration/helpers.ts (100%) rename packages/{auth-exp => auth}/test/helpers/integration/settings.ts (100%) rename packages/{auth-exp => auth}/test/helpers/jwt.ts (100%) rename packages/{auth-exp => auth}/test/helpers/mock_auth.ts (100%) rename packages/{auth-exp => auth}/test/helpers/mock_auth_credential.ts (100%) rename packages/{auth-exp => auth}/test/helpers/mock_fetch.test.ts (100%) rename packages/{auth-exp => auth}/test/helpers/mock_fetch.ts (100%) rename packages/{auth-exp => auth}/test/helpers/mock_popup_redirect_resolver.ts (100%) rename packages/{auth-exp => auth}/test/helpers/redirect_persistence.ts (100%) rename packages/{auth-exp => auth}/test/helpers/timeout_stub.ts (100%) rename packages/{auth-exp => auth}/test/integration/flows/anonymous.test.ts (100%) rename packages/{auth-exp => auth}/test/integration/flows/custom.local.test.ts (100%) rename packages/{auth-exp => auth}/test/integration/flows/email.test.ts (100%) rename packages/{auth-exp => auth}/test/integration/flows/idp.local.test.ts (100%) rename packages/{auth-exp => auth}/test/integration/flows/oob.local.test.ts (100%) rename packages/{auth-exp => auth}/test/integration/flows/phone.test.ts (100%) rename packages/{auth-exp => auth}/test/integration/webdriver/anonymous.test.ts (100%) rename packages/{auth-exp => auth}/test/integration/webdriver/compat/firebaseui.test.ts (100%) rename packages/{auth-exp => auth}/test/integration/webdriver/persistence.test.ts (100%) rename packages/{auth-exp => auth}/test/integration/webdriver/popup.test.ts (100%) rename packages/{auth-exp => auth}/test/integration/webdriver/redirect.test.ts (100%) rename packages/{auth-exp => auth}/test/integration/webdriver/static/anonymous.js (100%) rename packages/{auth-exp => auth}/test/integration/webdriver/static/core.js (100%) rename packages/{auth-exp => auth}/test/integration/webdriver/static/email.js (100%) rename packages/{auth-exp => auth}/test/integration/webdriver/static/index.html (100%) rename packages/{auth-exp => auth}/test/integration/webdriver/static/index.js (100%) rename packages/{auth-exp => auth}/test/integration/webdriver/static/persistence.js (100%) rename packages/{auth-exp => auth}/test/integration/webdriver/static/popup.js (100%) rename packages/{auth-exp => auth}/test/integration/webdriver/static/redirect.js (100%) rename packages/{auth-exp => auth}/test/integration/webdriver/static/rollup.config.js (100%) rename packages/{auth-exp => auth}/test/integration/webdriver/util/auth_driver.ts (100%) rename packages/{auth-exp => auth}/test/integration/webdriver/util/functions.ts (100%) rename packages/{auth-exp => auth}/test/integration/webdriver/util/idp_page.ts (100%) rename packages/{auth-exp => auth}/test/integration/webdriver/util/js_load_condition.ts (100%) rename packages/{auth-exp => auth}/test/integration/webdriver/util/test_runner.ts (100%) rename packages/{auth-exp => auth}/test/integration/webdriver/util/test_server.ts (100%) rename packages/{auth-exp => auth}/test/integration/webdriver/util/ui_page.ts (100%) rename packages/{auth-exp => auth}/tsconfig.json (100%) rename packages/{firebase-exp => firebase}/.eslintrc.js (100%) rename packages/{firebase-exp => firebase}/.gitignore (100%) rename packages/{firebase-exp => firebase}/README.md (100%) rename packages/{firebase-exp => firebase}/analytics/index.ts (100%) rename packages/{firebase-exp => firebase}/analytics/package.json (100%) rename packages/{firebase-exp => firebase}/app-check/index.ts (100%) rename packages/{firebase-exp => firebase}/app-check/package.json (100%) rename packages/{firebase-exp => firebase}/app/index.cdn.ts (100%) rename packages/{firebase-exp => firebase}/app/index.ts (100%) rename packages/{firebase-exp => firebase}/app/package.json (100%) rename packages/{firebase-exp => firebase}/auth/cordova/index.ts (100%) rename packages/{firebase-exp => firebase}/auth/cordova/package.json (100%) rename packages/{firebase-exp => firebase}/auth/index.ts (100%) rename packages/{firebase-exp => firebase}/auth/package.json (100%) rename packages/{firebase-exp => firebase}/auth/react-native/index.ts (100%) rename packages/{firebase-exp => firebase}/auth/react-native/package.json (100%) rename packages/{firebase-exp => firebase}/compat/analytics/index.ts (100%) rename packages/{firebase-exp => firebase}/compat/analytics/package.json (100%) rename packages/{firebase-exp => firebase}/compat/app-check/index.ts (100%) rename packages/{firebase-exp => firebase}/compat/app-check/package.json (100%) rename packages/{firebase-exp => firebase}/compat/app/index.cdn.ts (100%) rename packages/{firebase-exp => firebase}/compat/app/index.ts (100%) rename packages/{firebase-exp => firebase}/compat/app/package.json (100%) rename packages/{firebase-exp => firebase}/compat/auth/index.ts (100%) rename packages/{firebase-exp => firebase}/compat/auth/package.json (100%) rename packages/{firebase-exp => firebase}/compat/database/index.ts (100%) rename packages/{firebase-exp => firebase}/compat/database/package.json (100%) rename packages/{firebase-exp => firebase}/compat/firestore/index.ts (100%) rename packages/{firebase-exp => firebase}/compat/firestore/package.json (100%) rename packages/{firebase-exp => firebase}/compat/functions/index.ts (100%) rename packages/{firebase-exp => firebase}/compat/functions/package.json (100%) rename packages/{firebase-exp => firebase}/compat/index.cdn.ts (100%) rename packages/{firebase-exp => firebase}/compat/index.d.ts (100%) rename packages/{firebase-exp => firebase}/compat/index.node.ts (100%) rename packages/{firebase-exp => firebase}/compat/index.perf.ts (100%) rename packages/{firebase-exp => firebase}/compat/index.rn.ts (100%) rename packages/{firebase-exp => firebase}/compat/index.ts (100%) rename packages/{firebase-exp => firebase}/compat/messaging/index.ts (100%) rename packages/{firebase-exp => firebase}/compat/messaging/package.json (100%) rename packages/{firebase-exp => firebase}/compat/package.json (100%) rename packages/{firebase-exp => firebase}/compat/performance/index.ts (100%) rename packages/{firebase-exp => firebase}/compat/performance/package.json (100%) rename packages/{firebase-exp => firebase}/compat/remote-config/index.ts (100%) rename packages/{firebase-exp => firebase}/compat/remote-config/package.json (100%) rename packages/{firebase-exp => firebase}/compat/rollup.config.js (100%) rename packages/{firebase-exp => firebase}/compat/rollup.config.release.js (100%) rename packages/{firebase-exp => firebase}/compat/storage/index.ts (100%) rename packages/{firebase-exp => firebase}/compat/storage/package.json (100%) rename packages/{firebase-exp => firebase}/database/index.ts (100%) rename packages/{firebase-exp => firebase}/database/package.json (100%) rename packages/{firebase-exp => firebase}/firestore/index.ts (100%) rename packages/{firebase-exp => firebase}/firestore/lite/index.ts (100%) rename packages/{firebase-exp => firebase}/firestore/lite/package.json (100%) rename packages/{firebase-exp => firebase}/firestore/package.json (100%) rename packages/{firebase-exp => firebase}/functions/index.ts (100%) rename packages/{firebase-exp => firebase}/functions/package.json (100%) rename packages/{firebase-exp => firebase}/gulpfile.js (100%) rename packages/{firebase-exp => firebase}/messaging/index.ts (100%) rename packages/{firebase-exp => firebase}/messaging/package.json (100%) rename packages/{firebase-exp => firebase}/messaging/sw/index.ts (100%) rename packages/{firebase-exp => firebase}/messaging/sw/package.json (100%) rename packages/{firebase-exp => firebase}/package.json (100%) rename packages/{firebase-exp => firebase}/performance/index.ts (100%) rename packages/{firebase-exp => firebase}/performance/package.json (100%) rename packages/{firebase-exp => firebase}/remote-config/index.ts (100%) rename packages/{firebase-exp => firebase}/remote-config/package.json (100%) rename packages/{firebase-exp => firebase}/rollup.config.js (100%) rename packages/{firebase-exp => firebase}/rollup.config.release.js (100%) rename packages/{firebase-exp => firebase}/storage/index.ts (100%) rename packages/{firebase-exp => firebase}/storage/package.json (100%) rename packages/{firebase-exp => firebase}/tsconfig.json (100%) rename packages/{functions-exp => functions}/.eslintrc.js (100%) rename packages/{functions-exp => functions}/README.md (100%) rename packages/{functions-exp => functions}/api-extractor.json (100%) rename packages/{functions-exp => functions}/karma.conf.js (100%) rename packages/{functions-exp => functions}/package.json (100%) rename packages/{functions-exp => functions}/rollup.config.js (100%) rename packages/{functions-exp => functions}/rollup.config.release.js (100%) rename packages/{functions-exp => functions}/rollup.shared.js (100%) rename packages/{functions-exp => functions}/src/api.ts (100%) rename packages/{functions-exp => functions}/src/callable.test.ts (100%) rename packages/{functions-exp => functions}/src/config.ts (100%) rename packages/{functions-exp => functions}/src/constants.ts (100%) rename packages/{functions-exp => functions}/src/context.ts (100%) rename packages/{functions-exp => functions}/src/error.ts (100%) rename packages/{functions-exp => functions}/src/index.node.ts (100%) rename packages/{functions-exp => functions}/src/index.ts (100%) rename packages/{functions-exp => functions}/src/public-types.ts (100%) rename packages/{functions-exp => functions}/src/serializer.test.ts (100%) rename packages/{functions-exp => functions}/src/serializer.ts (100%) rename packages/{functions-exp => functions}/src/service.test.ts (100%) rename packages/{functions-exp => functions}/src/service.ts (100%) rename packages/{functions-exp => functions}/test/utils.ts (100%) rename packages/{functions-exp => functions}/tsconfig.json (100%) rename packages/{installations-exp => installations}/.eslintrc.js (100%) rename packages/{installations-exp => installations}/api-extractor.json (100%) rename packages/{installations-exp => installations}/karma.conf.js (100%) rename packages/{installations-exp => installations}/package.json (100%) rename packages/{installations-exp => installations}/rollup.config.js (100%) rename packages/{installations-exp => installations}/rollup.config.release.js (100%) rename packages/{installations-exp => installations}/rollup.shared.js (100%) rename packages/{installations-exp => installations}/src/api/delete-installations.test.ts (100%) rename packages/{installations-exp => installations}/src/api/delete-installations.ts (100%) rename packages/{installations-exp => installations}/src/api/get-id.test.ts (100%) rename packages/{installations-exp => installations}/src/api/get-id.ts (100%) rename packages/{installations-exp => installations}/src/api/get-installations.ts (100%) rename packages/{installations-exp => installations}/src/api/get-token.test.ts (100%) rename packages/{installations-exp => installations}/src/api/get-token.ts (100%) rename packages/{installations-exp => installations}/src/api/index.ts (100%) rename packages/{installations-exp => installations}/src/api/on-id-change.test.ts (100%) rename packages/{installations-exp => installations}/src/api/on-id-change.ts (100%) rename packages/{installations-exp => installations}/src/functions/common.test.ts (100%) rename packages/{installations-exp => installations}/src/functions/common.ts (100%) rename packages/{installations-exp => installations}/src/functions/config.ts (100%) rename packages/{installations-exp => installations}/src/functions/create-installation-request.test.ts (100%) rename packages/{installations-exp => installations}/src/functions/create-installation-request.ts (100%) rename packages/{installations-exp => installations}/src/functions/delete-installation-request.test.ts (100%) rename packages/{installations-exp => installations}/src/functions/delete-installation-request.ts (100%) rename packages/{installations-exp => installations}/src/functions/generate-auth-token-request.test.ts (100%) rename packages/{installations-exp => installations}/src/functions/generate-auth-token-request.ts (100%) rename packages/{installations-exp => installations}/src/helpers/buffer-to-base64-url-safe.test.ts (100%) rename packages/{installations-exp => installations}/src/helpers/buffer-to-base64-url-safe.ts (100%) rename packages/{installations-exp => installations}/src/helpers/extract-app-config.test.ts (100%) rename packages/{installations-exp => installations}/src/helpers/extract-app-config.ts (100%) rename packages/{installations-exp => installations}/src/helpers/fid-changed.test.ts (100%) rename packages/{installations-exp => installations}/src/helpers/fid-changed.ts (100%) rename packages/{installations-exp => installations}/src/helpers/generate-fid.test.ts (100%) rename packages/{installations-exp => installations}/src/helpers/generate-fid.ts (100%) rename packages/{installations-exp => installations}/src/helpers/get-installation-entry.test.ts (100%) rename packages/{installations-exp => installations}/src/helpers/get-installation-entry.ts (100%) rename packages/{installations-exp => installations}/src/helpers/idb-manager.test.ts (100%) rename packages/{installations-exp => installations}/src/helpers/idb-manager.ts (100%) rename packages/{installations-exp => installations}/src/helpers/refresh-auth-token.test.ts (100%) rename packages/{installations-exp => installations}/src/helpers/refresh-auth-token.ts (100%) rename packages/{installations-exp => installations}/src/index.ts (100%) rename packages/{installations-exp => installations}/src/interfaces/api-response.ts (100%) rename packages/{installations-exp => installations}/src/interfaces/installation-entry.ts (100%) rename packages/{installations-exp => installations}/src/interfaces/installation-impl.ts (100%) rename packages/{installations-exp => installations}/src/interfaces/public-types.ts (100%) rename packages/{installations-exp => installations}/src/testing/compare-headers.test.ts (100%) rename packages/{installations-exp => installations}/src/testing/compare-headers.ts (100%) rename packages/{installations-exp => installations}/src/testing/fake-generators.ts (100%) rename packages/{installations-exp => installations}/src/testing/setup.ts (100%) rename packages/{installations-exp => installations}/src/util/constants.ts (100%) rename packages/{installations-exp => installations}/src/util/errors.ts (100%) rename packages/{installations-exp => installations}/src/util/get-key.ts (100%) rename packages/{installations-exp => installations}/src/util/sleep.test.ts (100%) rename packages/{installations-exp => installations}/src/util/sleep.ts (100%) rename packages/{installations-exp => installations}/test-app/.gitignore (100%) rename packages/{installations-exp => installations}/test-app/index.html (100%) rename packages/{installations-exp => installations}/test-app/index.js (100%) rename packages/{installations-exp => installations}/test-app/rollup.config.js (100%) rename packages/{installations-exp => installations}/tsconfig.json (100%) rename packages/{messaging-exp => messaging}/.eslintrc.js (100%) rename packages/{messaging-exp => messaging}/README.md (100%) rename packages/{messaging-exp => messaging}/api-extractor.json (100%) rename packages/{messaging-exp => messaging}/karma.conf.js (100%) rename packages/{messaging-exp => messaging}/package.json (100%) rename packages/{messaging-exp => messaging}/rollup.config.js (100%) rename packages/{messaging-exp => messaging}/rollup.config.release.js (100%) rename packages/{messaging-exp => messaging}/src/api.ts (100%) rename packages/{messaging-exp => messaging}/src/api/deleteToken.ts (100%) rename packages/{messaging-exp => messaging}/src/api/getToken.ts (100%) rename packages/{messaging-exp => messaging}/src/api/isSupported.ts (100%) rename packages/{messaging-exp => messaging}/src/api/onBackgroundMessage.ts (100%) rename packages/{messaging-exp => messaging}/src/api/onMessage.ts (100%) rename packages/{messaging-exp => messaging}/src/api/setDeliveryMetricsExportedToBigQueryEnabled.ts (100%) rename packages/{messaging-exp => messaging}/src/helpers/array-base64-translator.test.ts (100%) rename packages/{messaging-exp => messaging}/src/helpers/array-base64-translator.ts (100%) rename packages/{messaging-exp => messaging}/src/helpers/externalizePayload.test.ts (100%) rename packages/{messaging-exp => messaging}/src/helpers/externalizePayload.ts (100%) rename packages/{messaging-exp => messaging}/src/helpers/extract-app-config.test.ts (100%) rename packages/{messaging-exp => messaging}/src/helpers/extract-app-config.ts (100%) rename packages/{messaging-exp => messaging}/src/helpers/is-console-message.ts (100%) rename packages/{messaging-exp => messaging}/src/helpers/logToFirelog.test.ts (100%) rename packages/{messaging-exp => messaging}/src/helpers/logToFirelog.ts (100%) rename packages/{messaging-exp => messaging}/src/helpers/logToScion.ts (100%) rename packages/{messaging-exp => messaging}/src/helpers/migrate-old-database.test.ts (100%) rename packages/{messaging-exp => messaging}/src/helpers/migrate-old-database.ts (100%) rename packages/{messaging-exp => messaging}/src/helpers/register.ts (100%) rename packages/{messaging-exp => messaging}/src/helpers/registerDefaultSw.ts (100%) rename packages/{messaging-exp => messaging}/src/helpers/sleep.test.ts (100%) rename packages/{messaging-exp => messaging}/src/helpers/sleep.ts (100%) rename packages/{messaging-exp => messaging}/src/helpers/updateSwReg.ts (100%) rename packages/{messaging-exp => messaging}/src/helpers/updateVapidKey.ts (100%) rename packages/{messaging-exp => messaging}/src/index.sw.ts (100%) rename packages/{messaging-exp => messaging}/src/index.ts (100%) rename packages/{messaging-exp => messaging}/src/interfaces/app-config.ts (100%) rename packages/{messaging-exp => messaging}/src/interfaces/internal-dependencies.ts (100%) rename packages/{messaging-exp => messaging}/src/interfaces/internal-message-payload.ts (100%) rename packages/{messaging-exp => messaging}/src/interfaces/logging-types.ts (100%) rename packages/{messaging-exp => messaging}/src/interfaces/public-types.ts (100%) rename packages/{messaging-exp => messaging}/src/interfaces/token-details.ts (100%) rename packages/{messaging-exp => messaging}/src/internals/idb-manager.test.ts (100%) rename packages/{messaging-exp => messaging}/src/internals/idb-manager.ts (100%) rename packages/{messaging-exp => messaging}/src/internals/requests.test.ts (100%) rename packages/{messaging-exp => messaging}/src/internals/requests.ts (100%) rename packages/{messaging-exp => messaging}/src/internals/token-manager.test.ts (100%) rename packages/{messaging-exp => messaging}/src/internals/token-manager.ts (100%) rename packages/{messaging-exp => messaging}/src/listeners/sw-listeners.test.ts (100%) rename packages/{messaging-exp => messaging}/src/listeners/sw-listeners.ts (100%) rename packages/{messaging-exp => messaging}/src/listeners/window-listener.ts (100%) rename packages/{messaging-exp => messaging}/src/messaging-service.ts (100%) rename packages/{messaging-exp => messaging}/src/testing/compare-headers.test.ts (100%) rename packages/{messaging-exp => messaging}/src/testing/compare-headers.ts (100%) rename packages/{messaging-exp => messaging}/src/testing/fakes/firebase-dependencies.ts (100%) rename packages/{messaging-exp => messaging}/src/testing/fakes/logging-object.ts (100%) rename packages/{messaging-exp => messaging}/src/testing/fakes/messaging-service.ts (100%) rename packages/{messaging-exp => messaging}/src/testing/fakes/service-worker.ts (100%) rename packages/{messaging-exp => messaging}/src/testing/fakes/token-details.ts (100%) rename packages/{messaging-exp => messaging}/src/testing/setup.ts (100%) rename packages/{messaging-exp => messaging}/src/testing/sinon-types.ts (100%) rename packages/{messaging-exp => messaging}/src/util/constants.ts (100%) rename packages/{messaging-exp => messaging}/src/util/errors.ts (100%) rename packages/{messaging-exp => messaging}/src/util/sw-types.ts (100%) rename packages/{messaging-exp => messaging}/sw/package.json (100%) rename packages/{messaging-exp => messaging}/tsconfig.json (100%) rename packages/{performance-exp => performance}/.eslintrc.js (100%) rename packages/{performance-exp => performance}/README.md (100%) rename packages/{performance-exp => performance}/api-extractor.json (100%) rename packages/{performance-exp => performance}/karma.conf.js (100%) rename packages/{performance-exp => performance}/package.json (100%) rename packages/{performance-exp => performance}/rollup.config.js (100%) rename packages/{performance-exp => performance}/rollup.config.release.js (100%) rename packages/{performance-exp => performance}/rollup.shared.js (100%) rename packages/{performance-exp => performance}/src/constants.ts (100%) rename packages/{performance-exp => performance}/src/controllers/perf.test.ts (100%) rename packages/{performance-exp => performance}/src/controllers/perf.ts (100%) rename packages/{performance-exp => performance}/src/index.test.ts (100%) rename packages/{performance-exp => performance}/src/index.ts (100%) rename packages/{performance-exp => performance}/src/public_types.ts (100%) rename packages/{performance-exp => performance}/src/resources/network_request.test.ts (100%) rename packages/{performance-exp => performance}/src/resources/network_request.ts (100%) rename packages/{performance-exp => performance}/src/resources/trace.test.ts (100%) rename packages/{performance-exp => performance}/src/resources/trace.ts (100%) rename packages/{performance-exp => performance}/src/services/api_service.test.ts (100%) rename packages/{performance-exp => performance}/src/services/api_service.ts (100%) rename packages/{performance-exp => performance}/src/services/iid_service.test.ts (100%) rename packages/{performance-exp => performance}/src/services/iid_service.ts (100%) rename packages/{performance-exp => performance}/src/services/initialization_service.test.ts (100%) rename packages/{performance-exp => performance}/src/services/initialization_service.ts (100%) rename packages/{performance-exp => performance}/src/services/oob_resources_service.test.ts (100%) rename packages/{performance-exp => performance}/src/services/oob_resources_service.ts (100%) rename packages/{performance-exp => performance}/src/services/perf_logger.test.ts (100%) rename packages/{performance-exp => performance}/src/services/perf_logger.ts (100%) rename packages/{performance-exp => performance}/src/services/remote_config_service.test.ts (100%) rename packages/{performance-exp => performance}/src/services/remote_config_service.ts (100%) rename packages/{performance-exp => performance}/src/services/settings_service.ts (100%) rename packages/{performance-exp => performance}/src/services/transport_service.test.ts (100%) rename packages/{performance-exp => performance}/src/services/transport_service.ts (100%) rename packages/{performance-exp => performance}/src/utils/app_utils.ts (100%) rename packages/{performance-exp => performance}/src/utils/attribute_utils.test.ts (100%) rename packages/{performance-exp => performance}/src/utils/attributes_utils.ts (100%) rename packages/{performance-exp => performance}/src/utils/console_logger.ts (100%) rename packages/{performance-exp => performance}/src/utils/errors.ts (100%) rename packages/{performance-exp => performance}/src/utils/metric_utils.test.ts (100%) rename packages/{performance-exp => performance}/src/utils/metric_utils.ts (100%) rename packages/{performance-exp => performance}/src/utils/string_merger.test.ts (100%) rename packages/{performance-exp => performance}/src/utils/string_merger.ts (100%) rename packages/{performance-exp => performance}/test/setup.ts (100%) rename packages/{performance-exp => performance}/tsconfig.json (100%) rename packages/{remote-config-exp => remote-config}/.eslintrc.js (100%) rename packages/{remote-config-exp => remote-config}/.npmignore (100%) rename packages/{remote-config-exp => remote-config}/README.md (100%) rename packages/{remote-config-exp => remote-config}/api-extractor.json (100%) rename packages/{remote-config-exp => remote-config}/karma.conf.js (100%) rename packages/{remote-config-exp => remote-config}/package.json (100%) rename packages/{remote-config-exp => remote-config}/rollup.config.js (100%) rename packages/{remote-config-exp => remote-config}/rollup.config.release.js (100%) rename packages/{remote-config-exp => remote-config}/rollup.shared.js (100%) rename packages/{remote-config-exp => remote-config}/src/api.ts (100%) rename packages/{remote-config-exp => remote-config}/src/api2.ts (100%) rename packages/{remote-config-exp => remote-config}/src/client/caching_client.ts (100%) rename packages/{remote-config-exp => remote-config}/src/client/remote_config_fetch_client.ts (100%) rename packages/{remote-config-exp => remote-config}/src/client/rest_client.ts (100%) rename packages/{remote-config-exp => remote-config}/src/client/retrying_client.ts (100%) rename packages/{remote-config-exp => remote-config}/src/constants.ts (100%) rename packages/{remote-config-exp => remote-config}/src/errors.ts (100%) rename packages/{remote-config-exp => remote-config}/src/index.ts (100%) rename packages/{remote-config-exp => remote-config}/src/language.ts (100%) rename packages/{remote-config-exp => remote-config}/src/public_types.ts (100%) rename packages/{remote-config-exp => remote-config}/src/register.ts (100%) rename packages/{remote-config-exp => remote-config}/src/remote_config.ts (100%) rename packages/{remote-config-exp => remote-config}/src/storage/storage.ts (100%) rename packages/{remote-config-exp => remote-config}/src/storage/storage_cache.ts (100%) rename packages/{remote-config-exp => remote-config}/src/value.ts (100%) rename packages/{remote-config-exp => remote-config}/test/client/caching_client.test.ts (100%) rename packages/{remote-config-exp => remote-config}/test/client/rest_client.test.ts (100%) rename packages/{remote-config-exp => remote-config}/test/client/retrying_client.test.ts (100%) rename packages/{remote-config-exp => remote-config}/test/errors.test.ts (100%) rename packages/{remote-config-exp => remote-config}/test/language.test.ts (100%) rename packages/{remote-config-exp => remote-config}/test/remote_config.test.ts (100%) rename packages/{remote-config-exp => remote-config}/test/setup.ts (100%) rename packages/{remote-config-exp => remote-config}/test/storage/storage.test.ts (100%) rename packages/{remote-config-exp => remote-config}/test/storage/storage_cache.test.ts (100%) rename packages/{remote-config-exp => remote-config}/test/value.test.ts (100%) rename packages/{remote-config-exp => remote-config}/test_app/index.html (100%) rename packages/{remote-config-exp => remote-config}/test_app/index.js (100%) rename packages/{remote-config-exp => remote-config}/tsconfig.json (100%) diff --git a/packages/analytics-compat/README.md b/packages/analytics-compat/README.md new file mode 100644 index 00000000000..cff70fc650f --- /dev/null +++ b/packages/analytics-compat/README.md @@ -0,0 +1,5 @@ +# @firebase/analytics-compat + +This is the compatibility layer for the Firebase Analytics component of the Firebase JS SDK. + +**This package is not intended for direct usage, and should only be used via the officially supported [firebase](https://www.npmjs.com/package/firebase) package.** diff --git a/packages/analytics-compat/package.json b/packages/analytics-compat/package.json index e2e47c3b90e..58e2929cf7a 100644 --- a/packages/analytics-compat/package.json +++ b/packages/analytics-compat/package.json @@ -1,8 +1,7 @@ { "name": "@firebase/analytics-compat", - "version": "0.0.900", + "version": "0.1.0", "description": "", - "private": true, "author": "Firebase (https://firebase.google.com/)", "main": "dist/index.cjs.js", "browser": "dist/index.esm2017.js", @@ -15,7 +14,7 @@ "@firebase/app-compat": "0.x" }, "devDependencies": { - "@firebase/app-compat": "0.0.900", + "@firebase/app-compat": "0.1.0", "rollup": "2.52.2", "@rollup/plugin-json": "4.1.0", "rollup-plugin-typescript2": "0.30.0", @@ -45,7 +44,7 @@ "typings": "dist/src/index.d.ts", "dependencies": { "@firebase/component": "0.5.5", - "@firebase/analytics-exp": "0.0.900", + "@firebase/analytics": "0.6.18", "@firebase/analytics-types": "0.6.0", "@firebase/util": "1.2.0", "tslib": "^2.1.0" diff --git a/packages/analytics-exp/.eslintrc.js b/packages/analytics/.eslintrc.js similarity index 100% rename from packages/analytics-exp/.eslintrc.js rename to packages/analytics/.eslintrc.js diff --git a/packages/analytics-exp/README.md b/packages/analytics/README.md similarity index 100% rename from packages/analytics-exp/README.md rename to packages/analytics/README.md diff --git a/packages/analytics-exp/api-extractor.json b/packages/analytics/api-extractor.json similarity index 100% rename from packages/analytics-exp/api-extractor.json rename to packages/analytics/api-extractor.json diff --git a/packages/analytics-exp/karma.conf.js b/packages/analytics/karma.conf.js similarity index 100% rename from packages/analytics-exp/karma.conf.js rename to packages/analytics/karma.conf.js diff --git a/packages/analytics-exp/karma.integration.conf.js b/packages/analytics/karma.integration.conf.js similarity index 100% rename from packages/analytics-exp/karma.integration.conf.js rename to packages/analytics/karma.integration.conf.js diff --git a/packages/analytics-exp/package.json b/packages/analytics/package.json similarity index 100% rename from packages/analytics-exp/package.json rename to packages/analytics/package.json diff --git a/packages/analytics-exp/rollup.config.js b/packages/analytics/rollup.config.js similarity index 100% rename from packages/analytics-exp/rollup.config.js rename to packages/analytics/rollup.config.js diff --git a/packages/analytics-exp/rollup.config.release.js b/packages/analytics/rollup.config.release.js similarity index 100% rename from packages/analytics-exp/rollup.config.release.js rename to packages/analytics/rollup.config.release.js diff --git a/packages/analytics-exp/rollup.shared.js b/packages/analytics/rollup.shared.js similarity index 100% rename from packages/analytics-exp/rollup.shared.js rename to packages/analytics/rollup.shared.js diff --git a/packages/analytics-exp/src/api.test.ts b/packages/analytics/src/api.test.ts similarity index 100% rename from packages/analytics-exp/src/api.test.ts rename to packages/analytics/src/api.test.ts diff --git a/packages/analytics-exp/src/api.ts b/packages/analytics/src/api.ts similarity index 100% rename from packages/analytics-exp/src/api.ts rename to packages/analytics/src/api.ts diff --git a/packages/analytics-exp/src/constants.ts b/packages/analytics/src/constants.ts similarity index 100% rename from packages/analytics-exp/src/constants.ts rename to packages/analytics/src/constants.ts diff --git a/packages/analytics-exp/src/errors.ts b/packages/analytics/src/errors.ts similarity index 100% rename from packages/analytics-exp/src/errors.ts rename to packages/analytics/src/errors.ts diff --git a/packages/analytics-exp/src/factory.ts b/packages/analytics/src/factory.ts similarity index 100% rename from packages/analytics-exp/src/factory.ts rename to packages/analytics/src/factory.ts diff --git a/packages/analytics-exp/src/functions.test.ts b/packages/analytics/src/functions.test.ts similarity index 100% rename from packages/analytics-exp/src/functions.test.ts rename to packages/analytics/src/functions.test.ts diff --git a/packages/analytics-exp/src/functions.ts b/packages/analytics/src/functions.ts similarity index 100% rename from packages/analytics-exp/src/functions.ts rename to packages/analytics/src/functions.ts diff --git a/packages/analytics-exp/src/get-config.test.ts b/packages/analytics/src/get-config.test.ts similarity index 100% rename from packages/analytics-exp/src/get-config.test.ts rename to packages/analytics/src/get-config.test.ts diff --git a/packages/analytics-exp/src/get-config.ts b/packages/analytics/src/get-config.ts similarity index 100% rename from packages/analytics-exp/src/get-config.ts rename to packages/analytics/src/get-config.ts diff --git a/packages/analytics-exp/src/helpers.test.ts b/packages/analytics/src/helpers.test.ts similarity index 100% rename from packages/analytics-exp/src/helpers.test.ts rename to packages/analytics/src/helpers.test.ts diff --git a/packages/analytics-exp/src/helpers.ts b/packages/analytics/src/helpers.ts similarity index 100% rename from packages/analytics-exp/src/helpers.ts rename to packages/analytics/src/helpers.ts diff --git a/packages/analytics-exp/src/index.test.ts b/packages/analytics/src/index.test.ts similarity index 100% rename from packages/analytics-exp/src/index.test.ts rename to packages/analytics/src/index.test.ts diff --git a/packages/analytics-exp/src/index.ts b/packages/analytics/src/index.ts similarity index 100% rename from packages/analytics-exp/src/index.ts rename to packages/analytics/src/index.ts diff --git a/packages/analytics-exp/src/initialize-analytics.test.ts b/packages/analytics/src/initialize-analytics.test.ts similarity index 100% rename from packages/analytics-exp/src/initialize-analytics.test.ts rename to packages/analytics/src/initialize-analytics.test.ts diff --git a/packages/analytics-exp/src/initialize-analytics.ts b/packages/analytics/src/initialize-analytics.ts similarity index 100% rename from packages/analytics-exp/src/initialize-analytics.ts rename to packages/analytics/src/initialize-analytics.ts diff --git a/packages/analytics-exp/src/logger.ts b/packages/analytics/src/logger.ts similarity index 100% rename from packages/analytics-exp/src/logger.ts rename to packages/analytics/src/logger.ts diff --git a/packages/analytics-exp/src/public-types.ts b/packages/analytics/src/public-types.ts similarity index 100% rename from packages/analytics-exp/src/public-types.ts rename to packages/analytics/src/public-types.ts diff --git a/packages/analytics-exp/src/types.ts b/packages/analytics/src/types.ts similarity index 100% rename from packages/analytics-exp/src/types.ts rename to packages/analytics/src/types.ts diff --git a/packages/analytics-exp/testing/get-fake-firebase-services.ts b/packages/analytics/testing/get-fake-firebase-services.ts similarity index 100% rename from packages/analytics-exp/testing/get-fake-firebase-services.ts rename to packages/analytics/testing/get-fake-firebase-services.ts diff --git a/packages/analytics-exp/testing/gtag-script-util.ts b/packages/analytics/testing/gtag-script-util.ts similarity index 100% rename from packages/analytics-exp/testing/gtag-script-util.ts rename to packages/analytics/testing/gtag-script-util.ts diff --git a/packages/analytics-exp/testing/integration-tests/integration.ts b/packages/analytics/testing/integration-tests/integration.ts similarity index 100% rename from packages/analytics-exp/testing/integration-tests/integration.ts rename to packages/analytics/testing/integration-tests/integration.ts diff --git a/packages/analytics-exp/testing/setup.ts b/packages/analytics/testing/setup.ts similarity index 100% rename from packages/analytics-exp/testing/setup.ts rename to packages/analytics/testing/setup.ts diff --git a/packages/analytics-exp/tsconfig.json b/packages/analytics/tsconfig.json similarity index 100% rename from packages/analytics-exp/tsconfig.json rename to packages/analytics/tsconfig.json diff --git a/packages/app-check-exp/.eslintrc.js b/packages/app-check/.eslintrc.js similarity index 100% rename from packages/app-check-exp/.eslintrc.js rename to packages/app-check/.eslintrc.js diff --git a/packages/app-check-exp/README.md b/packages/app-check/README.md similarity index 100% rename from packages/app-check-exp/README.md rename to packages/app-check/README.md diff --git a/packages/app-check-exp/api-extractor.json b/packages/app-check/api-extractor.json similarity index 100% rename from packages/app-check-exp/api-extractor.json rename to packages/app-check/api-extractor.json diff --git a/packages/app-check-exp/karma.conf.js b/packages/app-check/karma.conf.js similarity index 100% rename from packages/app-check-exp/karma.conf.js rename to packages/app-check/karma.conf.js diff --git a/packages/app-check-exp/package.json b/packages/app-check/package.json similarity index 100% rename from packages/app-check-exp/package.json rename to packages/app-check/package.json diff --git a/packages/app-check-exp/rollup.config.js b/packages/app-check/rollup.config.js similarity index 100% rename from packages/app-check-exp/rollup.config.js rename to packages/app-check/rollup.config.js diff --git a/packages/app-check-exp/rollup.config.release.js b/packages/app-check/rollup.config.release.js similarity index 100% rename from packages/app-check-exp/rollup.config.release.js rename to packages/app-check/rollup.config.release.js diff --git a/packages/app-check-exp/rollup.shared.js b/packages/app-check/rollup.shared.js similarity index 100% rename from packages/app-check-exp/rollup.shared.js rename to packages/app-check/rollup.shared.js diff --git a/packages/app-check-exp/src/api.test.ts b/packages/app-check/src/api.test.ts similarity index 100% rename from packages/app-check-exp/src/api.test.ts rename to packages/app-check/src/api.test.ts diff --git a/packages/app-check-exp/src/api.ts b/packages/app-check/src/api.ts similarity index 100% rename from packages/app-check-exp/src/api.ts rename to packages/app-check/src/api.ts diff --git a/packages/app-check-exp/src/client.test.ts b/packages/app-check/src/client.test.ts similarity index 100% rename from packages/app-check-exp/src/client.test.ts rename to packages/app-check/src/client.test.ts diff --git a/packages/app-check-exp/src/client.ts b/packages/app-check/src/client.ts similarity index 100% rename from packages/app-check-exp/src/client.ts rename to packages/app-check/src/client.ts diff --git a/packages/app-check-exp/src/constants.ts b/packages/app-check/src/constants.ts similarity index 100% rename from packages/app-check-exp/src/constants.ts rename to packages/app-check/src/constants.ts diff --git a/packages/app-check-exp/src/debug.test.ts b/packages/app-check/src/debug.test.ts similarity index 100% rename from packages/app-check-exp/src/debug.test.ts rename to packages/app-check/src/debug.test.ts diff --git a/packages/app-check-exp/src/debug.ts b/packages/app-check/src/debug.ts similarity index 100% rename from packages/app-check-exp/src/debug.ts rename to packages/app-check/src/debug.ts diff --git a/packages/app-check-exp/src/errors.ts b/packages/app-check/src/errors.ts similarity index 100% rename from packages/app-check-exp/src/errors.ts rename to packages/app-check/src/errors.ts diff --git a/packages/app-check-exp/src/factory.ts b/packages/app-check/src/factory.ts similarity index 100% rename from packages/app-check-exp/src/factory.ts rename to packages/app-check/src/factory.ts diff --git a/packages/app-check-exp/src/index.ts b/packages/app-check/src/index.ts similarity index 100% rename from packages/app-check-exp/src/index.ts rename to packages/app-check/src/index.ts diff --git a/packages/app-check-exp/src/indexeddb.ts b/packages/app-check/src/indexeddb.ts similarity index 100% rename from packages/app-check-exp/src/indexeddb.ts rename to packages/app-check/src/indexeddb.ts diff --git a/packages/app-check-exp/src/internal-api.test.ts b/packages/app-check/src/internal-api.test.ts similarity index 100% rename from packages/app-check-exp/src/internal-api.test.ts rename to packages/app-check/src/internal-api.test.ts diff --git a/packages/app-check-exp/src/internal-api.ts b/packages/app-check/src/internal-api.ts similarity index 100% rename from packages/app-check-exp/src/internal-api.ts rename to packages/app-check/src/internal-api.ts diff --git a/packages/app-check-exp/src/logger.ts b/packages/app-check/src/logger.ts similarity index 100% rename from packages/app-check-exp/src/logger.ts rename to packages/app-check/src/logger.ts diff --git a/packages/app-check-exp/src/proactive-refresh.test.ts b/packages/app-check/src/proactive-refresh.test.ts similarity index 100% rename from packages/app-check-exp/src/proactive-refresh.test.ts rename to packages/app-check/src/proactive-refresh.test.ts diff --git a/packages/app-check-exp/src/proactive-refresh.ts b/packages/app-check/src/proactive-refresh.ts similarity index 100% rename from packages/app-check-exp/src/proactive-refresh.ts rename to packages/app-check/src/proactive-refresh.ts diff --git a/packages/app-check-exp/src/providers.ts b/packages/app-check/src/providers.ts similarity index 100% rename from packages/app-check-exp/src/providers.ts rename to packages/app-check/src/providers.ts diff --git a/packages/app-check-exp/src/public-types.ts b/packages/app-check/src/public-types.ts similarity index 100% rename from packages/app-check-exp/src/public-types.ts rename to packages/app-check/src/public-types.ts diff --git a/packages/app-check-exp/src/recaptcha.test.ts b/packages/app-check/src/recaptcha.test.ts similarity index 100% rename from packages/app-check-exp/src/recaptcha.test.ts rename to packages/app-check/src/recaptcha.test.ts diff --git a/packages/app-check-exp/src/recaptcha.ts b/packages/app-check/src/recaptcha.ts similarity index 100% rename from packages/app-check-exp/src/recaptcha.ts rename to packages/app-check/src/recaptcha.ts diff --git a/packages/app-check-exp/src/state.ts b/packages/app-check/src/state.ts similarity index 100% rename from packages/app-check-exp/src/state.ts rename to packages/app-check/src/state.ts diff --git a/packages/app-check-exp/src/storage.test.ts b/packages/app-check/src/storage.test.ts similarity index 100% rename from packages/app-check-exp/src/storage.test.ts rename to packages/app-check/src/storage.test.ts diff --git a/packages/app-check-exp/src/storage.ts b/packages/app-check/src/storage.ts similarity index 100% rename from packages/app-check-exp/src/storage.ts rename to packages/app-check/src/storage.ts diff --git a/packages/app-check-exp/src/types.ts b/packages/app-check/src/types.ts similarity index 100% rename from packages/app-check-exp/src/types.ts rename to packages/app-check/src/types.ts diff --git a/packages/app-check-exp/src/util.ts b/packages/app-check/src/util.ts similarity index 100% rename from packages/app-check-exp/src/util.ts rename to packages/app-check/src/util.ts diff --git a/packages/app-check-exp/test/setup.ts b/packages/app-check/test/setup.ts similarity index 100% rename from packages/app-check-exp/test/setup.ts rename to packages/app-check/test/setup.ts diff --git a/packages/app-check-exp/test/util.ts b/packages/app-check/test/util.ts similarity index 100% rename from packages/app-check-exp/test/util.ts rename to packages/app-check/test/util.ts diff --git a/packages/app-check-exp/tsconfig.json b/packages/app-check/tsconfig.json similarity index 100% rename from packages/app-check-exp/tsconfig.json rename to packages/app-check/tsconfig.json diff --git a/packages/app-exp/.eslintrc.js b/packages/app/.eslintrc.js similarity index 100% rename from packages/app-exp/.eslintrc.js rename to packages/app/.eslintrc.js diff --git a/packages/app-exp/README.md b/packages/app/README.md similarity index 92% rename from packages/app-exp/README.md rename to packages/app/README.md index efe4a954881..e311103c622 100644 --- a/packages/app-exp/README.md +++ b/packages/app/README.md @@ -1,4 +1,4 @@ -# @firebase/app-exp +# @firebase/app This package coordinates the communication between the different Firebase components diff --git a/packages/app-exp/api-extractor.json b/packages/app/api-extractor.json similarity index 100% rename from packages/app-exp/api-extractor.json rename to packages/app/api-extractor.json diff --git a/packages/app-exp/karma.conf.js b/packages/app/karma.conf.js similarity index 100% rename from packages/app-exp/karma.conf.js rename to packages/app/karma.conf.js diff --git a/packages/app-exp/package.json b/packages/app/package.json similarity index 93% rename from packages/app-exp/package.json rename to packages/app/package.json index a28a20f70a6..e6d207c7103 100644 --- a/packages/app-exp/package.json +++ b/packages/app/package.json @@ -1,7 +1,6 @@ { - "name": "@firebase/app-exp", - "version": "0.0.900", - "private": true, + "name": "@firebase/app", + "version": "0.6.30", "description": "FirebaseApp", "author": "Firebase (https://firebase.google.com/)", "main": "dist/index.cjs.js", @@ -15,7 +14,7 @@ "lint:fix": "eslint --fix -c .eslintrc.js '**/*.ts' --ignore-path '../../.gitignore'", "build": "rollup -c && yarn api-report", "build:release": "rollup -c rollup.config.release.js && yarn api-report && yarn typings:public", - "build:deps": "lerna run --scope @firebase/app-exp --include-dependencies build", + "build:deps": "lerna run --scope @firebase/app --include-dependencies build", "dev": "rollup -c -w", "test": "run-p lint test:all", "test:ci": "node ../../scripts/run_tests_in_ci.js -s test:all", diff --git a/packages/app-exp/rollup.config.js b/packages/app/rollup.config.js similarity index 100% rename from packages/app-exp/rollup.config.js rename to packages/app/rollup.config.js diff --git a/packages/app-exp/rollup.config.release.js b/packages/app/rollup.config.release.js similarity index 100% rename from packages/app-exp/rollup.config.release.js rename to packages/app/rollup.config.release.js diff --git a/packages/app-exp/rollup.shared.js b/packages/app/rollup.shared.js similarity index 100% rename from packages/app-exp/rollup.shared.js rename to packages/app/rollup.shared.js diff --git a/packages/app-exp/src/api.test.ts b/packages/app/src/api.test.ts similarity index 100% rename from packages/app-exp/src/api.test.ts rename to packages/app/src/api.test.ts diff --git a/packages/app-exp/src/api.ts b/packages/app/src/api.ts similarity index 100% rename from packages/app-exp/src/api.ts rename to packages/app/src/api.ts diff --git a/packages/app-exp/src/constants.ts b/packages/app/src/constants.ts similarity index 64% rename from packages/app-exp/src/constants.ts rename to packages/app/src/constants.ts index f00a93f0da9..3aa9ca14440 100644 --- a/packages/app-exp/src/constants.ts +++ b/packages/app/src/constants.ts @@ -17,29 +17,29 @@ import { name as appName } from '../package.json'; import { name as appCompatName } from '../../app-compat/package.json'; -import { name as analyticsCompatName } from '../../../packages-exp/analytics-compat/package.json'; -import { name as analyticsName } from '../../../packages-exp/analytics-exp/package.json'; -import { name as appCheckCompatName } from '../../../packages-exp/app-check-compat/package.json'; -import { name as appCheckName } from '../../../packages-exp/app-check-exp/package.json'; -import { name as authName } from '../../../packages-exp/auth-exp/package.json'; -import { name as authCompatName } from '../../../packages-exp/auth-compat-exp/package.json'; +import { name as analyticsCompatName } from '../../../packages/analytics-compat/package.json'; +import { name as analyticsName } from '../../../packages/analytics/package.json'; +import { name as appCheckCompatName } from '../../../packages/app-check-compat/package.json'; +import { name as appCheckName } from '../../../packages/app-check/package.json'; +import { name as authName } from '../../../packages/auth/package.json'; +import { name as authCompatName } from '../../../packages/auth-compat/package.json'; import { name as databaseName } from '../../../packages/database/package.json'; import { name as databaseCompatName } from '../../../packages/database/compat/package.json'; -import { name as functionsName } from '../../../packages-exp/functions-exp/package.json'; -import { name as functionsCompatName } from '../../../packages-exp/functions-compat/package.json'; -import { name as installationsName } from '../../../packages-exp/installations-exp/package.json'; -import { name as installationsCompatName } from '../../../packages-exp/installations-compat/package.json'; -import { name as messagingName } from '../../../packages-exp/messaging-exp/package.json'; -import { name as messagingCompatName } from '../../../packages-exp/messaging-compat/package.json'; -import { name as performanceName } from '../../../packages-exp/performance-exp/package.json'; -import { name as performanceCompatName } from '../../../packages-exp/performance-compat/package.json'; -import { name as remoteConfigName } from '../../../packages-exp/remote-config-exp/package.json'; -import { name as remoteConfigCompatName } from '../../../packages-exp/remote-config-compat/package.json'; +import { name as functionsName } from '../../../packages/functions/package.json'; +import { name as functionsCompatName } from '../../../packages/functions-compat/package.json'; +import { name as installationsName } from '../../../packages/installations/package.json'; +import { name as installationsCompatName } from '../../../packages/installations-compat/package.json'; +import { name as messagingName } from '../../../packages/messaging/package.json'; +import { name as messagingCompatName } from '../../../packages/messaging-compat/package.json'; +import { name as performanceName } from '../../../packages/performance/package.json'; +import { name as performanceCompatName } from '../../../packages/performance-compat/package.json'; +import { name as remoteConfigName } from '../../../packages/remote-config/package.json'; +import { name as remoteConfigCompatName } from '../../../packages/remote-config-compat/package.json'; import { name as storageName } from '../../../packages/storage/package.json'; import { name as storageCompatName } from '../../../packages/storage/compat/package.json'; import { name as firestoreName } from '../../../packages/firestore/package.json'; import { name as firestoreCompatName } from '../../../packages/firestore/compat/package.json'; -import { name as packageName } from '../../../packages-exp/firebase-exp/package.json'; +import { name as packageName } from '../../../packages/firebase/package.json'; /** * The default app name diff --git a/packages/app-exp/src/errors.ts b/packages/app/src/errors.ts similarity index 100% rename from packages/app-exp/src/errors.ts rename to packages/app/src/errors.ts diff --git a/packages/app-exp/src/firebaseApp.test.ts b/packages/app/src/firebaseApp.test.ts similarity index 100% rename from packages/app-exp/src/firebaseApp.test.ts rename to packages/app/src/firebaseApp.test.ts diff --git a/packages/app-exp/src/firebaseApp.ts b/packages/app/src/firebaseApp.ts similarity index 97% rename from packages/app-exp/src/firebaseApp.ts rename to packages/app/src/firebaseApp.ts index 7333a76f22d..60d3b29a3ea 100644 --- a/packages/app-exp/src/firebaseApp.ts +++ b/packages/app/src/firebaseApp.ts @@ -53,7 +53,7 @@ export class FirebaseAppImpl implements FirebaseApp { config.automaticDataCollectionEnabled; this._container = container; this.container.addComponent( - new Component('app-exp', () => this, ComponentType.PUBLIC) + new Component('app', () => this, ComponentType.PUBLIC) ); } diff --git a/packages/app-exp/src/index.ts b/packages/app/src/index.ts similarity index 100% rename from packages/app-exp/src/index.ts rename to packages/app/src/index.ts diff --git a/packages/app-exp/src/internal.test.ts b/packages/app/src/internal.test.ts similarity index 100% rename from packages/app-exp/src/internal.test.ts rename to packages/app/src/internal.test.ts diff --git a/packages/app-exp/src/internal.ts b/packages/app/src/internal.ts similarity index 100% rename from packages/app-exp/src/internal.ts rename to packages/app/src/internal.ts diff --git a/packages/app-exp/src/logger.ts b/packages/app/src/logger.ts similarity index 100% rename from packages/app-exp/src/logger.ts rename to packages/app/src/logger.ts diff --git a/packages/app-exp/src/platformLoggerService.test.ts b/packages/app/src/platformLoggerService.test.ts similarity index 100% rename from packages/app-exp/src/platformLoggerService.test.ts rename to packages/app/src/platformLoggerService.test.ts diff --git a/packages/app-exp/src/platformLoggerService.ts b/packages/app/src/platformLoggerService.ts similarity index 100% rename from packages/app-exp/src/platformLoggerService.ts rename to packages/app/src/platformLoggerService.ts diff --git a/packages/app-exp/src/public-types.ts b/packages/app/src/public-types.ts similarity index 98% rename from packages/app-exp/src/public-types.ts rename to packages/app/src/public-types.ts index e153c6eb4ef..7bad697a464 100644 --- a/packages/app-exp/src/public-types.ts +++ b/packages/app/src/public-types.ts @@ -143,7 +143,7 @@ export interface _FirebaseService { app: FirebaseApp; /** * Delete the service and free it's resources - called from - * {@link @firebase/app-exp#deleteApp | deleteApp()} + * {@link @firebase/app#deleteApp | deleteApp()} */ _delete(): Promise; } @@ -160,7 +160,7 @@ export interface _FirebaseAppInternal extends FirebaseApp { declare module '@firebase/component' { interface NameServiceMapping { - 'app-exp': FirebaseApp; + 'app': FirebaseApp; 'app-version': VersionService; 'platform-logger': PlatformLoggerService; } diff --git a/packages/app-exp/src/registerCoreComponents.ts b/packages/app/src/registerCoreComponents.ts similarity index 100% rename from packages/app-exp/src/registerCoreComponents.ts rename to packages/app/src/registerCoreComponents.ts diff --git a/packages/app-exp/src/types.ts b/packages/app/src/types.ts similarity index 100% rename from packages/app-exp/src/types.ts rename to packages/app/src/types.ts diff --git a/packages/app-exp/test/setup.ts b/packages/app/test/setup.ts similarity index 100% rename from packages/app-exp/test/setup.ts rename to packages/app/test/setup.ts diff --git a/packages/app-exp/test/util.ts b/packages/app/test/util.ts similarity index 95% rename from packages/app-exp/test/util.ts rename to packages/app/test/util.ts index 0038a7eae5b..1d3491b0c1b 100644 --- a/packages/app-exp/test/util.ts +++ b/packages/app/test/util.ts @@ -41,7 +41,7 @@ export function createTestComponent( // eslint-disable-next-line @typescript-eslint/no-explicit-any name as any, container => - new TestService(container.getProvider('app-exp').getImmediate()), + new TestService(container.getProvider('app').getImmediate()), type ); component.setMultipleInstances(multiInstances); diff --git a/packages/app-exp/tsconfig.json b/packages/app/tsconfig.json similarity index 100% rename from packages/app-exp/tsconfig.json rename to packages/app/tsconfig.json diff --git a/packages/auth-compat-exp/.eslintrc.js b/packages/auth-compat/.eslintrc.js similarity index 100% rename from packages/auth-compat-exp/.eslintrc.js rename to packages/auth-compat/.eslintrc.js diff --git a/packages/auth-compat-exp/README.md b/packages/auth-compat/README.md similarity index 100% rename from packages/auth-compat-exp/README.md rename to packages/auth-compat/README.md diff --git a/packages/auth-compat-exp/demo/.eslintignore b/packages/auth-compat/demo/.eslintignore similarity index 100% rename from packages/auth-compat-exp/demo/.eslintignore rename to packages/auth-compat/demo/.eslintignore diff --git a/packages/auth-compat-exp/demo/.eslintrc.js b/packages/auth-compat/demo/.eslintrc.js similarity index 100% rename from packages/auth-compat-exp/demo/.eslintrc.js rename to packages/auth-compat/demo/.eslintrc.js diff --git a/packages/auth-compat-exp/demo/.gitignore b/packages/auth-compat/demo/.gitignore similarity index 100% rename from packages/auth-compat-exp/demo/.gitignore rename to packages/auth-compat/demo/.gitignore diff --git a/packages/auth-compat-exp/demo/README.md b/packages/auth-compat/demo/README.md similarity index 100% rename from packages/auth-compat-exp/demo/README.md rename to packages/auth-compat/demo/README.md diff --git a/packages/auth-compat-exp/demo/database.rules.json b/packages/auth-compat/demo/database.rules.json similarity index 100% rename from packages/auth-compat-exp/demo/database.rules.json rename to packages/auth-compat/demo/database.rules.json diff --git a/packages/auth-compat-exp/demo/firebase.json b/packages/auth-compat/demo/firebase.json similarity index 100% rename from packages/auth-compat-exp/demo/firebase.json rename to packages/auth-compat/demo/firebase.json diff --git a/packages/auth-compat-exp/demo/functions/index.js b/packages/auth-compat/demo/functions/index.js similarity index 100% rename from packages/auth-compat-exp/demo/functions/index.js rename to packages/auth-compat/demo/functions/index.js diff --git a/packages/auth-compat-exp/demo/functions/package.json b/packages/auth-compat/demo/functions/package.json similarity index 100% rename from packages/auth-compat-exp/demo/functions/package.json rename to packages/auth-compat/demo/functions/package.json diff --git a/packages/auth-compat-exp/demo/functions/yarn.lock b/packages/auth-compat/demo/functions/yarn.lock similarity index 100% rename from packages/auth-compat-exp/demo/functions/yarn.lock rename to packages/auth-compat/demo/functions/yarn.lock diff --git a/packages/auth-compat-exp/demo/package.json b/packages/auth-compat/demo/package.json similarity index 100% rename from packages/auth-compat-exp/demo/package.json rename to packages/auth-compat/demo/package.json diff --git a/packages/auth-compat-exp/demo/public/common.js b/packages/auth-compat/demo/public/common.js similarity index 100% rename from packages/auth-compat-exp/demo/public/common.js rename to packages/auth-compat/demo/public/common.js diff --git a/packages/auth-compat-exp/demo/public/manifest.json b/packages/auth-compat/demo/public/manifest.json similarity index 100% rename from packages/auth-compat-exp/demo/public/manifest.json rename to packages/auth-compat/demo/public/manifest.json diff --git a/packages/auth-compat-exp/demo/public/sample-config.js b/packages/auth-compat/demo/public/sample-config.js similarity index 100% rename from packages/auth-compat-exp/demo/public/sample-config.js rename to packages/auth-compat/demo/public/sample-config.js diff --git a/packages/auth-compat-exp/demo/public/script.js b/packages/auth-compat/demo/public/script.js similarity index 100% rename from packages/auth-compat-exp/demo/public/script.js rename to packages/auth-compat/demo/public/script.js diff --git a/packages/auth-compat-exp/demo/public/style.css b/packages/auth-compat/demo/public/style.css similarity index 100% rename from packages/auth-compat-exp/demo/public/style.css rename to packages/auth-compat/demo/public/style.css diff --git a/packages/auth-compat-exp/demo/rollup.config.js b/packages/auth-compat/demo/rollup.config.js similarity index 100% rename from packages/auth-compat-exp/demo/rollup.config.js rename to packages/auth-compat/demo/rollup.config.js diff --git a/packages/auth-compat-exp/demo/tsconfig.json b/packages/auth-compat/demo/tsconfig.json similarity index 100% rename from packages/auth-compat-exp/demo/tsconfig.json rename to packages/auth-compat/demo/tsconfig.json diff --git a/packages/auth-compat-exp/demo/yarn.lock b/packages/auth-compat/demo/yarn.lock similarity index 100% rename from packages/auth-compat-exp/demo/yarn.lock rename to packages/auth-compat/demo/yarn.lock diff --git a/packages/auth-compat-exp/index.node.ts b/packages/auth-compat/index.node.ts similarity index 100% rename from packages/auth-compat-exp/index.node.ts rename to packages/auth-compat/index.node.ts diff --git a/packages/auth-compat-exp/index.ts b/packages/auth-compat/index.ts similarity index 100% rename from packages/auth-compat-exp/index.ts rename to packages/auth-compat/index.ts diff --git a/packages/auth-compat-exp/karma.conf.js b/packages/auth-compat/karma.conf.js similarity index 100% rename from packages/auth-compat-exp/karma.conf.js rename to packages/auth-compat/karma.conf.js diff --git a/packages/auth-compat-exp/package.json b/packages/auth-compat/package.json similarity index 100% rename from packages/auth-compat-exp/package.json rename to packages/auth-compat/package.json diff --git a/packages/auth-compat-exp/rollup.config.js b/packages/auth-compat/rollup.config.js similarity index 100% rename from packages/auth-compat-exp/rollup.config.js rename to packages/auth-compat/rollup.config.js diff --git a/packages/auth-compat-exp/rollup.config.release.js b/packages/auth-compat/rollup.config.release.js similarity index 100% rename from packages/auth-compat-exp/rollup.config.release.js rename to packages/auth-compat/rollup.config.release.js diff --git a/packages/auth-compat-exp/rollup.config.shared.js b/packages/auth-compat/rollup.config.shared.js similarity index 100% rename from packages/auth-compat-exp/rollup.config.shared.js rename to packages/auth-compat/rollup.config.shared.js diff --git a/packages/auth-compat-exp/scripts/run_node_tests.ts b/packages/auth-compat/scripts/run_node_tests.ts similarity index 100% rename from packages/auth-compat-exp/scripts/run_node_tests.ts rename to packages/auth-compat/scripts/run_node_tests.ts diff --git a/packages/auth-compat-exp/src/auth.test.ts b/packages/auth-compat/src/auth.test.ts similarity index 100% rename from packages/auth-compat-exp/src/auth.test.ts rename to packages/auth-compat/src/auth.test.ts diff --git a/packages/auth-compat-exp/src/auth.ts b/packages/auth-compat/src/auth.ts similarity index 100% rename from packages/auth-compat-exp/src/auth.ts rename to packages/auth-compat/src/auth.ts diff --git a/packages/auth-compat-exp/src/persistence.ts b/packages/auth-compat/src/persistence.ts similarity index 100% rename from packages/auth-compat-exp/src/persistence.ts rename to packages/auth-compat/src/persistence.ts diff --git a/packages/auth-compat-exp/src/phone_auth_provider.ts b/packages/auth-compat/src/phone_auth_provider.ts similarity index 100% rename from packages/auth-compat-exp/src/phone_auth_provider.ts rename to packages/auth-compat/src/phone_auth_provider.ts diff --git a/packages/auth-compat-exp/src/platform.ts b/packages/auth-compat/src/platform.ts similarity index 100% rename from packages/auth-compat-exp/src/platform.ts rename to packages/auth-compat/src/platform.ts diff --git a/packages/auth-compat-exp/src/popup_redirect.test.ts b/packages/auth-compat/src/popup_redirect.test.ts similarity index 100% rename from packages/auth-compat-exp/src/popup_redirect.test.ts rename to packages/auth-compat/src/popup_redirect.test.ts diff --git a/packages/auth-compat-exp/src/popup_redirect.ts b/packages/auth-compat/src/popup_redirect.ts similarity index 100% rename from packages/auth-compat-exp/src/popup_redirect.ts rename to packages/auth-compat/src/popup_redirect.ts diff --git a/packages/auth-compat-exp/src/recaptcha_verifier.ts b/packages/auth-compat/src/recaptcha_verifier.ts similarity index 100% rename from packages/auth-compat-exp/src/recaptcha_verifier.ts rename to packages/auth-compat/src/recaptcha_verifier.ts diff --git a/packages/auth-compat-exp/src/user.ts b/packages/auth-compat/src/user.ts similarity index 100% rename from packages/auth-compat-exp/src/user.ts rename to packages/auth-compat/src/user.ts diff --git a/packages/auth-compat-exp/src/user_credential.ts b/packages/auth-compat/src/user_credential.ts similarity index 100% rename from packages/auth-compat-exp/src/user_credential.ts rename to packages/auth-compat/src/user_credential.ts diff --git a/packages/auth-compat-exp/src/wrap.ts b/packages/auth-compat/src/wrap.ts similarity index 100% rename from packages/auth-compat-exp/src/wrap.ts rename to packages/auth-compat/src/wrap.ts diff --git a/packages/auth-compat-exp/test/helpers/helpers.ts b/packages/auth-compat/test/helpers/helpers.ts similarity index 100% rename from packages/auth-compat-exp/test/helpers/helpers.ts rename to packages/auth-compat/test/helpers/helpers.ts diff --git a/packages/auth-compat-exp/test/integration/flows/anonymous.test.ts b/packages/auth-compat/test/integration/flows/anonymous.test.ts similarity index 100% rename from packages/auth-compat-exp/test/integration/flows/anonymous.test.ts rename to packages/auth-compat/test/integration/flows/anonymous.test.ts diff --git a/packages/auth-compat-exp/test/integration/flows/custom.test.ts b/packages/auth-compat/test/integration/flows/custom.test.ts similarity index 100% rename from packages/auth-compat-exp/test/integration/flows/custom.test.ts rename to packages/auth-compat/test/integration/flows/custom.test.ts diff --git a/packages/auth-compat-exp/test/integration/flows/email.test.ts b/packages/auth-compat/test/integration/flows/email.test.ts similarity index 100% rename from packages/auth-compat-exp/test/integration/flows/email.test.ts rename to packages/auth-compat/test/integration/flows/email.test.ts diff --git a/packages/auth-compat-exp/test/integration/flows/idp.test.ts b/packages/auth-compat/test/integration/flows/idp.test.ts similarity index 100% rename from packages/auth-compat-exp/test/integration/flows/idp.test.ts rename to packages/auth-compat/test/integration/flows/idp.test.ts diff --git a/packages/auth-compat-exp/test/integration/flows/oob.test.ts b/packages/auth-compat/test/integration/flows/oob.test.ts similarity index 100% rename from packages/auth-compat-exp/test/integration/flows/oob.test.ts rename to packages/auth-compat/test/integration/flows/oob.test.ts diff --git a/packages/auth-compat-exp/test/integration/flows/phone.test.ts b/packages/auth-compat/test/integration/flows/phone.test.ts similarity index 100% rename from packages/auth-compat-exp/test/integration/flows/phone.test.ts rename to packages/auth-compat/test/integration/flows/phone.test.ts diff --git a/packages/auth-compat-exp/test/integration/webdriver/static/anonymous.js b/packages/auth-compat/test/integration/webdriver/static/anonymous.js similarity index 100% rename from packages/auth-compat-exp/test/integration/webdriver/static/anonymous.js rename to packages/auth-compat/test/integration/webdriver/static/anonymous.js diff --git a/packages/auth-compat-exp/test/integration/webdriver/static/core.js b/packages/auth-compat/test/integration/webdriver/static/core.js similarity index 100% rename from packages/auth-compat-exp/test/integration/webdriver/static/core.js rename to packages/auth-compat/test/integration/webdriver/static/core.js diff --git a/packages/auth-compat-exp/test/integration/webdriver/static/email.js b/packages/auth-compat/test/integration/webdriver/static/email.js similarity index 100% rename from packages/auth-compat-exp/test/integration/webdriver/static/email.js rename to packages/auth-compat/test/integration/webdriver/static/email.js diff --git a/packages/auth-compat-exp/test/integration/webdriver/static/index.html b/packages/auth-compat/test/integration/webdriver/static/index.html similarity index 100% rename from packages/auth-compat-exp/test/integration/webdriver/static/index.html rename to packages/auth-compat/test/integration/webdriver/static/index.html diff --git a/packages/auth-compat-exp/test/integration/webdriver/static/index.js b/packages/auth-compat/test/integration/webdriver/static/index.js similarity index 100% rename from packages/auth-compat-exp/test/integration/webdriver/static/index.js rename to packages/auth-compat/test/integration/webdriver/static/index.js diff --git a/packages/auth-compat-exp/test/integration/webdriver/static/lazy_load.js b/packages/auth-compat/test/integration/webdriver/static/lazy_load.js similarity index 100% rename from packages/auth-compat-exp/test/integration/webdriver/static/lazy_load.js rename to packages/auth-compat/test/integration/webdriver/static/lazy_load.js diff --git a/packages/auth-compat-exp/test/integration/webdriver/static/logged_in.html b/packages/auth-compat/test/integration/webdriver/static/logged_in.html similarity index 100% rename from packages/auth-compat-exp/test/integration/webdriver/static/logged_in.html rename to packages/auth-compat/test/integration/webdriver/static/logged_in.html diff --git a/packages/auth-compat-exp/test/integration/webdriver/static/persistence.js b/packages/auth-compat/test/integration/webdriver/static/persistence.js similarity index 100% rename from packages/auth-compat-exp/test/integration/webdriver/static/persistence.js rename to packages/auth-compat/test/integration/webdriver/static/persistence.js diff --git a/packages/auth-compat-exp/test/integration/webdriver/static/popup.js b/packages/auth-compat/test/integration/webdriver/static/popup.js similarity index 100% rename from packages/auth-compat-exp/test/integration/webdriver/static/popup.js rename to packages/auth-compat/test/integration/webdriver/static/popup.js diff --git a/packages/auth-compat-exp/test/integration/webdriver/static/redirect.js b/packages/auth-compat/test/integration/webdriver/static/redirect.js similarity index 100% rename from packages/auth-compat-exp/test/integration/webdriver/static/redirect.js rename to packages/auth-compat/test/integration/webdriver/static/redirect.js diff --git a/packages/auth-compat-exp/test/integration/webdriver/static/rollup.config.js b/packages/auth-compat/test/integration/webdriver/static/rollup.config.js similarity index 100% rename from packages/auth-compat-exp/test/integration/webdriver/static/rollup.config.js rename to packages/auth-compat/test/integration/webdriver/static/rollup.config.js diff --git a/packages/auth-compat-exp/test/integration/webdriver/static/ui.js b/packages/auth-compat/test/integration/webdriver/static/ui.js similarity index 100% rename from packages/auth-compat-exp/test/integration/webdriver/static/ui.js rename to packages/auth-compat/test/integration/webdriver/static/ui.js diff --git a/packages/auth-compat-exp/tsconfig.json b/packages/auth-compat/tsconfig.json similarity index 100% rename from packages/auth-compat-exp/tsconfig.json rename to packages/auth-compat/tsconfig.json diff --git a/packages/auth-exp/.eslintrc.js b/packages/auth/.eslintrc.js similarity index 100% rename from packages/auth-exp/.eslintrc.js rename to packages/auth/.eslintrc.js diff --git a/packages/auth-exp/README.md b/packages/auth/README.md similarity index 100% rename from packages/auth-exp/README.md rename to packages/auth/README.md diff --git a/packages/auth-exp/api-extractor.json b/packages/auth/api-extractor.json similarity index 100% rename from packages/auth-exp/api-extractor.json rename to packages/auth/api-extractor.json diff --git a/packages/auth-exp/cordova/demo/.gitignore b/packages/auth/cordova/demo/.gitignore similarity index 100% rename from packages/auth-exp/cordova/demo/.gitignore rename to packages/auth/cordova/demo/.gitignore diff --git a/packages/auth-exp/cordova/demo/README.md b/packages/auth/cordova/demo/README.md similarity index 100% rename from packages/auth-exp/cordova/demo/README.md rename to packages/auth/cordova/demo/README.md diff --git a/packages/auth-exp/cordova/demo/package.json b/packages/auth/cordova/demo/package.json similarity index 100% rename from packages/auth-exp/cordova/demo/package.json rename to packages/auth/cordova/demo/package.json diff --git a/packages/auth-exp/cordova/demo/rollup.config.js b/packages/auth/cordova/demo/rollup.config.js similarity index 100% rename from packages/auth-exp/cordova/demo/rollup.config.js rename to packages/auth/cordova/demo/rollup.config.js diff --git a/packages/auth-exp/cordova/demo/sample-config.xml b/packages/auth/cordova/demo/sample-config.xml similarity index 100% rename from packages/auth-exp/cordova/demo/sample-config.xml rename to packages/auth/cordova/demo/sample-config.xml diff --git a/packages/auth-exp/cordova/demo/src/index.js b/packages/auth/cordova/demo/src/index.js similarity index 100% rename from packages/auth-exp/cordova/demo/src/index.js rename to packages/auth/cordova/demo/src/index.js diff --git a/packages/auth-exp/cordova/demo/src/logging.js b/packages/auth/cordova/demo/src/logging.js similarity index 100% rename from packages/auth-exp/cordova/demo/src/logging.js rename to packages/auth/cordova/demo/src/logging.js diff --git a/packages/auth-exp/cordova/demo/src/sample-config.js b/packages/auth/cordova/demo/src/sample-config.js similarity index 100% rename from packages/auth-exp/cordova/demo/src/sample-config.js rename to packages/auth/cordova/demo/src/sample-config.js diff --git a/packages/auth-exp/cordova/demo/www/index.html b/packages/auth/cordova/demo/www/index.html similarity index 100% rename from packages/auth-exp/cordova/demo/www/index.html rename to packages/auth/cordova/demo/www/index.html diff --git a/packages/auth-exp/cordova/demo/www/style.css b/packages/auth/cordova/demo/www/style.css similarity index 100% rename from packages/auth-exp/cordova/demo/www/style.css rename to packages/auth/cordova/demo/www/style.css diff --git a/packages/auth-exp/cordova/package.json b/packages/auth/cordova/package.json similarity index 100% rename from packages/auth-exp/cordova/package.json rename to packages/auth/cordova/package.json diff --git a/packages/auth-exp/demo/.eslintignore b/packages/auth/demo/.eslintignore similarity index 100% rename from packages/auth-exp/demo/.eslintignore rename to packages/auth/demo/.eslintignore diff --git a/packages/auth-exp/demo/.eslintrc.js b/packages/auth/demo/.eslintrc.js similarity index 100% rename from packages/auth-exp/demo/.eslintrc.js rename to packages/auth/demo/.eslintrc.js diff --git a/packages/auth-exp/demo/.gitignore b/packages/auth/demo/.gitignore similarity index 100% rename from packages/auth-exp/demo/.gitignore rename to packages/auth/demo/.gitignore diff --git a/packages/auth-exp/demo/README.md b/packages/auth/demo/README.md similarity index 100% rename from packages/auth-exp/demo/README.md rename to packages/auth/demo/README.md diff --git a/packages/auth-exp/demo/database.rules.json b/packages/auth/demo/database.rules.json similarity index 100% rename from packages/auth-exp/demo/database.rules.json rename to packages/auth/demo/database.rules.json diff --git a/packages/auth-exp/demo/firebase.json b/packages/auth/demo/firebase.json similarity index 100% rename from packages/auth-exp/demo/firebase.json rename to packages/auth/demo/firebase.json diff --git a/packages/auth-exp/demo/functions/index.js b/packages/auth/demo/functions/index.js similarity index 100% rename from packages/auth-exp/demo/functions/index.js rename to packages/auth/demo/functions/index.js diff --git a/packages/auth-exp/demo/functions/package.json b/packages/auth/demo/functions/package.json similarity index 100% rename from packages/auth-exp/demo/functions/package.json rename to packages/auth/demo/functions/package.json diff --git a/packages/auth-exp/demo/functions/yarn.lock b/packages/auth/demo/functions/yarn.lock similarity index 100% rename from packages/auth-exp/demo/functions/yarn.lock rename to packages/auth/demo/functions/yarn.lock diff --git a/packages/auth-exp/demo/package.json b/packages/auth/demo/package.json similarity index 100% rename from packages/auth-exp/demo/package.json rename to packages/auth/demo/package.json diff --git a/packages/auth-exp/demo/public/common.js b/packages/auth/demo/public/common.js similarity index 100% rename from packages/auth-exp/demo/public/common.js rename to packages/auth/demo/public/common.js diff --git a/packages/auth-exp/demo/public/index.html b/packages/auth/demo/public/index.html similarity index 100% rename from packages/auth-exp/demo/public/index.html rename to packages/auth/demo/public/index.html diff --git a/packages/auth-exp/demo/public/manifest.json b/packages/auth/demo/public/manifest.json similarity index 100% rename from packages/auth-exp/demo/public/manifest.json rename to packages/auth/demo/public/manifest.json diff --git a/packages/auth-exp/demo/public/style.css b/packages/auth/demo/public/style.css similarity index 100% rename from packages/auth-exp/demo/public/style.css rename to packages/auth/demo/public/style.css diff --git a/packages/auth-exp/demo/rollup.config.js b/packages/auth/demo/rollup.config.js similarity index 100% rename from packages/auth-exp/demo/rollup.config.js rename to packages/auth/demo/rollup.config.js diff --git a/packages/auth-exp/demo/src/config.d.ts b/packages/auth/demo/src/config.d.ts similarity index 100% rename from packages/auth-exp/demo/src/config.d.ts rename to packages/auth/demo/src/config.d.ts diff --git a/packages/auth-exp/demo/src/index.js b/packages/auth/demo/src/index.js similarity index 100% rename from packages/auth-exp/demo/src/index.js rename to packages/auth/demo/src/index.js diff --git a/packages/auth-exp/demo/src/logging.js b/packages/auth/demo/src/logging.js similarity index 100% rename from packages/auth-exp/demo/src/logging.js rename to packages/auth/demo/src/logging.js diff --git a/packages/auth-exp/demo/src/sample-config.js b/packages/auth/demo/src/sample-config.js similarity index 100% rename from packages/auth-exp/demo/src/sample-config.js rename to packages/auth/demo/src/sample-config.js diff --git a/packages/auth-exp/demo/src/worker/service-worker.ts b/packages/auth/demo/src/worker/service-worker.ts similarity index 100% rename from packages/auth-exp/demo/src/worker/service-worker.ts rename to packages/auth/demo/src/worker/service-worker.ts diff --git a/packages/auth-exp/demo/src/worker/tsconfig.json b/packages/auth/demo/src/worker/tsconfig.json similarity index 100% rename from packages/auth-exp/demo/src/worker/tsconfig.json rename to packages/auth/demo/src/worker/tsconfig.json diff --git a/packages/auth-exp/demo/src/worker/web-worker.ts b/packages/auth/demo/src/worker/web-worker.ts similarity index 100% rename from packages/auth-exp/demo/src/worker/web-worker.ts rename to packages/auth/demo/src/worker/web-worker.ts diff --git a/packages/auth-exp/demo/tsconfig.json b/packages/auth/demo/tsconfig.json similarity index 100% rename from packages/auth-exp/demo/tsconfig.json rename to packages/auth/demo/tsconfig.json diff --git a/packages/auth-exp/index.cordova.ts b/packages/auth/index.cordova.ts similarity index 100% rename from packages/auth-exp/index.cordova.ts rename to packages/auth/index.cordova.ts diff --git a/packages/auth-exp/index.doc.ts b/packages/auth/index.doc.ts similarity index 100% rename from packages/auth-exp/index.doc.ts rename to packages/auth/index.doc.ts diff --git a/packages/auth-exp/index.node.ts b/packages/auth/index.node.ts similarity index 100% rename from packages/auth-exp/index.node.ts rename to packages/auth/index.node.ts diff --git a/packages/auth-exp/index.rn.ts b/packages/auth/index.rn.ts similarity index 100% rename from packages/auth-exp/index.rn.ts rename to packages/auth/index.rn.ts diff --git a/packages/auth-exp/index.ts b/packages/auth/index.ts similarity index 100% rename from packages/auth-exp/index.ts rename to packages/auth/index.ts diff --git a/packages/auth-exp/index.webworker.ts b/packages/auth/index.webworker.ts similarity index 100% rename from packages/auth-exp/index.webworker.ts rename to packages/auth/index.webworker.ts diff --git a/packages/auth-exp/internal/index.ts b/packages/auth/internal/index.ts similarity index 100% rename from packages/auth-exp/internal/index.ts rename to packages/auth/internal/index.ts diff --git a/packages/auth-exp/internal/package.json b/packages/auth/internal/package.json similarity index 100% rename from packages/auth-exp/internal/package.json rename to packages/auth/internal/package.json diff --git a/packages/auth-exp/karma.conf.js b/packages/auth/karma.conf.js similarity index 100% rename from packages/auth-exp/karma.conf.js rename to packages/auth/karma.conf.js diff --git a/packages/auth-exp/package.json b/packages/auth/package.json similarity index 100% rename from packages/auth-exp/package.json rename to packages/auth/package.json diff --git a/packages/auth-exp/react-native/package.json b/packages/auth/react-native/package.json similarity index 100% rename from packages/auth-exp/react-native/package.json rename to packages/auth/react-native/package.json diff --git a/packages/auth-exp/rollup.config.js b/packages/auth/rollup.config.js similarity index 100% rename from packages/auth-exp/rollup.config.js rename to packages/auth/rollup.config.js diff --git a/packages/auth-exp/rollup.config.release.js b/packages/auth/rollup.config.release.js similarity index 100% rename from packages/auth-exp/rollup.config.release.js rename to packages/auth/rollup.config.release.js diff --git a/packages/auth-exp/rollup.config.shared.js b/packages/auth/rollup.config.shared.js similarity index 100% rename from packages/auth-exp/rollup.config.shared.js rename to packages/auth/rollup.config.shared.js diff --git a/packages/auth-exp/scripts/run-node-tests.js b/packages/auth/scripts/run-node-tests.js similarity index 100% rename from packages/auth-exp/scripts/run-node-tests.js rename to packages/auth/scripts/run-node-tests.js diff --git a/packages/auth-exp/scripts/run-node-tests.ts b/packages/auth/scripts/run-node-tests.ts similarity index 100% rename from packages/auth-exp/scripts/run-node-tests.ts rename to packages/auth/scripts/run-node-tests.ts diff --git a/packages/auth-exp/src/api/account_management/account.test.ts b/packages/auth/src/api/account_management/account.test.ts similarity index 100% rename from packages/auth-exp/src/api/account_management/account.test.ts rename to packages/auth/src/api/account_management/account.test.ts diff --git a/packages/auth-exp/src/api/account_management/account.ts b/packages/auth/src/api/account_management/account.ts similarity index 100% rename from packages/auth-exp/src/api/account_management/account.ts rename to packages/auth/src/api/account_management/account.ts diff --git a/packages/auth-exp/src/api/account_management/email_and_password.test.ts b/packages/auth/src/api/account_management/email_and_password.test.ts similarity index 100% rename from packages/auth-exp/src/api/account_management/email_and_password.test.ts rename to packages/auth/src/api/account_management/email_and_password.test.ts diff --git a/packages/auth-exp/src/api/account_management/email_and_password.ts b/packages/auth/src/api/account_management/email_and_password.ts similarity index 100% rename from packages/auth-exp/src/api/account_management/email_and_password.ts rename to packages/auth/src/api/account_management/email_and_password.ts diff --git a/packages/auth-exp/src/api/account_management/mfa.test.ts b/packages/auth/src/api/account_management/mfa.test.ts similarity index 100% rename from packages/auth-exp/src/api/account_management/mfa.test.ts rename to packages/auth/src/api/account_management/mfa.test.ts diff --git a/packages/auth-exp/src/api/account_management/mfa.ts b/packages/auth/src/api/account_management/mfa.ts similarity index 100% rename from packages/auth-exp/src/api/account_management/mfa.ts rename to packages/auth/src/api/account_management/mfa.ts diff --git a/packages/auth-exp/src/api/account_management/profile.test.ts b/packages/auth/src/api/account_management/profile.test.ts similarity index 100% rename from packages/auth-exp/src/api/account_management/profile.test.ts rename to packages/auth/src/api/account_management/profile.test.ts diff --git a/packages/auth-exp/src/api/account_management/profile.ts b/packages/auth/src/api/account_management/profile.ts similarity index 100% rename from packages/auth-exp/src/api/account_management/profile.ts rename to packages/auth/src/api/account_management/profile.ts diff --git a/packages/auth-exp/src/api/authentication/create_auth_uri.test.ts b/packages/auth/src/api/authentication/create_auth_uri.test.ts similarity index 100% rename from packages/auth-exp/src/api/authentication/create_auth_uri.test.ts rename to packages/auth/src/api/authentication/create_auth_uri.test.ts diff --git a/packages/auth-exp/src/api/authentication/create_auth_uri.ts b/packages/auth/src/api/authentication/create_auth_uri.ts similarity index 100% rename from packages/auth-exp/src/api/authentication/create_auth_uri.ts rename to packages/auth/src/api/authentication/create_auth_uri.ts diff --git a/packages/auth-exp/src/api/authentication/custom_token.test.ts b/packages/auth/src/api/authentication/custom_token.test.ts similarity index 100% rename from packages/auth-exp/src/api/authentication/custom_token.test.ts rename to packages/auth/src/api/authentication/custom_token.test.ts diff --git a/packages/auth-exp/src/api/authentication/custom_token.ts b/packages/auth/src/api/authentication/custom_token.ts similarity index 100% rename from packages/auth-exp/src/api/authentication/custom_token.ts rename to packages/auth/src/api/authentication/custom_token.ts diff --git a/packages/auth-exp/src/api/authentication/email_and_password.test.ts b/packages/auth/src/api/authentication/email_and_password.test.ts similarity index 100% rename from packages/auth-exp/src/api/authentication/email_and_password.test.ts rename to packages/auth/src/api/authentication/email_and_password.test.ts diff --git a/packages/auth-exp/src/api/authentication/email_and_password.ts b/packages/auth/src/api/authentication/email_and_password.ts similarity index 100% rename from packages/auth-exp/src/api/authentication/email_and_password.ts rename to packages/auth/src/api/authentication/email_and_password.ts diff --git a/packages/auth-exp/src/api/authentication/email_link.test.ts b/packages/auth/src/api/authentication/email_link.test.ts similarity index 100% rename from packages/auth-exp/src/api/authentication/email_link.test.ts rename to packages/auth/src/api/authentication/email_link.test.ts diff --git a/packages/auth-exp/src/api/authentication/email_link.ts b/packages/auth/src/api/authentication/email_link.ts similarity index 100% rename from packages/auth-exp/src/api/authentication/email_link.ts rename to packages/auth/src/api/authentication/email_link.ts diff --git a/packages/auth-exp/src/api/authentication/idp.test.ts b/packages/auth/src/api/authentication/idp.test.ts similarity index 100% rename from packages/auth-exp/src/api/authentication/idp.test.ts rename to packages/auth/src/api/authentication/idp.test.ts diff --git a/packages/auth-exp/src/api/authentication/idp.ts b/packages/auth/src/api/authentication/idp.ts similarity index 100% rename from packages/auth-exp/src/api/authentication/idp.ts rename to packages/auth/src/api/authentication/idp.ts diff --git a/packages/auth-exp/src/api/authentication/mfa.test.ts b/packages/auth/src/api/authentication/mfa.test.ts similarity index 100% rename from packages/auth-exp/src/api/authentication/mfa.test.ts rename to packages/auth/src/api/authentication/mfa.test.ts diff --git a/packages/auth-exp/src/api/authentication/mfa.ts b/packages/auth/src/api/authentication/mfa.ts similarity index 100% rename from packages/auth-exp/src/api/authentication/mfa.ts rename to packages/auth/src/api/authentication/mfa.ts diff --git a/packages/auth-exp/src/api/authentication/recaptcha.test.ts b/packages/auth/src/api/authentication/recaptcha.test.ts similarity index 100% rename from packages/auth-exp/src/api/authentication/recaptcha.test.ts rename to packages/auth/src/api/authentication/recaptcha.test.ts diff --git a/packages/auth-exp/src/api/authentication/recaptcha.ts b/packages/auth/src/api/authentication/recaptcha.ts similarity index 100% rename from packages/auth-exp/src/api/authentication/recaptcha.ts rename to packages/auth/src/api/authentication/recaptcha.ts diff --git a/packages/auth-exp/src/api/authentication/sign_up.test.ts b/packages/auth/src/api/authentication/sign_up.test.ts similarity index 100% rename from packages/auth-exp/src/api/authentication/sign_up.test.ts rename to packages/auth/src/api/authentication/sign_up.test.ts diff --git a/packages/auth-exp/src/api/authentication/sign_up.ts b/packages/auth/src/api/authentication/sign_up.ts similarity index 100% rename from packages/auth-exp/src/api/authentication/sign_up.ts rename to packages/auth/src/api/authentication/sign_up.ts diff --git a/packages/auth-exp/src/api/authentication/sms.test.ts b/packages/auth/src/api/authentication/sms.test.ts similarity index 100% rename from packages/auth-exp/src/api/authentication/sms.test.ts rename to packages/auth/src/api/authentication/sms.test.ts diff --git a/packages/auth-exp/src/api/authentication/sms.ts b/packages/auth/src/api/authentication/sms.ts similarity index 100% rename from packages/auth-exp/src/api/authentication/sms.ts rename to packages/auth/src/api/authentication/sms.ts diff --git a/packages/auth-exp/src/api/authentication/token.test.ts b/packages/auth/src/api/authentication/token.test.ts similarity index 100% rename from packages/auth-exp/src/api/authentication/token.test.ts rename to packages/auth/src/api/authentication/token.test.ts diff --git a/packages/auth-exp/src/api/authentication/token.ts b/packages/auth/src/api/authentication/token.ts similarity index 100% rename from packages/auth-exp/src/api/authentication/token.ts rename to packages/auth/src/api/authentication/token.ts diff --git a/packages/auth-exp/src/api/errors.ts b/packages/auth/src/api/errors.ts similarity index 100% rename from packages/auth-exp/src/api/errors.ts rename to packages/auth/src/api/errors.ts diff --git a/packages/auth-exp/src/api/index.test.ts b/packages/auth/src/api/index.test.ts similarity index 100% rename from packages/auth-exp/src/api/index.test.ts rename to packages/auth/src/api/index.test.ts diff --git a/packages/auth-exp/src/api/index.ts b/packages/auth/src/api/index.ts similarity index 100% rename from packages/auth-exp/src/api/index.ts rename to packages/auth/src/api/index.ts diff --git a/packages/auth-exp/src/api/project_config/get_project_config.test.ts b/packages/auth/src/api/project_config/get_project_config.test.ts similarity index 100% rename from packages/auth-exp/src/api/project_config/get_project_config.test.ts rename to packages/auth/src/api/project_config/get_project_config.test.ts diff --git a/packages/auth-exp/src/api/project_config/get_project_config.ts b/packages/auth/src/api/project_config/get_project_config.ts similarity index 100% rename from packages/auth-exp/src/api/project_config/get_project_config.ts rename to packages/auth/src/api/project_config/get_project_config.ts diff --git a/packages/auth-exp/src/core/action_code_url.test.ts b/packages/auth/src/core/action_code_url.test.ts similarity index 100% rename from packages/auth-exp/src/core/action_code_url.test.ts rename to packages/auth/src/core/action_code_url.test.ts diff --git a/packages/auth-exp/src/core/action_code_url.ts b/packages/auth/src/core/action_code_url.ts similarity index 100% rename from packages/auth-exp/src/core/action_code_url.ts rename to packages/auth/src/core/action_code_url.ts diff --git a/packages/auth-exp/src/core/auth/auth_event_manager.test.ts b/packages/auth/src/core/auth/auth_event_manager.test.ts similarity index 100% rename from packages/auth-exp/src/core/auth/auth_event_manager.test.ts rename to packages/auth/src/core/auth/auth_event_manager.test.ts diff --git a/packages/auth-exp/src/core/auth/auth_event_manager.ts b/packages/auth/src/core/auth/auth_event_manager.ts similarity index 100% rename from packages/auth-exp/src/core/auth/auth_event_manager.ts rename to packages/auth/src/core/auth/auth_event_manager.ts diff --git a/packages/auth-exp/src/core/auth/auth_impl.test.ts b/packages/auth/src/core/auth/auth_impl.test.ts similarity index 100% rename from packages/auth-exp/src/core/auth/auth_impl.test.ts rename to packages/auth/src/core/auth/auth_impl.test.ts diff --git a/packages/auth-exp/src/core/auth/auth_impl.ts b/packages/auth/src/core/auth/auth_impl.ts similarity index 100% rename from packages/auth-exp/src/core/auth/auth_impl.ts rename to packages/auth/src/core/auth/auth_impl.ts diff --git a/packages/auth-exp/src/core/auth/emulator.test.ts b/packages/auth/src/core/auth/emulator.test.ts similarity index 100% rename from packages/auth-exp/src/core/auth/emulator.test.ts rename to packages/auth/src/core/auth/emulator.test.ts diff --git a/packages/auth-exp/src/core/auth/emulator.ts b/packages/auth/src/core/auth/emulator.ts similarity index 100% rename from packages/auth-exp/src/core/auth/emulator.ts rename to packages/auth/src/core/auth/emulator.ts diff --git a/packages/auth-exp/src/core/auth/firebase_internal.test.ts b/packages/auth/src/core/auth/firebase_internal.test.ts similarity index 100% rename from packages/auth-exp/src/core/auth/firebase_internal.test.ts rename to packages/auth/src/core/auth/firebase_internal.test.ts diff --git a/packages/auth-exp/src/core/auth/firebase_internal.ts b/packages/auth/src/core/auth/firebase_internal.ts similarity index 100% rename from packages/auth-exp/src/core/auth/firebase_internal.ts rename to packages/auth/src/core/auth/firebase_internal.ts diff --git a/packages/auth-exp/src/core/auth/initialize.test.ts b/packages/auth/src/core/auth/initialize.test.ts similarity index 100% rename from packages/auth-exp/src/core/auth/initialize.test.ts rename to packages/auth/src/core/auth/initialize.test.ts diff --git a/packages/auth-exp/src/core/auth/initialize.ts b/packages/auth/src/core/auth/initialize.ts similarity index 100% rename from packages/auth-exp/src/core/auth/initialize.ts rename to packages/auth/src/core/auth/initialize.ts diff --git a/packages/auth-exp/src/core/auth/register.ts b/packages/auth/src/core/auth/register.ts similarity index 100% rename from packages/auth-exp/src/core/auth/register.ts rename to packages/auth/src/core/auth/register.ts diff --git a/packages/auth-exp/src/core/credentials/auth_credential.ts b/packages/auth/src/core/credentials/auth_credential.ts similarity index 100% rename from packages/auth-exp/src/core/credentials/auth_credential.ts rename to packages/auth/src/core/credentials/auth_credential.ts diff --git a/packages/auth-exp/src/core/credentials/email.test.ts b/packages/auth/src/core/credentials/email.test.ts similarity index 100% rename from packages/auth-exp/src/core/credentials/email.test.ts rename to packages/auth/src/core/credentials/email.test.ts diff --git a/packages/auth-exp/src/core/credentials/email.ts b/packages/auth/src/core/credentials/email.ts similarity index 100% rename from packages/auth-exp/src/core/credentials/email.ts rename to packages/auth/src/core/credentials/email.ts diff --git a/packages/auth-exp/src/core/credentials/index.ts b/packages/auth/src/core/credentials/index.ts similarity index 100% rename from packages/auth-exp/src/core/credentials/index.ts rename to packages/auth/src/core/credentials/index.ts diff --git a/packages/auth-exp/src/core/credentials/oauth.test.ts b/packages/auth/src/core/credentials/oauth.test.ts similarity index 100% rename from packages/auth-exp/src/core/credentials/oauth.test.ts rename to packages/auth/src/core/credentials/oauth.test.ts diff --git a/packages/auth-exp/src/core/credentials/oauth.ts b/packages/auth/src/core/credentials/oauth.ts similarity index 100% rename from packages/auth-exp/src/core/credentials/oauth.ts rename to packages/auth/src/core/credentials/oauth.ts diff --git a/packages/auth-exp/src/core/credentials/phone.test.ts b/packages/auth/src/core/credentials/phone.test.ts similarity index 100% rename from packages/auth-exp/src/core/credentials/phone.test.ts rename to packages/auth/src/core/credentials/phone.test.ts diff --git a/packages/auth-exp/src/core/credentials/phone.ts b/packages/auth/src/core/credentials/phone.ts similarity index 100% rename from packages/auth-exp/src/core/credentials/phone.ts rename to packages/auth/src/core/credentials/phone.ts diff --git a/packages/auth-exp/src/core/credentials/saml.test.ts b/packages/auth/src/core/credentials/saml.test.ts similarity index 100% rename from packages/auth-exp/src/core/credentials/saml.test.ts rename to packages/auth/src/core/credentials/saml.test.ts diff --git a/packages/auth-exp/src/core/credentials/saml.ts b/packages/auth/src/core/credentials/saml.ts similarity index 100% rename from packages/auth-exp/src/core/credentials/saml.ts rename to packages/auth/src/core/credentials/saml.ts diff --git a/packages/auth-exp/src/core/errors.test.ts b/packages/auth/src/core/errors.test.ts similarity index 100% rename from packages/auth-exp/src/core/errors.test.ts rename to packages/auth/src/core/errors.test.ts diff --git a/packages/auth-exp/src/core/errors.ts b/packages/auth/src/core/errors.ts similarity index 100% rename from packages/auth-exp/src/core/errors.ts rename to packages/auth/src/core/errors.ts diff --git a/packages/auth-exp/src/core/index.ts b/packages/auth/src/core/index.ts similarity index 100% rename from packages/auth-exp/src/core/index.ts rename to packages/auth/src/core/index.ts diff --git a/packages/auth-exp/src/core/persistence/in_memory.test.ts b/packages/auth/src/core/persistence/in_memory.test.ts similarity index 100% rename from packages/auth-exp/src/core/persistence/in_memory.test.ts rename to packages/auth/src/core/persistence/in_memory.test.ts diff --git a/packages/auth-exp/src/core/persistence/in_memory.ts b/packages/auth/src/core/persistence/in_memory.ts similarity index 100% rename from packages/auth-exp/src/core/persistence/in_memory.ts rename to packages/auth/src/core/persistence/in_memory.ts diff --git a/packages/auth-exp/src/core/persistence/index.ts b/packages/auth/src/core/persistence/index.ts similarity index 100% rename from packages/auth-exp/src/core/persistence/index.ts rename to packages/auth/src/core/persistence/index.ts diff --git a/packages/auth-exp/src/core/persistence/persistence_user_manager.test.ts b/packages/auth/src/core/persistence/persistence_user_manager.test.ts similarity index 100% rename from packages/auth-exp/src/core/persistence/persistence_user_manager.test.ts rename to packages/auth/src/core/persistence/persistence_user_manager.test.ts diff --git a/packages/auth-exp/src/core/persistence/persistence_user_manager.ts b/packages/auth/src/core/persistence/persistence_user_manager.ts similarity index 100% rename from packages/auth-exp/src/core/persistence/persistence_user_manager.ts rename to packages/auth/src/core/persistence/persistence_user_manager.ts diff --git a/packages/auth-exp/src/core/providers/email.test.ts b/packages/auth/src/core/providers/email.test.ts similarity index 100% rename from packages/auth-exp/src/core/providers/email.test.ts rename to packages/auth/src/core/providers/email.test.ts diff --git a/packages/auth-exp/src/core/providers/email.ts b/packages/auth/src/core/providers/email.ts similarity index 100% rename from packages/auth-exp/src/core/providers/email.ts rename to packages/auth/src/core/providers/email.ts diff --git a/packages/auth-exp/src/core/providers/facebook.test.ts b/packages/auth/src/core/providers/facebook.test.ts similarity index 100% rename from packages/auth-exp/src/core/providers/facebook.test.ts rename to packages/auth/src/core/providers/facebook.test.ts diff --git a/packages/auth-exp/src/core/providers/facebook.ts b/packages/auth/src/core/providers/facebook.ts similarity index 100% rename from packages/auth-exp/src/core/providers/facebook.ts rename to packages/auth/src/core/providers/facebook.ts diff --git a/packages/auth-exp/src/core/providers/federated.test.ts b/packages/auth/src/core/providers/federated.test.ts similarity index 100% rename from packages/auth-exp/src/core/providers/federated.test.ts rename to packages/auth/src/core/providers/federated.test.ts diff --git a/packages/auth-exp/src/core/providers/federated.ts b/packages/auth/src/core/providers/federated.ts similarity index 100% rename from packages/auth-exp/src/core/providers/federated.ts rename to packages/auth/src/core/providers/federated.ts diff --git a/packages/auth-exp/src/core/providers/github.test.ts b/packages/auth/src/core/providers/github.test.ts similarity index 100% rename from packages/auth-exp/src/core/providers/github.test.ts rename to packages/auth/src/core/providers/github.test.ts diff --git a/packages/auth-exp/src/core/providers/github.ts b/packages/auth/src/core/providers/github.ts similarity index 100% rename from packages/auth-exp/src/core/providers/github.ts rename to packages/auth/src/core/providers/github.ts diff --git a/packages/auth-exp/src/core/providers/google.test.ts b/packages/auth/src/core/providers/google.test.ts similarity index 100% rename from packages/auth-exp/src/core/providers/google.test.ts rename to packages/auth/src/core/providers/google.test.ts diff --git a/packages/auth-exp/src/core/providers/google.ts b/packages/auth/src/core/providers/google.ts similarity index 100% rename from packages/auth-exp/src/core/providers/google.ts rename to packages/auth/src/core/providers/google.ts diff --git a/packages/auth-exp/src/core/providers/oauth.test.ts b/packages/auth/src/core/providers/oauth.test.ts similarity index 100% rename from packages/auth-exp/src/core/providers/oauth.test.ts rename to packages/auth/src/core/providers/oauth.test.ts diff --git a/packages/auth-exp/src/core/providers/oauth.ts b/packages/auth/src/core/providers/oauth.ts similarity index 100% rename from packages/auth-exp/src/core/providers/oauth.ts rename to packages/auth/src/core/providers/oauth.ts diff --git a/packages/auth-exp/src/core/providers/saml.test.ts b/packages/auth/src/core/providers/saml.test.ts similarity index 100% rename from packages/auth-exp/src/core/providers/saml.test.ts rename to packages/auth/src/core/providers/saml.test.ts diff --git a/packages/auth-exp/src/core/providers/saml.ts b/packages/auth/src/core/providers/saml.ts similarity index 100% rename from packages/auth-exp/src/core/providers/saml.ts rename to packages/auth/src/core/providers/saml.ts diff --git a/packages/auth-exp/src/core/providers/twitter.test.ts b/packages/auth/src/core/providers/twitter.test.ts similarity index 100% rename from packages/auth-exp/src/core/providers/twitter.test.ts rename to packages/auth/src/core/providers/twitter.test.ts diff --git a/packages/auth-exp/src/core/providers/twitter.ts b/packages/auth/src/core/providers/twitter.ts similarity index 100% rename from packages/auth-exp/src/core/providers/twitter.ts rename to packages/auth/src/core/providers/twitter.ts diff --git a/packages/auth-exp/src/core/strategies/abstract_popup_redirect_operation.test.ts b/packages/auth/src/core/strategies/abstract_popup_redirect_operation.test.ts similarity index 100% rename from packages/auth-exp/src/core/strategies/abstract_popup_redirect_operation.test.ts rename to packages/auth/src/core/strategies/abstract_popup_redirect_operation.test.ts diff --git a/packages/auth-exp/src/core/strategies/abstract_popup_redirect_operation.ts b/packages/auth/src/core/strategies/abstract_popup_redirect_operation.ts similarity index 100% rename from packages/auth-exp/src/core/strategies/abstract_popup_redirect_operation.ts rename to packages/auth/src/core/strategies/abstract_popup_redirect_operation.ts diff --git a/packages/auth-exp/src/core/strategies/action_code_settings.test.ts b/packages/auth/src/core/strategies/action_code_settings.test.ts similarity index 100% rename from packages/auth-exp/src/core/strategies/action_code_settings.test.ts rename to packages/auth/src/core/strategies/action_code_settings.test.ts diff --git a/packages/auth-exp/src/core/strategies/action_code_settings.ts b/packages/auth/src/core/strategies/action_code_settings.ts similarity index 100% rename from packages/auth-exp/src/core/strategies/action_code_settings.ts rename to packages/auth/src/core/strategies/action_code_settings.ts diff --git a/packages/auth-exp/src/core/strategies/anonymous.test.ts b/packages/auth/src/core/strategies/anonymous.test.ts similarity index 100% rename from packages/auth-exp/src/core/strategies/anonymous.test.ts rename to packages/auth/src/core/strategies/anonymous.test.ts diff --git a/packages/auth-exp/src/core/strategies/anonymous.ts b/packages/auth/src/core/strategies/anonymous.ts similarity index 100% rename from packages/auth-exp/src/core/strategies/anonymous.ts rename to packages/auth/src/core/strategies/anonymous.ts diff --git a/packages/auth-exp/src/core/strategies/credential.test.ts b/packages/auth/src/core/strategies/credential.test.ts similarity index 100% rename from packages/auth-exp/src/core/strategies/credential.test.ts rename to packages/auth/src/core/strategies/credential.test.ts diff --git a/packages/auth-exp/src/core/strategies/credential.ts b/packages/auth/src/core/strategies/credential.ts similarity index 100% rename from packages/auth-exp/src/core/strategies/credential.ts rename to packages/auth/src/core/strategies/credential.ts diff --git a/packages/auth-exp/src/core/strategies/custom_token.test.ts b/packages/auth/src/core/strategies/custom_token.test.ts similarity index 100% rename from packages/auth-exp/src/core/strategies/custom_token.test.ts rename to packages/auth/src/core/strategies/custom_token.test.ts diff --git a/packages/auth-exp/src/core/strategies/custom_token.ts b/packages/auth/src/core/strategies/custom_token.ts similarity index 100% rename from packages/auth-exp/src/core/strategies/custom_token.ts rename to packages/auth/src/core/strategies/custom_token.ts diff --git a/packages/auth-exp/src/core/strategies/email.test.ts b/packages/auth/src/core/strategies/email.test.ts similarity index 100% rename from packages/auth-exp/src/core/strategies/email.test.ts rename to packages/auth/src/core/strategies/email.test.ts diff --git a/packages/auth-exp/src/core/strategies/email.ts b/packages/auth/src/core/strategies/email.ts similarity index 100% rename from packages/auth-exp/src/core/strategies/email.ts rename to packages/auth/src/core/strategies/email.ts diff --git a/packages/auth-exp/src/core/strategies/email_and_password.test.ts b/packages/auth/src/core/strategies/email_and_password.test.ts similarity index 100% rename from packages/auth-exp/src/core/strategies/email_and_password.test.ts rename to packages/auth/src/core/strategies/email_and_password.test.ts diff --git a/packages/auth-exp/src/core/strategies/email_and_password.ts b/packages/auth/src/core/strategies/email_and_password.ts similarity index 100% rename from packages/auth-exp/src/core/strategies/email_and_password.ts rename to packages/auth/src/core/strategies/email_and_password.ts diff --git a/packages/auth-exp/src/core/strategies/email_link.test.ts b/packages/auth/src/core/strategies/email_link.test.ts similarity index 100% rename from packages/auth-exp/src/core/strategies/email_link.test.ts rename to packages/auth/src/core/strategies/email_link.test.ts diff --git a/packages/auth-exp/src/core/strategies/email_link.ts b/packages/auth/src/core/strategies/email_link.ts similarity index 100% rename from packages/auth-exp/src/core/strategies/email_link.ts rename to packages/auth/src/core/strategies/email_link.ts diff --git a/packages/auth-exp/src/core/strategies/idp.test.ts b/packages/auth/src/core/strategies/idp.test.ts similarity index 100% rename from packages/auth-exp/src/core/strategies/idp.test.ts rename to packages/auth/src/core/strategies/idp.test.ts diff --git a/packages/auth-exp/src/core/strategies/idp.ts b/packages/auth/src/core/strategies/idp.ts similarity index 100% rename from packages/auth-exp/src/core/strategies/idp.ts rename to packages/auth/src/core/strategies/idp.ts diff --git a/packages/auth-exp/src/core/strategies/redirect.test.ts b/packages/auth/src/core/strategies/redirect.test.ts similarity index 100% rename from packages/auth-exp/src/core/strategies/redirect.test.ts rename to packages/auth/src/core/strategies/redirect.test.ts diff --git a/packages/auth-exp/src/core/strategies/redirect.ts b/packages/auth/src/core/strategies/redirect.ts similarity index 100% rename from packages/auth-exp/src/core/strategies/redirect.ts rename to packages/auth/src/core/strategies/redirect.ts diff --git a/packages/auth-exp/src/core/user/account_info.test.ts b/packages/auth/src/core/user/account_info.test.ts similarity index 100% rename from packages/auth-exp/src/core/user/account_info.test.ts rename to packages/auth/src/core/user/account_info.test.ts diff --git a/packages/auth-exp/src/core/user/account_info.ts b/packages/auth/src/core/user/account_info.ts similarity index 100% rename from packages/auth-exp/src/core/user/account_info.ts rename to packages/auth/src/core/user/account_info.ts diff --git a/packages/auth-exp/src/core/user/additional_user_info.test.ts b/packages/auth/src/core/user/additional_user_info.test.ts similarity index 100% rename from packages/auth-exp/src/core/user/additional_user_info.test.ts rename to packages/auth/src/core/user/additional_user_info.test.ts diff --git a/packages/auth-exp/src/core/user/additional_user_info.ts b/packages/auth/src/core/user/additional_user_info.ts similarity index 100% rename from packages/auth-exp/src/core/user/additional_user_info.ts rename to packages/auth/src/core/user/additional_user_info.ts diff --git a/packages/auth-exp/src/core/user/id_token_result.test.ts b/packages/auth/src/core/user/id_token_result.test.ts similarity index 100% rename from packages/auth-exp/src/core/user/id_token_result.test.ts rename to packages/auth/src/core/user/id_token_result.test.ts diff --git a/packages/auth-exp/src/core/user/id_token_result.ts b/packages/auth/src/core/user/id_token_result.ts similarity index 100% rename from packages/auth-exp/src/core/user/id_token_result.ts rename to packages/auth/src/core/user/id_token_result.ts diff --git a/packages/auth-exp/src/core/user/invalidation.test.ts b/packages/auth/src/core/user/invalidation.test.ts similarity index 100% rename from packages/auth-exp/src/core/user/invalidation.test.ts rename to packages/auth/src/core/user/invalidation.test.ts diff --git a/packages/auth-exp/src/core/user/invalidation.ts b/packages/auth/src/core/user/invalidation.ts similarity index 100% rename from packages/auth-exp/src/core/user/invalidation.ts rename to packages/auth/src/core/user/invalidation.ts diff --git a/packages/auth-exp/src/core/user/link_unlink.test.ts b/packages/auth/src/core/user/link_unlink.test.ts similarity index 100% rename from packages/auth-exp/src/core/user/link_unlink.test.ts rename to packages/auth/src/core/user/link_unlink.test.ts diff --git a/packages/auth-exp/src/core/user/link_unlink.ts b/packages/auth/src/core/user/link_unlink.ts similarity index 100% rename from packages/auth-exp/src/core/user/link_unlink.ts rename to packages/auth/src/core/user/link_unlink.ts diff --git a/packages/auth-exp/src/core/user/proactive_refresh.test.ts b/packages/auth/src/core/user/proactive_refresh.test.ts similarity index 100% rename from packages/auth-exp/src/core/user/proactive_refresh.test.ts rename to packages/auth/src/core/user/proactive_refresh.test.ts diff --git a/packages/auth-exp/src/core/user/proactive_refresh.ts b/packages/auth/src/core/user/proactive_refresh.ts similarity index 100% rename from packages/auth-exp/src/core/user/proactive_refresh.ts rename to packages/auth/src/core/user/proactive_refresh.ts diff --git a/packages/auth-exp/src/core/user/reauthenticate.test.ts b/packages/auth/src/core/user/reauthenticate.test.ts similarity index 100% rename from packages/auth-exp/src/core/user/reauthenticate.test.ts rename to packages/auth/src/core/user/reauthenticate.test.ts diff --git a/packages/auth-exp/src/core/user/reauthenticate.ts b/packages/auth/src/core/user/reauthenticate.ts similarity index 100% rename from packages/auth-exp/src/core/user/reauthenticate.ts rename to packages/auth/src/core/user/reauthenticate.ts diff --git a/packages/auth-exp/src/core/user/reload.test.ts b/packages/auth/src/core/user/reload.test.ts similarity index 100% rename from packages/auth-exp/src/core/user/reload.test.ts rename to packages/auth/src/core/user/reload.test.ts diff --git a/packages/auth-exp/src/core/user/reload.ts b/packages/auth/src/core/user/reload.ts similarity index 100% rename from packages/auth-exp/src/core/user/reload.ts rename to packages/auth/src/core/user/reload.ts diff --git a/packages/auth-exp/src/core/user/token_manager.test.ts b/packages/auth/src/core/user/token_manager.test.ts similarity index 100% rename from packages/auth-exp/src/core/user/token_manager.test.ts rename to packages/auth/src/core/user/token_manager.test.ts diff --git a/packages/auth-exp/src/core/user/token_manager.ts b/packages/auth/src/core/user/token_manager.ts similarity index 100% rename from packages/auth-exp/src/core/user/token_manager.ts rename to packages/auth/src/core/user/token_manager.ts diff --git a/packages/auth-exp/src/core/user/user_credential_impl.test.ts b/packages/auth/src/core/user/user_credential_impl.test.ts similarity index 100% rename from packages/auth-exp/src/core/user/user_credential_impl.test.ts rename to packages/auth/src/core/user/user_credential_impl.test.ts diff --git a/packages/auth-exp/src/core/user/user_credential_impl.ts b/packages/auth/src/core/user/user_credential_impl.ts similarity index 100% rename from packages/auth-exp/src/core/user/user_credential_impl.ts rename to packages/auth/src/core/user/user_credential_impl.ts diff --git a/packages/auth-exp/src/core/user/user_impl.test.ts b/packages/auth/src/core/user/user_impl.test.ts similarity index 100% rename from packages/auth-exp/src/core/user/user_impl.test.ts rename to packages/auth/src/core/user/user_impl.test.ts diff --git a/packages/auth-exp/src/core/user/user_impl.ts b/packages/auth/src/core/user/user_impl.ts similarity index 100% rename from packages/auth-exp/src/core/user/user_impl.ts rename to packages/auth/src/core/user/user_impl.ts diff --git a/packages/auth-exp/src/core/user/user_metadata.ts b/packages/auth/src/core/user/user_metadata.ts similarity index 100% rename from packages/auth-exp/src/core/user/user_metadata.ts rename to packages/auth/src/core/user/user_metadata.ts diff --git a/packages/auth-exp/src/core/util/assert.test.ts b/packages/auth/src/core/util/assert.test.ts similarity index 100% rename from packages/auth-exp/src/core/util/assert.test.ts rename to packages/auth/src/core/util/assert.test.ts diff --git a/packages/auth-exp/src/core/util/assert.ts b/packages/auth/src/core/util/assert.ts similarity index 100% rename from packages/auth-exp/src/core/util/assert.ts rename to packages/auth/src/core/util/assert.ts diff --git a/packages/auth-exp/src/core/util/browser.test.ts b/packages/auth/src/core/util/browser.test.ts similarity index 100% rename from packages/auth-exp/src/core/util/browser.test.ts rename to packages/auth/src/core/util/browser.test.ts diff --git a/packages/auth-exp/src/core/util/browser.ts b/packages/auth/src/core/util/browser.ts similarity index 100% rename from packages/auth-exp/src/core/util/browser.ts rename to packages/auth/src/core/util/browser.ts diff --git a/packages/auth-exp/src/core/util/delay.test.ts b/packages/auth/src/core/util/delay.test.ts similarity index 100% rename from packages/auth-exp/src/core/util/delay.test.ts rename to packages/auth/src/core/util/delay.test.ts diff --git a/packages/auth-exp/src/core/util/delay.ts b/packages/auth/src/core/util/delay.ts similarity index 100% rename from packages/auth-exp/src/core/util/delay.ts rename to packages/auth/src/core/util/delay.ts diff --git a/packages/auth-exp/src/core/util/emulator.test.ts b/packages/auth/src/core/util/emulator.test.ts similarity index 100% rename from packages/auth-exp/src/core/util/emulator.test.ts rename to packages/auth/src/core/util/emulator.test.ts diff --git a/packages/auth-exp/src/core/util/emulator.ts b/packages/auth/src/core/util/emulator.ts similarity index 100% rename from packages/auth-exp/src/core/util/emulator.ts rename to packages/auth/src/core/util/emulator.ts diff --git a/packages/auth-exp/src/core/util/event_id.test.ts b/packages/auth/src/core/util/event_id.test.ts similarity index 100% rename from packages/auth-exp/src/core/util/event_id.test.ts rename to packages/auth/src/core/util/event_id.test.ts diff --git a/packages/auth-exp/src/core/util/event_id.ts b/packages/auth/src/core/util/event_id.ts similarity index 100% rename from packages/auth-exp/src/core/util/event_id.ts rename to packages/auth/src/core/util/event_id.ts diff --git a/packages/auth-exp/src/core/util/fetch_provider.ts b/packages/auth/src/core/util/fetch_provider.ts similarity index 100% rename from packages/auth-exp/src/core/util/fetch_provider.ts rename to packages/auth/src/core/util/fetch_provider.ts diff --git a/packages/auth-exp/src/core/util/handler.ts b/packages/auth/src/core/util/handler.ts similarity index 100% rename from packages/auth-exp/src/core/util/handler.ts rename to packages/auth/src/core/util/handler.ts diff --git a/packages/auth-exp/src/core/util/instantiator.test.ts b/packages/auth/src/core/util/instantiator.test.ts similarity index 100% rename from packages/auth-exp/src/core/util/instantiator.test.ts rename to packages/auth/src/core/util/instantiator.test.ts diff --git a/packages/auth-exp/src/core/util/instantiator.ts b/packages/auth/src/core/util/instantiator.ts similarity index 100% rename from packages/auth-exp/src/core/util/instantiator.ts rename to packages/auth/src/core/util/instantiator.ts diff --git a/packages/auth-exp/src/core/util/location.ts b/packages/auth/src/core/util/location.ts similarity index 100% rename from packages/auth-exp/src/core/util/location.ts rename to packages/auth/src/core/util/location.ts diff --git a/packages/auth-exp/src/core/util/log.ts b/packages/auth/src/core/util/log.ts similarity index 100% rename from packages/auth-exp/src/core/util/log.ts rename to packages/auth/src/core/util/log.ts diff --git a/packages/auth-exp/src/core/util/navigator.ts b/packages/auth/src/core/util/navigator.ts similarity index 100% rename from packages/auth-exp/src/core/util/navigator.ts rename to packages/auth/src/core/util/navigator.ts diff --git a/packages/auth-exp/src/core/util/providers.ts b/packages/auth/src/core/util/providers.ts similarity index 100% rename from packages/auth-exp/src/core/util/providers.ts rename to packages/auth/src/core/util/providers.ts diff --git a/packages/auth-exp/src/core/util/resolver.ts b/packages/auth/src/core/util/resolver.ts similarity index 100% rename from packages/auth-exp/src/core/util/resolver.ts rename to packages/auth/src/core/util/resolver.ts diff --git a/packages/auth-exp/src/core/util/time.ts b/packages/auth/src/core/util/time.ts similarity index 100% rename from packages/auth-exp/src/core/util/time.ts rename to packages/auth/src/core/util/time.ts diff --git a/packages/auth-exp/src/core/util/validate_origin.test.ts b/packages/auth/src/core/util/validate_origin.test.ts similarity index 100% rename from packages/auth-exp/src/core/util/validate_origin.test.ts rename to packages/auth/src/core/util/validate_origin.test.ts diff --git a/packages/auth-exp/src/core/util/validate_origin.ts b/packages/auth/src/core/util/validate_origin.ts similarity index 100% rename from packages/auth-exp/src/core/util/validate_origin.ts rename to packages/auth/src/core/util/validate_origin.ts diff --git a/packages/auth-exp/src/core/util/version.test.ts b/packages/auth/src/core/util/version.test.ts similarity index 100% rename from packages/auth-exp/src/core/util/version.test.ts rename to packages/auth/src/core/util/version.test.ts diff --git a/packages/auth-exp/src/core/util/version.ts b/packages/auth/src/core/util/version.ts similarity index 100% rename from packages/auth-exp/src/core/util/version.ts rename to packages/auth/src/core/util/version.ts diff --git a/packages/auth-exp/src/index.ts b/packages/auth/src/index.ts similarity index 100% rename from packages/auth-exp/src/index.ts rename to packages/auth/src/index.ts diff --git a/packages/auth-exp/src/mfa/index.ts b/packages/auth/src/mfa/index.ts similarity index 100% rename from packages/auth-exp/src/mfa/index.ts rename to packages/auth/src/mfa/index.ts diff --git a/packages/auth-exp/src/mfa/mfa_assertion.ts b/packages/auth/src/mfa/mfa_assertion.ts similarity index 100% rename from packages/auth-exp/src/mfa/mfa_assertion.ts rename to packages/auth/src/mfa/mfa_assertion.ts diff --git a/packages/auth-exp/src/mfa/mfa_error.ts b/packages/auth/src/mfa/mfa_error.ts similarity index 100% rename from packages/auth-exp/src/mfa/mfa_error.ts rename to packages/auth/src/mfa/mfa_error.ts diff --git a/packages/auth-exp/src/mfa/mfa_info.test.ts b/packages/auth/src/mfa/mfa_info.test.ts similarity index 100% rename from packages/auth-exp/src/mfa/mfa_info.test.ts rename to packages/auth/src/mfa/mfa_info.test.ts diff --git a/packages/auth-exp/src/mfa/mfa_info.ts b/packages/auth/src/mfa/mfa_info.ts similarity index 100% rename from packages/auth-exp/src/mfa/mfa_info.ts rename to packages/auth/src/mfa/mfa_info.ts diff --git a/packages/auth-exp/src/mfa/mfa_resolver.test.ts b/packages/auth/src/mfa/mfa_resolver.test.ts similarity index 100% rename from packages/auth-exp/src/mfa/mfa_resolver.test.ts rename to packages/auth/src/mfa/mfa_resolver.test.ts diff --git a/packages/auth-exp/src/mfa/mfa_resolver.ts b/packages/auth/src/mfa/mfa_resolver.ts similarity index 100% rename from packages/auth-exp/src/mfa/mfa_resolver.ts rename to packages/auth/src/mfa/mfa_resolver.ts diff --git a/packages/auth-exp/src/mfa/mfa_session.test.ts b/packages/auth/src/mfa/mfa_session.test.ts similarity index 100% rename from packages/auth-exp/src/mfa/mfa_session.test.ts rename to packages/auth/src/mfa/mfa_session.test.ts diff --git a/packages/auth-exp/src/mfa/mfa_session.ts b/packages/auth/src/mfa/mfa_session.ts similarity index 100% rename from packages/auth-exp/src/mfa/mfa_session.ts rename to packages/auth/src/mfa/mfa_session.ts diff --git a/packages/auth-exp/src/mfa/mfa_user.test.ts b/packages/auth/src/mfa/mfa_user.test.ts similarity index 100% rename from packages/auth-exp/src/mfa/mfa_user.test.ts rename to packages/auth/src/mfa/mfa_user.test.ts diff --git a/packages/auth-exp/src/mfa/mfa_user.ts b/packages/auth/src/mfa/mfa_user.ts similarity index 100% rename from packages/auth-exp/src/mfa/mfa_user.ts rename to packages/auth/src/mfa/mfa_user.ts diff --git a/packages/auth-exp/src/model/application_verifier.ts b/packages/auth/src/model/application_verifier.ts similarity index 100% rename from packages/auth-exp/src/model/application_verifier.ts rename to packages/auth/src/model/application_verifier.ts diff --git a/packages/auth-exp/src/model/auth.ts b/packages/auth/src/model/auth.ts similarity index 100% rename from packages/auth-exp/src/model/auth.ts rename to packages/auth/src/model/auth.ts diff --git a/packages/auth-exp/src/model/enum_maps.ts b/packages/auth/src/model/enum_maps.ts similarity index 100% rename from packages/auth-exp/src/model/enum_maps.ts rename to packages/auth/src/model/enum_maps.ts diff --git a/packages/auth-exp/src/model/enums.ts b/packages/auth/src/model/enums.ts similarity index 100% rename from packages/auth-exp/src/model/enums.ts rename to packages/auth/src/model/enums.ts diff --git a/packages/auth-exp/src/model/id_token.ts b/packages/auth/src/model/id_token.ts similarity index 100% rename from packages/auth-exp/src/model/id_token.ts rename to packages/auth/src/model/id_token.ts diff --git a/packages/auth-exp/src/model/popup_redirect.ts b/packages/auth/src/model/popup_redirect.ts similarity index 100% rename from packages/auth-exp/src/model/popup_redirect.ts rename to packages/auth/src/model/popup_redirect.ts diff --git a/packages/auth-exp/src/model/public_types.ts b/packages/auth/src/model/public_types.ts similarity index 100% rename from packages/auth-exp/src/model/public_types.ts rename to packages/auth/src/model/public_types.ts diff --git a/packages/auth-exp/src/model/user.ts b/packages/auth/src/model/user.ts similarity index 100% rename from packages/auth-exp/src/model/user.ts rename to packages/auth/src/model/user.ts diff --git a/packages/auth-exp/src/platform_browser/auth.test.ts b/packages/auth/src/platform_browser/auth.test.ts similarity index 100% rename from packages/auth-exp/src/platform_browser/auth.test.ts rename to packages/auth/src/platform_browser/auth.test.ts diff --git a/packages/auth-exp/src/platform_browser/auth_window.ts b/packages/auth/src/platform_browser/auth_window.ts similarity index 100% rename from packages/auth-exp/src/platform_browser/auth_window.ts rename to packages/auth/src/platform_browser/auth_window.ts diff --git a/packages/auth-exp/src/platform_browser/iframe/gapi.iframes.ts b/packages/auth/src/platform_browser/iframe/gapi.iframes.ts similarity index 100% rename from packages/auth-exp/src/platform_browser/iframe/gapi.iframes.ts rename to packages/auth/src/platform_browser/iframe/gapi.iframes.ts diff --git a/packages/auth-exp/src/platform_browser/iframe/gapi.test.ts b/packages/auth/src/platform_browser/iframe/gapi.test.ts similarity index 100% rename from packages/auth-exp/src/platform_browser/iframe/gapi.test.ts rename to packages/auth/src/platform_browser/iframe/gapi.test.ts diff --git a/packages/auth-exp/src/platform_browser/iframe/gapi.ts b/packages/auth/src/platform_browser/iframe/gapi.ts similarity index 100% rename from packages/auth-exp/src/platform_browser/iframe/gapi.ts rename to packages/auth/src/platform_browser/iframe/gapi.ts diff --git a/packages/auth-exp/src/platform_browser/iframe/iframe.test.ts b/packages/auth/src/platform_browser/iframe/iframe.test.ts similarity index 100% rename from packages/auth-exp/src/platform_browser/iframe/iframe.test.ts rename to packages/auth/src/platform_browser/iframe/iframe.test.ts diff --git a/packages/auth-exp/src/platform_browser/iframe/iframe.ts b/packages/auth/src/platform_browser/iframe/iframe.ts similarity index 100% rename from packages/auth-exp/src/platform_browser/iframe/iframe.ts rename to packages/auth/src/platform_browser/iframe/iframe.ts diff --git a/packages/auth-exp/src/platform_browser/load_js.test.ts b/packages/auth/src/platform_browser/load_js.test.ts similarity index 100% rename from packages/auth-exp/src/platform_browser/load_js.test.ts rename to packages/auth/src/platform_browser/load_js.test.ts diff --git a/packages/auth-exp/src/platform_browser/load_js.ts b/packages/auth/src/platform_browser/load_js.ts similarity index 100% rename from packages/auth-exp/src/platform_browser/load_js.ts rename to packages/auth/src/platform_browser/load_js.ts diff --git a/packages/auth-exp/src/platform_browser/messagechannel/index.ts b/packages/auth/src/platform_browser/messagechannel/index.ts similarity index 100% rename from packages/auth-exp/src/platform_browser/messagechannel/index.ts rename to packages/auth/src/platform_browser/messagechannel/index.ts diff --git a/packages/auth-exp/src/platform_browser/messagechannel/promise.test.ts b/packages/auth/src/platform_browser/messagechannel/promise.test.ts similarity index 100% rename from packages/auth-exp/src/platform_browser/messagechannel/promise.test.ts rename to packages/auth/src/platform_browser/messagechannel/promise.test.ts diff --git a/packages/auth-exp/src/platform_browser/messagechannel/promise.ts b/packages/auth/src/platform_browser/messagechannel/promise.ts similarity index 100% rename from packages/auth-exp/src/platform_browser/messagechannel/promise.ts rename to packages/auth/src/platform_browser/messagechannel/promise.ts diff --git a/packages/auth-exp/src/platform_browser/messagechannel/receiver.test.ts b/packages/auth/src/platform_browser/messagechannel/receiver.test.ts similarity index 100% rename from packages/auth-exp/src/platform_browser/messagechannel/receiver.test.ts rename to packages/auth/src/platform_browser/messagechannel/receiver.test.ts diff --git a/packages/auth-exp/src/platform_browser/messagechannel/receiver.ts b/packages/auth/src/platform_browser/messagechannel/receiver.ts similarity index 100% rename from packages/auth-exp/src/platform_browser/messagechannel/receiver.ts rename to packages/auth/src/platform_browser/messagechannel/receiver.ts diff --git a/packages/auth-exp/src/platform_browser/messagechannel/sender.test.ts b/packages/auth/src/platform_browser/messagechannel/sender.test.ts similarity index 100% rename from packages/auth-exp/src/platform_browser/messagechannel/sender.test.ts rename to packages/auth/src/platform_browser/messagechannel/sender.test.ts diff --git a/packages/auth-exp/src/platform_browser/messagechannel/sender.ts b/packages/auth/src/platform_browser/messagechannel/sender.ts similarity index 100% rename from packages/auth-exp/src/platform_browser/messagechannel/sender.ts rename to packages/auth/src/platform_browser/messagechannel/sender.ts diff --git a/packages/auth-exp/src/platform_browser/mfa/assertions/phone.test.ts b/packages/auth/src/platform_browser/mfa/assertions/phone.test.ts similarity index 100% rename from packages/auth-exp/src/platform_browser/mfa/assertions/phone.test.ts rename to packages/auth/src/platform_browser/mfa/assertions/phone.test.ts diff --git a/packages/auth-exp/src/platform_browser/mfa/assertions/phone.ts b/packages/auth/src/platform_browser/mfa/assertions/phone.ts similarity index 100% rename from packages/auth-exp/src/platform_browser/mfa/assertions/phone.ts rename to packages/auth/src/platform_browser/mfa/assertions/phone.ts diff --git a/packages/auth-exp/src/platform_browser/persistence/browser.ts b/packages/auth/src/platform_browser/persistence/browser.ts similarity index 100% rename from packages/auth-exp/src/platform_browser/persistence/browser.ts rename to packages/auth/src/platform_browser/persistence/browser.ts diff --git a/packages/auth-exp/src/platform_browser/persistence/indexed_db.test.ts b/packages/auth/src/platform_browser/persistence/indexed_db.test.ts similarity index 100% rename from packages/auth-exp/src/platform_browser/persistence/indexed_db.test.ts rename to packages/auth/src/platform_browser/persistence/indexed_db.test.ts diff --git a/packages/auth-exp/src/platform_browser/persistence/indexed_db.ts b/packages/auth/src/platform_browser/persistence/indexed_db.ts similarity index 100% rename from packages/auth-exp/src/platform_browser/persistence/indexed_db.ts rename to packages/auth/src/platform_browser/persistence/indexed_db.ts diff --git a/packages/auth-exp/src/platform_browser/persistence/local_storage.test.ts b/packages/auth/src/platform_browser/persistence/local_storage.test.ts similarity index 100% rename from packages/auth-exp/src/platform_browser/persistence/local_storage.test.ts rename to packages/auth/src/platform_browser/persistence/local_storage.test.ts diff --git a/packages/auth-exp/src/platform_browser/persistence/local_storage.ts b/packages/auth/src/platform_browser/persistence/local_storage.ts similarity index 100% rename from packages/auth-exp/src/platform_browser/persistence/local_storage.ts rename to packages/auth/src/platform_browser/persistence/local_storage.ts diff --git a/packages/auth-exp/src/platform_browser/persistence/session_storage.test.ts b/packages/auth/src/platform_browser/persistence/session_storage.test.ts similarity index 100% rename from packages/auth-exp/src/platform_browser/persistence/session_storage.test.ts rename to packages/auth/src/platform_browser/persistence/session_storage.test.ts diff --git a/packages/auth-exp/src/platform_browser/persistence/session_storage.ts b/packages/auth/src/platform_browser/persistence/session_storage.ts similarity index 100% rename from packages/auth-exp/src/platform_browser/persistence/session_storage.ts rename to packages/auth/src/platform_browser/persistence/session_storage.ts diff --git a/packages/auth-exp/src/platform_browser/popup_redirect.test.ts b/packages/auth/src/platform_browser/popup_redirect.test.ts similarity index 100% rename from packages/auth-exp/src/platform_browser/popup_redirect.test.ts rename to packages/auth/src/platform_browser/popup_redirect.test.ts diff --git a/packages/auth-exp/src/platform_browser/popup_redirect.ts b/packages/auth/src/platform_browser/popup_redirect.ts similarity index 100% rename from packages/auth-exp/src/platform_browser/popup_redirect.ts rename to packages/auth/src/platform_browser/popup_redirect.ts diff --git a/packages/auth-exp/src/platform_browser/providers/phone.test.ts b/packages/auth/src/platform_browser/providers/phone.test.ts similarity index 100% rename from packages/auth-exp/src/platform_browser/providers/phone.test.ts rename to packages/auth/src/platform_browser/providers/phone.test.ts diff --git a/packages/auth-exp/src/platform_browser/providers/phone.ts b/packages/auth/src/platform_browser/providers/phone.ts similarity index 100% rename from packages/auth-exp/src/platform_browser/providers/phone.ts rename to packages/auth/src/platform_browser/providers/phone.ts diff --git a/packages/auth-exp/src/platform_browser/recaptcha/recaptcha.ts b/packages/auth/src/platform_browser/recaptcha/recaptcha.ts similarity index 100% rename from packages/auth-exp/src/platform_browser/recaptcha/recaptcha.ts rename to packages/auth/src/platform_browser/recaptcha/recaptcha.ts diff --git a/packages/auth-exp/src/platform_browser/recaptcha/recaptcha_loader.test.ts b/packages/auth/src/platform_browser/recaptcha/recaptcha_loader.test.ts similarity index 100% rename from packages/auth-exp/src/platform_browser/recaptcha/recaptcha_loader.test.ts rename to packages/auth/src/platform_browser/recaptcha/recaptcha_loader.test.ts diff --git a/packages/auth-exp/src/platform_browser/recaptcha/recaptcha_loader.ts b/packages/auth/src/platform_browser/recaptcha/recaptcha_loader.ts similarity index 100% rename from packages/auth-exp/src/platform_browser/recaptcha/recaptcha_loader.ts rename to packages/auth/src/platform_browser/recaptcha/recaptcha_loader.ts diff --git a/packages/auth-exp/src/platform_browser/recaptcha/recaptcha_mock.test.ts b/packages/auth/src/platform_browser/recaptcha/recaptcha_mock.test.ts similarity index 100% rename from packages/auth-exp/src/platform_browser/recaptcha/recaptcha_mock.test.ts rename to packages/auth/src/platform_browser/recaptcha/recaptcha_mock.test.ts diff --git a/packages/auth-exp/src/platform_browser/recaptcha/recaptcha_mock.ts b/packages/auth/src/platform_browser/recaptcha/recaptcha_mock.ts similarity index 100% rename from packages/auth-exp/src/platform_browser/recaptcha/recaptcha_mock.ts rename to packages/auth/src/platform_browser/recaptcha/recaptcha_mock.ts diff --git a/packages/auth-exp/src/platform_browser/recaptcha/recaptcha_verifier.test.ts b/packages/auth/src/platform_browser/recaptcha/recaptcha_verifier.test.ts similarity index 100% rename from packages/auth-exp/src/platform_browser/recaptcha/recaptcha_verifier.test.ts rename to packages/auth/src/platform_browser/recaptcha/recaptcha_verifier.test.ts diff --git a/packages/auth-exp/src/platform_browser/recaptcha/recaptcha_verifier.ts b/packages/auth/src/platform_browser/recaptcha/recaptcha_verifier.ts similarity index 100% rename from packages/auth-exp/src/platform_browser/recaptcha/recaptcha_verifier.ts rename to packages/auth/src/platform_browser/recaptcha/recaptcha_verifier.ts diff --git a/packages/auth-exp/src/platform_browser/strategies/phone.test.ts b/packages/auth/src/platform_browser/strategies/phone.test.ts similarity index 100% rename from packages/auth-exp/src/platform_browser/strategies/phone.test.ts rename to packages/auth/src/platform_browser/strategies/phone.test.ts diff --git a/packages/auth-exp/src/platform_browser/strategies/phone.ts b/packages/auth/src/platform_browser/strategies/phone.ts similarity index 100% rename from packages/auth-exp/src/platform_browser/strategies/phone.ts rename to packages/auth/src/platform_browser/strategies/phone.ts diff --git a/packages/auth-exp/src/platform_browser/strategies/popup.test.ts b/packages/auth/src/platform_browser/strategies/popup.test.ts similarity index 100% rename from packages/auth-exp/src/platform_browser/strategies/popup.test.ts rename to packages/auth/src/platform_browser/strategies/popup.test.ts diff --git a/packages/auth-exp/src/platform_browser/strategies/popup.ts b/packages/auth/src/platform_browser/strategies/popup.ts similarity index 100% rename from packages/auth-exp/src/platform_browser/strategies/popup.ts rename to packages/auth/src/platform_browser/strategies/popup.ts diff --git a/packages/auth-exp/src/platform_browser/strategies/redirect.test.ts b/packages/auth/src/platform_browser/strategies/redirect.test.ts similarity index 100% rename from packages/auth-exp/src/platform_browser/strategies/redirect.test.ts rename to packages/auth/src/platform_browser/strategies/redirect.test.ts diff --git a/packages/auth-exp/src/platform_browser/strategies/redirect.ts b/packages/auth/src/platform_browser/strategies/redirect.ts similarity index 100% rename from packages/auth-exp/src/platform_browser/strategies/redirect.ts rename to packages/auth/src/platform_browser/strategies/redirect.ts diff --git a/packages/auth-exp/src/platform_browser/util/popup.test.ts b/packages/auth/src/platform_browser/util/popup.test.ts similarity index 100% rename from packages/auth-exp/src/platform_browser/util/popup.test.ts rename to packages/auth/src/platform_browser/util/popup.test.ts diff --git a/packages/auth-exp/src/platform_browser/util/popup.ts b/packages/auth/src/platform_browser/util/popup.ts similarity index 100% rename from packages/auth-exp/src/platform_browser/util/popup.ts rename to packages/auth/src/platform_browser/util/popup.ts diff --git a/packages/auth-exp/src/platform_browser/util/worker.ts b/packages/auth/src/platform_browser/util/worker.ts similarity index 100% rename from packages/auth-exp/src/platform_browser/util/worker.ts rename to packages/auth/src/platform_browser/util/worker.ts diff --git a/packages/auth-exp/src/platform_cordova/plugins.ts b/packages/auth/src/platform_cordova/plugins.ts similarity index 100% rename from packages/auth-exp/src/platform_cordova/plugins.ts rename to packages/auth/src/platform_cordova/plugins.ts diff --git a/packages/auth-exp/src/platform_cordova/popup_redirect/events.test.ts b/packages/auth/src/platform_cordova/popup_redirect/events.test.ts similarity index 100% rename from packages/auth-exp/src/platform_cordova/popup_redirect/events.test.ts rename to packages/auth/src/platform_cordova/popup_redirect/events.test.ts diff --git a/packages/auth-exp/src/platform_cordova/popup_redirect/events.ts b/packages/auth/src/platform_cordova/popup_redirect/events.ts similarity index 100% rename from packages/auth-exp/src/platform_cordova/popup_redirect/events.ts rename to packages/auth/src/platform_cordova/popup_redirect/events.ts diff --git a/packages/auth-exp/src/platform_cordova/popup_redirect/popup_redirect.test.ts b/packages/auth/src/platform_cordova/popup_redirect/popup_redirect.test.ts similarity index 100% rename from packages/auth-exp/src/platform_cordova/popup_redirect/popup_redirect.test.ts rename to packages/auth/src/platform_cordova/popup_redirect/popup_redirect.test.ts diff --git a/packages/auth-exp/src/platform_cordova/popup_redirect/popup_redirect.ts b/packages/auth/src/platform_cordova/popup_redirect/popup_redirect.ts similarity index 100% rename from packages/auth-exp/src/platform_cordova/popup_redirect/popup_redirect.ts rename to packages/auth/src/platform_cordova/popup_redirect/popup_redirect.ts diff --git a/packages/auth-exp/src/platform_cordova/popup_redirect/utils.test.ts b/packages/auth/src/platform_cordova/popup_redirect/utils.test.ts similarity index 100% rename from packages/auth-exp/src/platform_cordova/popup_redirect/utils.test.ts rename to packages/auth/src/platform_cordova/popup_redirect/utils.test.ts diff --git a/packages/auth-exp/src/platform_cordova/popup_redirect/utils.ts b/packages/auth/src/platform_cordova/popup_redirect/utils.ts similarity index 100% rename from packages/auth-exp/src/platform_cordova/popup_redirect/utils.ts rename to packages/auth/src/platform_cordova/popup_redirect/utils.ts diff --git a/packages/auth-exp/src/platform_cordova/strategies/redirect.ts b/packages/auth/src/platform_cordova/strategies/redirect.ts similarity index 100% rename from packages/auth-exp/src/platform_cordova/strategies/redirect.ts rename to packages/auth/src/platform_cordova/strategies/redirect.ts diff --git a/packages/auth-exp/src/platform_react_native/persistence/react_native.test.ts b/packages/auth/src/platform_react_native/persistence/react_native.test.ts similarity index 100% rename from packages/auth-exp/src/platform_react_native/persistence/react_native.test.ts rename to packages/auth/src/platform_react_native/persistence/react_native.test.ts diff --git a/packages/auth-exp/src/platform_react_native/persistence/react_native.ts b/packages/auth/src/platform_react_native/persistence/react_native.ts similarity index 100% rename from packages/auth-exp/src/platform_react_native/persistence/react_native.ts rename to packages/auth/src/platform_react_native/persistence/react_native.ts diff --git a/packages/auth-exp/src/platform_react_native/react-native.d.ts b/packages/auth/src/platform_react_native/react-native.d.ts similarity index 100% rename from packages/auth-exp/src/platform_react_native/react-native.d.ts rename to packages/auth/src/platform_react_native/react-native.d.ts diff --git a/packages/auth-exp/test/helpers/api/helper.ts b/packages/auth/test/helpers/api/helper.ts similarity index 100% rename from packages/auth-exp/test/helpers/api/helper.ts rename to packages/auth/test/helpers/api/helper.ts diff --git a/packages/auth-exp/test/helpers/delay.ts b/packages/auth/test/helpers/delay.ts similarity index 100% rename from packages/auth-exp/test/helpers/delay.ts rename to packages/auth/test/helpers/delay.ts diff --git a/packages/auth-exp/test/helpers/fake_service_worker.ts b/packages/auth/test/helpers/fake_service_worker.ts similarity index 100% rename from packages/auth-exp/test/helpers/fake_service_worker.ts rename to packages/auth/test/helpers/fake_service_worker.ts diff --git a/packages/auth-exp/test/helpers/id_token_response.ts b/packages/auth/test/helpers/id_token_response.ts similarity index 100% rename from packages/auth-exp/test/helpers/id_token_response.ts rename to packages/auth/test/helpers/id_token_response.ts diff --git a/packages/auth-exp/test/helpers/iframe_event.ts b/packages/auth/test/helpers/iframe_event.ts similarity index 100% rename from packages/auth-exp/test/helpers/iframe_event.ts rename to packages/auth/test/helpers/iframe_event.ts diff --git a/packages/auth-exp/test/helpers/integration/emulator_rest_helpers.ts b/packages/auth/test/helpers/integration/emulator_rest_helpers.ts similarity index 100% rename from packages/auth-exp/test/helpers/integration/emulator_rest_helpers.ts rename to packages/auth/test/helpers/integration/emulator_rest_helpers.ts diff --git a/packages/auth-exp/test/helpers/integration/helpers.ts b/packages/auth/test/helpers/integration/helpers.ts similarity index 100% rename from packages/auth-exp/test/helpers/integration/helpers.ts rename to packages/auth/test/helpers/integration/helpers.ts diff --git a/packages/auth-exp/test/helpers/integration/settings.ts b/packages/auth/test/helpers/integration/settings.ts similarity index 100% rename from packages/auth-exp/test/helpers/integration/settings.ts rename to packages/auth/test/helpers/integration/settings.ts diff --git a/packages/auth-exp/test/helpers/jwt.ts b/packages/auth/test/helpers/jwt.ts similarity index 100% rename from packages/auth-exp/test/helpers/jwt.ts rename to packages/auth/test/helpers/jwt.ts diff --git a/packages/auth-exp/test/helpers/mock_auth.ts b/packages/auth/test/helpers/mock_auth.ts similarity index 100% rename from packages/auth-exp/test/helpers/mock_auth.ts rename to packages/auth/test/helpers/mock_auth.ts diff --git a/packages/auth-exp/test/helpers/mock_auth_credential.ts b/packages/auth/test/helpers/mock_auth_credential.ts similarity index 100% rename from packages/auth-exp/test/helpers/mock_auth_credential.ts rename to packages/auth/test/helpers/mock_auth_credential.ts diff --git a/packages/auth-exp/test/helpers/mock_fetch.test.ts b/packages/auth/test/helpers/mock_fetch.test.ts similarity index 100% rename from packages/auth-exp/test/helpers/mock_fetch.test.ts rename to packages/auth/test/helpers/mock_fetch.test.ts diff --git a/packages/auth-exp/test/helpers/mock_fetch.ts b/packages/auth/test/helpers/mock_fetch.ts similarity index 100% rename from packages/auth-exp/test/helpers/mock_fetch.ts rename to packages/auth/test/helpers/mock_fetch.ts diff --git a/packages/auth-exp/test/helpers/mock_popup_redirect_resolver.ts b/packages/auth/test/helpers/mock_popup_redirect_resolver.ts similarity index 100% rename from packages/auth-exp/test/helpers/mock_popup_redirect_resolver.ts rename to packages/auth/test/helpers/mock_popup_redirect_resolver.ts diff --git a/packages/auth-exp/test/helpers/redirect_persistence.ts b/packages/auth/test/helpers/redirect_persistence.ts similarity index 100% rename from packages/auth-exp/test/helpers/redirect_persistence.ts rename to packages/auth/test/helpers/redirect_persistence.ts diff --git a/packages/auth-exp/test/helpers/timeout_stub.ts b/packages/auth/test/helpers/timeout_stub.ts similarity index 100% rename from packages/auth-exp/test/helpers/timeout_stub.ts rename to packages/auth/test/helpers/timeout_stub.ts diff --git a/packages/auth-exp/test/integration/flows/anonymous.test.ts b/packages/auth/test/integration/flows/anonymous.test.ts similarity index 100% rename from packages/auth-exp/test/integration/flows/anonymous.test.ts rename to packages/auth/test/integration/flows/anonymous.test.ts diff --git a/packages/auth-exp/test/integration/flows/custom.local.test.ts b/packages/auth/test/integration/flows/custom.local.test.ts similarity index 100% rename from packages/auth-exp/test/integration/flows/custom.local.test.ts rename to packages/auth/test/integration/flows/custom.local.test.ts diff --git a/packages/auth-exp/test/integration/flows/email.test.ts b/packages/auth/test/integration/flows/email.test.ts similarity index 100% rename from packages/auth-exp/test/integration/flows/email.test.ts rename to packages/auth/test/integration/flows/email.test.ts diff --git a/packages/auth-exp/test/integration/flows/idp.local.test.ts b/packages/auth/test/integration/flows/idp.local.test.ts similarity index 100% rename from packages/auth-exp/test/integration/flows/idp.local.test.ts rename to packages/auth/test/integration/flows/idp.local.test.ts diff --git a/packages/auth-exp/test/integration/flows/oob.local.test.ts b/packages/auth/test/integration/flows/oob.local.test.ts similarity index 100% rename from packages/auth-exp/test/integration/flows/oob.local.test.ts rename to packages/auth/test/integration/flows/oob.local.test.ts diff --git a/packages/auth-exp/test/integration/flows/phone.test.ts b/packages/auth/test/integration/flows/phone.test.ts similarity index 100% rename from packages/auth-exp/test/integration/flows/phone.test.ts rename to packages/auth/test/integration/flows/phone.test.ts diff --git a/packages/auth-exp/test/integration/webdriver/anonymous.test.ts b/packages/auth/test/integration/webdriver/anonymous.test.ts similarity index 100% rename from packages/auth-exp/test/integration/webdriver/anonymous.test.ts rename to packages/auth/test/integration/webdriver/anonymous.test.ts diff --git a/packages/auth-exp/test/integration/webdriver/compat/firebaseui.test.ts b/packages/auth/test/integration/webdriver/compat/firebaseui.test.ts similarity index 100% rename from packages/auth-exp/test/integration/webdriver/compat/firebaseui.test.ts rename to packages/auth/test/integration/webdriver/compat/firebaseui.test.ts diff --git a/packages/auth-exp/test/integration/webdriver/persistence.test.ts b/packages/auth/test/integration/webdriver/persistence.test.ts similarity index 100% rename from packages/auth-exp/test/integration/webdriver/persistence.test.ts rename to packages/auth/test/integration/webdriver/persistence.test.ts diff --git a/packages/auth-exp/test/integration/webdriver/popup.test.ts b/packages/auth/test/integration/webdriver/popup.test.ts similarity index 100% rename from packages/auth-exp/test/integration/webdriver/popup.test.ts rename to packages/auth/test/integration/webdriver/popup.test.ts diff --git a/packages/auth-exp/test/integration/webdriver/redirect.test.ts b/packages/auth/test/integration/webdriver/redirect.test.ts similarity index 100% rename from packages/auth-exp/test/integration/webdriver/redirect.test.ts rename to packages/auth/test/integration/webdriver/redirect.test.ts diff --git a/packages/auth-exp/test/integration/webdriver/static/anonymous.js b/packages/auth/test/integration/webdriver/static/anonymous.js similarity index 100% rename from packages/auth-exp/test/integration/webdriver/static/anonymous.js rename to packages/auth/test/integration/webdriver/static/anonymous.js diff --git a/packages/auth-exp/test/integration/webdriver/static/core.js b/packages/auth/test/integration/webdriver/static/core.js similarity index 100% rename from packages/auth-exp/test/integration/webdriver/static/core.js rename to packages/auth/test/integration/webdriver/static/core.js diff --git a/packages/auth-exp/test/integration/webdriver/static/email.js b/packages/auth/test/integration/webdriver/static/email.js similarity index 100% rename from packages/auth-exp/test/integration/webdriver/static/email.js rename to packages/auth/test/integration/webdriver/static/email.js diff --git a/packages/auth-exp/test/integration/webdriver/static/index.html b/packages/auth/test/integration/webdriver/static/index.html similarity index 100% rename from packages/auth-exp/test/integration/webdriver/static/index.html rename to packages/auth/test/integration/webdriver/static/index.html diff --git a/packages/auth-exp/test/integration/webdriver/static/index.js b/packages/auth/test/integration/webdriver/static/index.js similarity index 100% rename from packages/auth-exp/test/integration/webdriver/static/index.js rename to packages/auth/test/integration/webdriver/static/index.js diff --git a/packages/auth-exp/test/integration/webdriver/static/persistence.js b/packages/auth/test/integration/webdriver/static/persistence.js similarity index 100% rename from packages/auth-exp/test/integration/webdriver/static/persistence.js rename to packages/auth/test/integration/webdriver/static/persistence.js diff --git a/packages/auth-exp/test/integration/webdriver/static/popup.js b/packages/auth/test/integration/webdriver/static/popup.js similarity index 100% rename from packages/auth-exp/test/integration/webdriver/static/popup.js rename to packages/auth/test/integration/webdriver/static/popup.js diff --git a/packages/auth-exp/test/integration/webdriver/static/redirect.js b/packages/auth/test/integration/webdriver/static/redirect.js similarity index 100% rename from packages/auth-exp/test/integration/webdriver/static/redirect.js rename to packages/auth/test/integration/webdriver/static/redirect.js diff --git a/packages/auth-exp/test/integration/webdriver/static/rollup.config.js b/packages/auth/test/integration/webdriver/static/rollup.config.js similarity index 100% rename from packages/auth-exp/test/integration/webdriver/static/rollup.config.js rename to packages/auth/test/integration/webdriver/static/rollup.config.js diff --git a/packages/auth-exp/test/integration/webdriver/util/auth_driver.ts b/packages/auth/test/integration/webdriver/util/auth_driver.ts similarity index 100% rename from packages/auth-exp/test/integration/webdriver/util/auth_driver.ts rename to packages/auth/test/integration/webdriver/util/auth_driver.ts diff --git a/packages/auth-exp/test/integration/webdriver/util/functions.ts b/packages/auth/test/integration/webdriver/util/functions.ts similarity index 100% rename from packages/auth-exp/test/integration/webdriver/util/functions.ts rename to packages/auth/test/integration/webdriver/util/functions.ts diff --git a/packages/auth-exp/test/integration/webdriver/util/idp_page.ts b/packages/auth/test/integration/webdriver/util/idp_page.ts similarity index 100% rename from packages/auth-exp/test/integration/webdriver/util/idp_page.ts rename to packages/auth/test/integration/webdriver/util/idp_page.ts diff --git a/packages/auth-exp/test/integration/webdriver/util/js_load_condition.ts b/packages/auth/test/integration/webdriver/util/js_load_condition.ts similarity index 100% rename from packages/auth-exp/test/integration/webdriver/util/js_load_condition.ts rename to packages/auth/test/integration/webdriver/util/js_load_condition.ts diff --git a/packages/auth-exp/test/integration/webdriver/util/test_runner.ts b/packages/auth/test/integration/webdriver/util/test_runner.ts similarity index 100% rename from packages/auth-exp/test/integration/webdriver/util/test_runner.ts rename to packages/auth/test/integration/webdriver/util/test_runner.ts diff --git a/packages/auth-exp/test/integration/webdriver/util/test_server.ts b/packages/auth/test/integration/webdriver/util/test_server.ts similarity index 100% rename from packages/auth-exp/test/integration/webdriver/util/test_server.ts rename to packages/auth/test/integration/webdriver/util/test_server.ts diff --git a/packages/auth-exp/test/integration/webdriver/util/ui_page.ts b/packages/auth/test/integration/webdriver/util/ui_page.ts similarity index 100% rename from packages/auth-exp/test/integration/webdriver/util/ui_page.ts rename to packages/auth/test/integration/webdriver/util/ui_page.ts diff --git a/packages/auth-exp/tsconfig.json b/packages/auth/tsconfig.json similarity index 100% rename from packages/auth-exp/tsconfig.json rename to packages/auth/tsconfig.json diff --git a/packages/firebase-exp/.eslintrc.js b/packages/firebase/.eslintrc.js similarity index 100% rename from packages/firebase-exp/.eslintrc.js rename to packages/firebase/.eslintrc.js diff --git a/packages/firebase-exp/.gitignore b/packages/firebase/.gitignore similarity index 100% rename from packages/firebase-exp/.gitignore rename to packages/firebase/.gitignore diff --git a/packages/firebase-exp/README.md b/packages/firebase/README.md similarity index 100% rename from packages/firebase-exp/README.md rename to packages/firebase/README.md diff --git a/packages/firebase-exp/analytics/index.ts b/packages/firebase/analytics/index.ts similarity index 100% rename from packages/firebase-exp/analytics/index.ts rename to packages/firebase/analytics/index.ts diff --git a/packages/firebase-exp/analytics/package.json b/packages/firebase/analytics/package.json similarity index 100% rename from packages/firebase-exp/analytics/package.json rename to packages/firebase/analytics/package.json diff --git a/packages/firebase-exp/app-check/index.ts b/packages/firebase/app-check/index.ts similarity index 100% rename from packages/firebase-exp/app-check/index.ts rename to packages/firebase/app-check/index.ts diff --git a/packages/firebase-exp/app-check/package.json b/packages/firebase/app-check/package.json similarity index 100% rename from packages/firebase-exp/app-check/package.json rename to packages/firebase/app-check/package.json diff --git a/packages/firebase-exp/app/index.cdn.ts b/packages/firebase/app/index.cdn.ts similarity index 100% rename from packages/firebase-exp/app/index.cdn.ts rename to packages/firebase/app/index.cdn.ts diff --git a/packages/firebase-exp/app/index.ts b/packages/firebase/app/index.ts similarity index 100% rename from packages/firebase-exp/app/index.ts rename to packages/firebase/app/index.ts diff --git a/packages/firebase-exp/app/package.json b/packages/firebase/app/package.json similarity index 100% rename from packages/firebase-exp/app/package.json rename to packages/firebase/app/package.json diff --git a/packages/firebase-exp/auth/cordova/index.ts b/packages/firebase/auth/cordova/index.ts similarity index 100% rename from packages/firebase-exp/auth/cordova/index.ts rename to packages/firebase/auth/cordova/index.ts diff --git a/packages/firebase-exp/auth/cordova/package.json b/packages/firebase/auth/cordova/package.json similarity index 100% rename from packages/firebase-exp/auth/cordova/package.json rename to packages/firebase/auth/cordova/package.json diff --git a/packages/firebase-exp/auth/index.ts b/packages/firebase/auth/index.ts similarity index 100% rename from packages/firebase-exp/auth/index.ts rename to packages/firebase/auth/index.ts diff --git a/packages/firebase-exp/auth/package.json b/packages/firebase/auth/package.json similarity index 100% rename from packages/firebase-exp/auth/package.json rename to packages/firebase/auth/package.json diff --git a/packages/firebase-exp/auth/react-native/index.ts b/packages/firebase/auth/react-native/index.ts similarity index 100% rename from packages/firebase-exp/auth/react-native/index.ts rename to packages/firebase/auth/react-native/index.ts diff --git a/packages/firebase-exp/auth/react-native/package.json b/packages/firebase/auth/react-native/package.json similarity index 100% rename from packages/firebase-exp/auth/react-native/package.json rename to packages/firebase/auth/react-native/package.json diff --git a/packages/firebase-exp/compat/analytics/index.ts b/packages/firebase/compat/analytics/index.ts similarity index 100% rename from packages/firebase-exp/compat/analytics/index.ts rename to packages/firebase/compat/analytics/index.ts diff --git a/packages/firebase-exp/compat/analytics/package.json b/packages/firebase/compat/analytics/package.json similarity index 100% rename from packages/firebase-exp/compat/analytics/package.json rename to packages/firebase/compat/analytics/package.json diff --git a/packages/firebase-exp/compat/app-check/index.ts b/packages/firebase/compat/app-check/index.ts similarity index 100% rename from packages/firebase-exp/compat/app-check/index.ts rename to packages/firebase/compat/app-check/index.ts diff --git a/packages/firebase-exp/compat/app-check/package.json b/packages/firebase/compat/app-check/package.json similarity index 100% rename from packages/firebase-exp/compat/app-check/package.json rename to packages/firebase/compat/app-check/package.json diff --git a/packages/firebase-exp/compat/app/index.cdn.ts b/packages/firebase/compat/app/index.cdn.ts similarity index 100% rename from packages/firebase-exp/compat/app/index.cdn.ts rename to packages/firebase/compat/app/index.cdn.ts diff --git a/packages/firebase-exp/compat/app/index.ts b/packages/firebase/compat/app/index.ts similarity index 100% rename from packages/firebase-exp/compat/app/index.ts rename to packages/firebase/compat/app/index.ts diff --git a/packages/firebase-exp/compat/app/package.json b/packages/firebase/compat/app/package.json similarity index 100% rename from packages/firebase-exp/compat/app/package.json rename to packages/firebase/compat/app/package.json diff --git a/packages/firebase-exp/compat/auth/index.ts b/packages/firebase/compat/auth/index.ts similarity index 100% rename from packages/firebase-exp/compat/auth/index.ts rename to packages/firebase/compat/auth/index.ts diff --git a/packages/firebase-exp/compat/auth/package.json b/packages/firebase/compat/auth/package.json similarity index 100% rename from packages/firebase-exp/compat/auth/package.json rename to packages/firebase/compat/auth/package.json diff --git a/packages/firebase-exp/compat/database/index.ts b/packages/firebase/compat/database/index.ts similarity index 100% rename from packages/firebase-exp/compat/database/index.ts rename to packages/firebase/compat/database/index.ts diff --git a/packages/firebase-exp/compat/database/package.json b/packages/firebase/compat/database/package.json similarity index 100% rename from packages/firebase-exp/compat/database/package.json rename to packages/firebase/compat/database/package.json diff --git a/packages/firebase-exp/compat/firestore/index.ts b/packages/firebase/compat/firestore/index.ts similarity index 100% rename from packages/firebase-exp/compat/firestore/index.ts rename to packages/firebase/compat/firestore/index.ts diff --git a/packages/firebase-exp/compat/firestore/package.json b/packages/firebase/compat/firestore/package.json similarity index 100% rename from packages/firebase-exp/compat/firestore/package.json rename to packages/firebase/compat/firestore/package.json diff --git a/packages/firebase-exp/compat/functions/index.ts b/packages/firebase/compat/functions/index.ts similarity index 100% rename from packages/firebase-exp/compat/functions/index.ts rename to packages/firebase/compat/functions/index.ts diff --git a/packages/firebase-exp/compat/functions/package.json b/packages/firebase/compat/functions/package.json similarity index 100% rename from packages/firebase-exp/compat/functions/package.json rename to packages/firebase/compat/functions/package.json diff --git a/packages/firebase-exp/compat/index.cdn.ts b/packages/firebase/compat/index.cdn.ts similarity index 100% rename from packages/firebase-exp/compat/index.cdn.ts rename to packages/firebase/compat/index.cdn.ts diff --git a/packages/firebase-exp/compat/index.d.ts b/packages/firebase/compat/index.d.ts similarity index 100% rename from packages/firebase-exp/compat/index.d.ts rename to packages/firebase/compat/index.d.ts diff --git a/packages/firebase-exp/compat/index.node.ts b/packages/firebase/compat/index.node.ts similarity index 100% rename from packages/firebase-exp/compat/index.node.ts rename to packages/firebase/compat/index.node.ts diff --git a/packages/firebase-exp/compat/index.perf.ts b/packages/firebase/compat/index.perf.ts similarity index 100% rename from packages/firebase-exp/compat/index.perf.ts rename to packages/firebase/compat/index.perf.ts diff --git a/packages/firebase-exp/compat/index.rn.ts b/packages/firebase/compat/index.rn.ts similarity index 100% rename from packages/firebase-exp/compat/index.rn.ts rename to packages/firebase/compat/index.rn.ts diff --git a/packages/firebase-exp/compat/index.ts b/packages/firebase/compat/index.ts similarity index 100% rename from packages/firebase-exp/compat/index.ts rename to packages/firebase/compat/index.ts diff --git a/packages/firebase-exp/compat/messaging/index.ts b/packages/firebase/compat/messaging/index.ts similarity index 100% rename from packages/firebase-exp/compat/messaging/index.ts rename to packages/firebase/compat/messaging/index.ts diff --git a/packages/firebase-exp/compat/messaging/package.json b/packages/firebase/compat/messaging/package.json similarity index 100% rename from packages/firebase-exp/compat/messaging/package.json rename to packages/firebase/compat/messaging/package.json diff --git a/packages/firebase-exp/compat/package.json b/packages/firebase/compat/package.json similarity index 100% rename from packages/firebase-exp/compat/package.json rename to packages/firebase/compat/package.json diff --git a/packages/firebase-exp/compat/performance/index.ts b/packages/firebase/compat/performance/index.ts similarity index 100% rename from packages/firebase-exp/compat/performance/index.ts rename to packages/firebase/compat/performance/index.ts diff --git a/packages/firebase-exp/compat/performance/package.json b/packages/firebase/compat/performance/package.json similarity index 100% rename from packages/firebase-exp/compat/performance/package.json rename to packages/firebase/compat/performance/package.json diff --git a/packages/firebase-exp/compat/remote-config/index.ts b/packages/firebase/compat/remote-config/index.ts similarity index 100% rename from packages/firebase-exp/compat/remote-config/index.ts rename to packages/firebase/compat/remote-config/index.ts diff --git a/packages/firebase-exp/compat/remote-config/package.json b/packages/firebase/compat/remote-config/package.json similarity index 100% rename from packages/firebase-exp/compat/remote-config/package.json rename to packages/firebase/compat/remote-config/package.json diff --git a/packages/firebase-exp/compat/rollup.config.js b/packages/firebase/compat/rollup.config.js similarity index 100% rename from packages/firebase-exp/compat/rollup.config.js rename to packages/firebase/compat/rollup.config.js diff --git a/packages/firebase-exp/compat/rollup.config.release.js b/packages/firebase/compat/rollup.config.release.js similarity index 100% rename from packages/firebase-exp/compat/rollup.config.release.js rename to packages/firebase/compat/rollup.config.release.js diff --git a/packages/firebase-exp/compat/storage/index.ts b/packages/firebase/compat/storage/index.ts similarity index 100% rename from packages/firebase-exp/compat/storage/index.ts rename to packages/firebase/compat/storage/index.ts diff --git a/packages/firebase-exp/compat/storage/package.json b/packages/firebase/compat/storage/package.json similarity index 100% rename from packages/firebase-exp/compat/storage/package.json rename to packages/firebase/compat/storage/package.json diff --git a/packages/firebase-exp/database/index.ts b/packages/firebase/database/index.ts similarity index 100% rename from packages/firebase-exp/database/index.ts rename to packages/firebase/database/index.ts diff --git a/packages/firebase-exp/database/package.json b/packages/firebase/database/package.json similarity index 100% rename from packages/firebase-exp/database/package.json rename to packages/firebase/database/package.json diff --git a/packages/firebase-exp/firestore/index.ts b/packages/firebase/firestore/index.ts similarity index 100% rename from packages/firebase-exp/firestore/index.ts rename to packages/firebase/firestore/index.ts diff --git a/packages/firebase-exp/firestore/lite/index.ts b/packages/firebase/firestore/lite/index.ts similarity index 100% rename from packages/firebase-exp/firestore/lite/index.ts rename to packages/firebase/firestore/lite/index.ts diff --git a/packages/firebase-exp/firestore/lite/package.json b/packages/firebase/firestore/lite/package.json similarity index 100% rename from packages/firebase-exp/firestore/lite/package.json rename to packages/firebase/firestore/lite/package.json diff --git a/packages/firebase-exp/firestore/package.json b/packages/firebase/firestore/package.json similarity index 100% rename from packages/firebase-exp/firestore/package.json rename to packages/firebase/firestore/package.json diff --git a/packages/firebase-exp/functions/index.ts b/packages/firebase/functions/index.ts similarity index 100% rename from packages/firebase-exp/functions/index.ts rename to packages/firebase/functions/index.ts diff --git a/packages/firebase-exp/functions/package.json b/packages/firebase/functions/package.json similarity index 100% rename from packages/firebase-exp/functions/package.json rename to packages/firebase/functions/package.json diff --git a/packages/firebase-exp/gulpfile.js b/packages/firebase/gulpfile.js similarity index 100% rename from packages/firebase-exp/gulpfile.js rename to packages/firebase/gulpfile.js diff --git a/packages/firebase-exp/messaging/index.ts b/packages/firebase/messaging/index.ts similarity index 100% rename from packages/firebase-exp/messaging/index.ts rename to packages/firebase/messaging/index.ts diff --git a/packages/firebase-exp/messaging/package.json b/packages/firebase/messaging/package.json similarity index 100% rename from packages/firebase-exp/messaging/package.json rename to packages/firebase/messaging/package.json diff --git a/packages/firebase-exp/messaging/sw/index.ts b/packages/firebase/messaging/sw/index.ts similarity index 100% rename from packages/firebase-exp/messaging/sw/index.ts rename to packages/firebase/messaging/sw/index.ts diff --git a/packages/firebase-exp/messaging/sw/package.json b/packages/firebase/messaging/sw/package.json similarity index 100% rename from packages/firebase-exp/messaging/sw/package.json rename to packages/firebase/messaging/sw/package.json diff --git a/packages/firebase-exp/package.json b/packages/firebase/package.json similarity index 100% rename from packages/firebase-exp/package.json rename to packages/firebase/package.json diff --git a/packages/firebase-exp/performance/index.ts b/packages/firebase/performance/index.ts similarity index 100% rename from packages/firebase-exp/performance/index.ts rename to packages/firebase/performance/index.ts diff --git a/packages/firebase-exp/performance/package.json b/packages/firebase/performance/package.json similarity index 100% rename from packages/firebase-exp/performance/package.json rename to packages/firebase/performance/package.json diff --git a/packages/firebase-exp/remote-config/index.ts b/packages/firebase/remote-config/index.ts similarity index 100% rename from packages/firebase-exp/remote-config/index.ts rename to packages/firebase/remote-config/index.ts diff --git a/packages/firebase-exp/remote-config/package.json b/packages/firebase/remote-config/package.json similarity index 100% rename from packages/firebase-exp/remote-config/package.json rename to packages/firebase/remote-config/package.json diff --git a/packages/firebase-exp/rollup.config.js b/packages/firebase/rollup.config.js similarity index 100% rename from packages/firebase-exp/rollup.config.js rename to packages/firebase/rollup.config.js diff --git a/packages/firebase-exp/rollup.config.release.js b/packages/firebase/rollup.config.release.js similarity index 100% rename from packages/firebase-exp/rollup.config.release.js rename to packages/firebase/rollup.config.release.js diff --git a/packages/firebase-exp/storage/index.ts b/packages/firebase/storage/index.ts similarity index 100% rename from packages/firebase-exp/storage/index.ts rename to packages/firebase/storage/index.ts diff --git a/packages/firebase-exp/storage/package.json b/packages/firebase/storage/package.json similarity index 100% rename from packages/firebase-exp/storage/package.json rename to packages/firebase/storage/package.json diff --git a/packages/firebase-exp/tsconfig.json b/packages/firebase/tsconfig.json similarity index 100% rename from packages/firebase-exp/tsconfig.json rename to packages/firebase/tsconfig.json diff --git a/packages/functions-exp/.eslintrc.js b/packages/functions/.eslintrc.js similarity index 100% rename from packages/functions-exp/.eslintrc.js rename to packages/functions/.eslintrc.js diff --git a/packages/functions-exp/README.md b/packages/functions/README.md similarity index 100% rename from packages/functions-exp/README.md rename to packages/functions/README.md diff --git a/packages/functions-exp/api-extractor.json b/packages/functions/api-extractor.json similarity index 100% rename from packages/functions-exp/api-extractor.json rename to packages/functions/api-extractor.json diff --git a/packages/functions-exp/karma.conf.js b/packages/functions/karma.conf.js similarity index 100% rename from packages/functions-exp/karma.conf.js rename to packages/functions/karma.conf.js diff --git a/packages/functions-exp/package.json b/packages/functions/package.json similarity index 100% rename from packages/functions-exp/package.json rename to packages/functions/package.json diff --git a/packages/functions-exp/rollup.config.js b/packages/functions/rollup.config.js similarity index 100% rename from packages/functions-exp/rollup.config.js rename to packages/functions/rollup.config.js diff --git a/packages/functions-exp/rollup.config.release.js b/packages/functions/rollup.config.release.js similarity index 100% rename from packages/functions-exp/rollup.config.release.js rename to packages/functions/rollup.config.release.js diff --git a/packages/functions-exp/rollup.shared.js b/packages/functions/rollup.shared.js similarity index 100% rename from packages/functions-exp/rollup.shared.js rename to packages/functions/rollup.shared.js diff --git a/packages/functions-exp/src/api.ts b/packages/functions/src/api.ts similarity index 100% rename from packages/functions-exp/src/api.ts rename to packages/functions/src/api.ts diff --git a/packages/functions-exp/src/callable.test.ts b/packages/functions/src/callable.test.ts similarity index 100% rename from packages/functions-exp/src/callable.test.ts rename to packages/functions/src/callable.test.ts diff --git a/packages/functions-exp/src/config.ts b/packages/functions/src/config.ts similarity index 100% rename from packages/functions-exp/src/config.ts rename to packages/functions/src/config.ts diff --git a/packages/functions-exp/src/constants.ts b/packages/functions/src/constants.ts similarity index 100% rename from packages/functions-exp/src/constants.ts rename to packages/functions/src/constants.ts diff --git a/packages/functions-exp/src/context.ts b/packages/functions/src/context.ts similarity index 100% rename from packages/functions-exp/src/context.ts rename to packages/functions/src/context.ts diff --git a/packages/functions-exp/src/error.ts b/packages/functions/src/error.ts similarity index 100% rename from packages/functions-exp/src/error.ts rename to packages/functions/src/error.ts diff --git a/packages/functions-exp/src/index.node.ts b/packages/functions/src/index.node.ts similarity index 100% rename from packages/functions-exp/src/index.node.ts rename to packages/functions/src/index.node.ts diff --git a/packages/functions-exp/src/index.ts b/packages/functions/src/index.ts similarity index 100% rename from packages/functions-exp/src/index.ts rename to packages/functions/src/index.ts diff --git a/packages/functions-exp/src/public-types.ts b/packages/functions/src/public-types.ts similarity index 100% rename from packages/functions-exp/src/public-types.ts rename to packages/functions/src/public-types.ts diff --git a/packages/functions-exp/src/serializer.test.ts b/packages/functions/src/serializer.test.ts similarity index 100% rename from packages/functions-exp/src/serializer.test.ts rename to packages/functions/src/serializer.test.ts diff --git a/packages/functions-exp/src/serializer.ts b/packages/functions/src/serializer.ts similarity index 100% rename from packages/functions-exp/src/serializer.ts rename to packages/functions/src/serializer.ts diff --git a/packages/functions-exp/src/service.test.ts b/packages/functions/src/service.test.ts similarity index 100% rename from packages/functions-exp/src/service.test.ts rename to packages/functions/src/service.test.ts diff --git a/packages/functions-exp/src/service.ts b/packages/functions/src/service.ts similarity index 100% rename from packages/functions-exp/src/service.ts rename to packages/functions/src/service.ts diff --git a/packages/functions-exp/test/utils.ts b/packages/functions/test/utils.ts similarity index 100% rename from packages/functions-exp/test/utils.ts rename to packages/functions/test/utils.ts diff --git a/packages/functions-exp/tsconfig.json b/packages/functions/tsconfig.json similarity index 100% rename from packages/functions-exp/tsconfig.json rename to packages/functions/tsconfig.json diff --git a/packages/installations-exp/.eslintrc.js b/packages/installations/.eslintrc.js similarity index 100% rename from packages/installations-exp/.eslintrc.js rename to packages/installations/.eslintrc.js diff --git a/packages/installations-exp/api-extractor.json b/packages/installations/api-extractor.json similarity index 100% rename from packages/installations-exp/api-extractor.json rename to packages/installations/api-extractor.json diff --git a/packages/installations-exp/karma.conf.js b/packages/installations/karma.conf.js similarity index 100% rename from packages/installations-exp/karma.conf.js rename to packages/installations/karma.conf.js diff --git a/packages/installations-exp/package.json b/packages/installations/package.json similarity index 100% rename from packages/installations-exp/package.json rename to packages/installations/package.json diff --git a/packages/installations-exp/rollup.config.js b/packages/installations/rollup.config.js similarity index 100% rename from packages/installations-exp/rollup.config.js rename to packages/installations/rollup.config.js diff --git a/packages/installations-exp/rollup.config.release.js b/packages/installations/rollup.config.release.js similarity index 100% rename from packages/installations-exp/rollup.config.release.js rename to packages/installations/rollup.config.release.js diff --git a/packages/installations-exp/rollup.shared.js b/packages/installations/rollup.shared.js similarity index 100% rename from packages/installations-exp/rollup.shared.js rename to packages/installations/rollup.shared.js diff --git a/packages/installations-exp/src/api/delete-installations.test.ts b/packages/installations/src/api/delete-installations.test.ts similarity index 100% rename from packages/installations-exp/src/api/delete-installations.test.ts rename to packages/installations/src/api/delete-installations.test.ts diff --git a/packages/installations-exp/src/api/delete-installations.ts b/packages/installations/src/api/delete-installations.ts similarity index 100% rename from packages/installations-exp/src/api/delete-installations.ts rename to packages/installations/src/api/delete-installations.ts diff --git a/packages/installations-exp/src/api/get-id.test.ts b/packages/installations/src/api/get-id.test.ts similarity index 100% rename from packages/installations-exp/src/api/get-id.test.ts rename to packages/installations/src/api/get-id.test.ts diff --git a/packages/installations-exp/src/api/get-id.ts b/packages/installations/src/api/get-id.ts similarity index 100% rename from packages/installations-exp/src/api/get-id.ts rename to packages/installations/src/api/get-id.ts diff --git a/packages/installations-exp/src/api/get-installations.ts b/packages/installations/src/api/get-installations.ts similarity index 100% rename from packages/installations-exp/src/api/get-installations.ts rename to packages/installations/src/api/get-installations.ts diff --git a/packages/installations-exp/src/api/get-token.test.ts b/packages/installations/src/api/get-token.test.ts similarity index 100% rename from packages/installations-exp/src/api/get-token.test.ts rename to packages/installations/src/api/get-token.test.ts diff --git a/packages/installations-exp/src/api/get-token.ts b/packages/installations/src/api/get-token.ts similarity index 100% rename from packages/installations-exp/src/api/get-token.ts rename to packages/installations/src/api/get-token.ts diff --git a/packages/installations-exp/src/api/index.ts b/packages/installations/src/api/index.ts similarity index 100% rename from packages/installations-exp/src/api/index.ts rename to packages/installations/src/api/index.ts diff --git a/packages/installations-exp/src/api/on-id-change.test.ts b/packages/installations/src/api/on-id-change.test.ts similarity index 100% rename from packages/installations-exp/src/api/on-id-change.test.ts rename to packages/installations/src/api/on-id-change.test.ts diff --git a/packages/installations-exp/src/api/on-id-change.ts b/packages/installations/src/api/on-id-change.ts similarity index 100% rename from packages/installations-exp/src/api/on-id-change.ts rename to packages/installations/src/api/on-id-change.ts diff --git a/packages/installations-exp/src/functions/common.test.ts b/packages/installations/src/functions/common.test.ts similarity index 100% rename from packages/installations-exp/src/functions/common.test.ts rename to packages/installations/src/functions/common.test.ts diff --git a/packages/installations-exp/src/functions/common.ts b/packages/installations/src/functions/common.ts similarity index 100% rename from packages/installations-exp/src/functions/common.ts rename to packages/installations/src/functions/common.ts diff --git a/packages/installations-exp/src/functions/config.ts b/packages/installations/src/functions/config.ts similarity index 100% rename from packages/installations-exp/src/functions/config.ts rename to packages/installations/src/functions/config.ts diff --git a/packages/installations-exp/src/functions/create-installation-request.test.ts b/packages/installations/src/functions/create-installation-request.test.ts similarity index 100% rename from packages/installations-exp/src/functions/create-installation-request.test.ts rename to packages/installations/src/functions/create-installation-request.test.ts diff --git a/packages/installations-exp/src/functions/create-installation-request.ts b/packages/installations/src/functions/create-installation-request.ts similarity index 100% rename from packages/installations-exp/src/functions/create-installation-request.ts rename to packages/installations/src/functions/create-installation-request.ts diff --git a/packages/installations-exp/src/functions/delete-installation-request.test.ts b/packages/installations/src/functions/delete-installation-request.test.ts similarity index 100% rename from packages/installations-exp/src/functions/delete-installation-request.test.ts rename to packages/installations/src/functions/delete-installation-request.test.ts diff --git a/packages/installations-exp/src/functions/delete-installation-request.ts b/packages/installations/src/functions/delete-installation-request.ts similarity index 100% rename from packages/installations-exp/src/functions/delete-installation-request.ts rename to packages/installations/src/functions/delete-installation-request.ts diff --git a/packages/installations-exp/src/functions/generate-auth-token-request.test.ts b/packages/installations/src/functions/generate-auth-token-request.test.ts similarity index 100% rename from packages/installations-exp/src/functions/generate-auth-token-request.test.ts rename to packages/installations/src/functions/generate-auth-token-request.test.ts diff --git a/packages/installations-exp/src/functions/generate-auth-token-request.ts b/packages/installations/src/functions/generate-auth-token-request.ts similarity index 100% rename from packages/installations-exp/src/functions/generate-auth-token-request.ts rename to packages/installations/src/functions/generate-auth-token-request.ts diff --git a/packages/installations-exp/src/helpers/buffer-to-base64-url-safe.test.ts b/packages/installations/src/helpers/buffer-to-base64-url-safe.test.ts similarity index 100% rename from packages/installations-exp/src/helpers/buffer-to-base64-url-safe.test.ts rename to packages/installations/src/helpers/buffer-to-base64-url-safe.test.ts diff --git a/packages/installations-exp/src/helpers/buffer-to-base64-url-safe.ts b/packages/installations/src/helpers/buffer-to-base64-url-safe.ts similarity index 100% rename from packages/installations-exp/src/helpers/buffer-to-base64-url-safe.ts rename to packages/installations/src/helpers/buffer-to-base64-url-safe.ts diff --git a/packages/installations-exp/src/helpers/extract-app-config.test.ts b/packages/installations/src/helpers/extract-app-config.test.ts similarity index 100% rename from packages/installations-exp/src/helpers/extract-app-config.test.ts rename to packages/installations/src/helpers/extract-app-config.test.ts diff --git a/packages/installations-exp/src/helpers/extract-app-config.ts b/packages/installations/src/helpers/extract-app-config.ts similarity index 100% rename from packages/installations-exp/src/helpers/extract-app-config.ts rename to packages/installations/src/helpers/extract-app-config.ts diff --git a/packages/installations-exp/src/helpers/fid-changed.test.ts b/packages/installations/src/helpers/fid-changed.test.ts similarity index 100% rename from packages/installations-exp/src/helpers/fid-changed.test.ts rename to packages/installations/src/helpers/fid-changed.test.ts diff --git a/packages/installations-exp/src/helpers/fid-changed.ts b/packages/installations/src/helpers/fid-changed.ts similarity index 100% rename from packages/installations-exp/src/helpers/fid-changed.ts rename to packages/installations/src/helpers/fid-changed.ts diff --git a/packages/installations-exp/src/helpers/generate-fid.test.ts b/packages/installations/src/helpers/generate-fid.test.ts similarity index 100% rename from packages/installations-exp/src/helpers/generate-fid.test.ts rename to packages/installations/src/helpers/generate-fid.test.ts diff --git a/packages/installations-exp/src/helpers/generate-fid.ts b/packages/installations/src/helpers/generate-fid.ts similarity index 100% rename from packages/installations-exp/src/helpers/generate-fid.ts rename to packages/installations/src/helpers/generate-fid.ts diff --git a/packages/installations-exp/src/helpers/get-installation-entry.test.ts b/packages/installations/src/helpers/get-installation-entry.test.ts similarity index 100% rename from packages/installations-exp/src/helpers/get-installation-entry.test.ts rename to packages/installations/src/helpers/get-installation-entry.test.ts diff --git a/packages/installations-exp/src/helpers/get-installation-entry.ts b/packages/installations/src/helpers/get-installation-entry.ts similarity index 100% rename from packages/installations-exp/src/helpers/get-installation-entry.ts rename to packages/installations/src/helpers/get-installation-entry.ts diff --git a/packages/installations-exp/src/helpers/idb-manager.test.ts b/packages/installations/src/helpers/idb-manager.test.ts similarity index 100% rename from packages/installations-exp/src/helpers/idb-manager.test.ts rename to packages/installations/src/helpers/idb-manager.test.ts diff --git a/packages/installations-exp/src/helpers/idb-manager.ts b/packages/installations/src/helpers/idb-manager.ts similarity index 100% rename from packages/installations-exp/src/helpers/idb-manager.ts rename to packages/installations/src/helpers/idb-manager.ts diff --git a/packages/installations-exp/src/helpers/refresh-auth-token.test.ts b/packages/installations/src/helpers/refresh-auth-token.test.ts similarity index 100% rename from packages/installations-exp/src/helpers/refresh-auth-token.test.ts rename to packages/installations/src/helpers/refresh-auth-token.test.ts diff --git a/packages/installations-exp/src/helpers/refresh-auth-token.ts b/packages/installations/src/helpers/refresh-auth-token.ts similarity index 100% rename from packages/installations-exp/src/helpers/refresh-auth-token.ts rename to packages/installations/src/helpers/refresh-auth-token.ts diff --git a/packages/installations-exp/src/index.ts b/packages/installations/src/index.ts similarity index 100% rename from packages/installations-exp/src/index.ts rename to packages/installations/src/index.ts diff --git a/packages/installations-exp/src/interfaces/api-response.ts b/packages/installations/src/interfaces/api-response.ts similarity index 100% rename from packages/installations-exp/src/interfaces/api-response.ts rename to packages/installations/src/interfaces/api-response.ts diff --git a/packages/installations-exp/src/interfaces/installation-entry.ts b/packages/installations/src/interfaces/installation-entry.ts similarity index 100% rename from packages/installations-exp/src/interfaces/installation-entry.ts rename to packages/installations/src/interfaces/installation-entry.ts diff --git a/packages/installations-exp/src/interfaces/installation-impl.ts b/packages/installations/src/interfaces/installation-impl.ts similarity index 100% rename from packages/installations-exp/src/interfaces/installation-impl.ts rename to packages/installations/src/interfaces/installation-impl.ts diff --git a/packages/installations-exp/src/interfaces/public-types.ts b/packages/installations/src/interfaces/public-types.ts similarity index 100% rename from packages/installations-exp/src/interfaces/public-types.ts rename to packages/installations/src/interfaces/public-types.ts diff --git a/packages/installations-exp/src/testing/compare-headers.test.ts b/packages/installations/src/testing/compare-headers.test.ts similarity index 100% rename from packages/installations-exp/src/testing/compare-headers.test.ts rename to packages/installations/src/testing/compare-headers.test.ts diff --git a/packages/installations-exp/src/testing/compare-headers.ts b/packages/installations/src/testing/compare-headers.ts similarity index 100% rename from packages/installations-exp/src/testing/compare-headers.ts rename to packages/installations/src/testing/compare-headers.ts diff --git a/packages/installations-exp/src/testing/fake-generators.ts b/packages/installations/src/testing/fake-generators.ts similarity index 100% rename from packages/installations-exp/src/testing/fake-generators.ts rename to packages/installations/src/testing/fake-generators.ts diff --git a/packages/installations-exp/src/testing/setup.ts b/packages/installations/src/testing/setup.ts similarity index 100% rename from packages/installations-exp/src/testing/setup.ts rename to packages/installations/src/testing/setup.ts diff --git a/packages/installations-exp/src/util/constants.ts b/packages/installations/src/util/constants.ts similarity index 100% rename from packages/installations-exp/src/util/constants.ts rename to packages/installations/src/util/constants.ts diff --git a/packages/installations-exp/src/util/errors.ts b/packages/installations/src/util/errors.ts similarity index 100% rename from packages/installations-exp/src/util/errors.ts rename to packages/installations/src/util/errors.ts diff --git a/packages/installations-exp/src/util/get-key.ts b/packages/installations/src/util/get-key.ts similarity index 100% rename from packages/installations-exp/src/util/get-key.ts rename to packages/installations/src/util/get-key.ts diff --git a/packages/installations-exp/src/util/sleep.test.ts b/packages/installations/src/util/sleep.test.ts similarity index 100% rename from packages/installations-exp/src/util/sleep.test.ts rename to packages/installations/src/util/sleep.test.ts diff --git a/packages/installations-exp/src/util/sleep.ts b/packages/installations/src/util/sleep.ts similarity index 100% rename from packages/installations-exp/src/util/sleep.ts rename to packages/installations/src/util/sleep.ts diff --git a/packages/installations-exp/test-app/.gitignore b/packages/installations/test-app/.gitignore similarity index 100% rename from packages/installations-exp/test-app/.gitignore rename to packages/installations/test-app/.gitignore diff --git a/packages/installations-exp/test-app/index.html b/packages/installations/test-app/index.html similarity index 100% rename from packages/installations-exp/test-app/index.html rename to packages/installations/test-app/index.html diff --git a/packages/installations-exp/test-app/index.js b/packages/installations/test-app/index.js similarity index 100% rename from packages/installations-exp/test-app/index.js rename to packages/installations/test-app/index.js diff --git a/packages/installations-exp/test-app/rollup.config.js b/packages/installations/test-app/rollup.config.js similarity index 100% rename from packages/installations-exp/test-app/rollup.config.js rename to packages/installations/test-app/rollup.config.js diff --git a/packages/installations-exp/tsconfig.json b/packages/installations/tsconfig.json similarity index 100% rename from packages/installations-exp/tsconfig.json rename to packages/installations/tsconfig.json diff --git a/packages/messaging-exp/.eslintrc.js b/packages/messaging/.eslintrc.js similarity index 100% rename from packages/messaging-exp/.eslintrc.js rename to packages/messaging/.eslintrc.js diff --git a/packages/messaging-exp/README.md b/packages/messaging/README.md similarity index 100% rename from packages/messaging-exp/README.md rename to packages/messaging/README.md diff --git a/packages/messaging-exp/api-extractor.json b/packages/messaging/api-extractor.json similarity index 100% rename from packages/messaging-exp/api-extractor.json rename to packages/messaging/api-extractor.json diff --git a/packages/messaging-exp/karma.conf.js b/packages/messaging/karma.conf.js similarity index 100% rename from packages/messaging-exp/karma.conf.js rename to packages/messaging/karma.conf.js diff --git a/packages/messaging-exp/package.json b/packages/messaging/package.json similarity index 100% rename from packages/messaging-exp/package.json rename to packages/messaging/package.json diff --git a/packages/messaging-exp/rollup.config.js b/packages/messaging/rollup.config.js similarity index 100% rename from packages/messaging-exp/rollup.config.js rename to packages/messaging/rollup.config.js diff --git a/packages/messaging-exp/rollup.config.release.js b/packages/messaging/rollup.config.release.js similarity index 100% rename from packages/messaging-exp/rollup.config.release.js rename to packages/messaging/rollup.config.release.js diff --git a/packages/messaging-exp/src/api.ts b/packages/messaging/src/api.ts similarity index 100% rename from packages/messaging-exp/src/api.ts rename to packages/messaging/src/api.ts diff --git a/packages/messaging-exp/src/api/deleteToken.ts b/packages/messaging/src/api/deleteToken.ts similarity index 100% rename from packages/messaging-exp/src/api/deleteToken.ts rename to packages/messaging/src/api/deleteToken.ts diff --git a/packages/messaging-exp/src/api/getToken.ts b/packages/messaging/src/api/getToken.ts similarity index 100% rename from packages/messaging-exp/src/api/getToken.ts rename to packages/messaging/src/api/getToken.ts diff --git a/packages/messaging-exp/src/api/isSupported.ts b/packages/messaging/src/api/isSupported.ts similarity index 100% rename from packages/messaging-exp/src/api/isSupported.ts rename to packages/messaging/src/api/isSupported.ts diff --git a/packages/messaging-exp/src/api/onBackgroundMessage.ts b/packages/messaging/src/api/onBackgroundMessage.ts similarity index 100% rename from packages/messaging-exp/src/api/onBackgroundMessage.ts rename to packages/messaging/src/api/onBackgroundMessage.ts diff --git a/packages/messaging-exp/src/api/onMessage.ts b/packages/messaging/src/api/onMessage.ts similarity index 100% rename from packages/messaging-exp/src/api/onMessage.ts rename to packages/messaging/src/api/onMessage.ts diff --git a/packages/messaging-exp/src/api/setDeliveryMetricsExportedToBigQueryEnabled.ts b/packages/messaging/src/api/setDeliveryMetricsExportedToBigQueryEnabled.ts similarity index 100% rename from packages/messaging-exp/src/api/setDeliveryMetricsExportedToBigQueryEnabled.ts rename to packages/messaging/src/api/setDeliveryMetricsExportedToBigQueryEnabled.ts diff --git a/packages/messaging-exp/src/helpers/array-base64-translator.test.ts b/packages/messaging/src/helpers/array-base64-translator.test.ts similarity index 100% rename from packages/messaging-exp/src/helpers/array-base64-translator.test.ts rename to packages/messaging/src/helpers/array-base64-translator.test.ts diff --git a/packages/messaging-exp/src/helpers/array-base64-translator.ts b/packages/messaging/src/helpers/array-base64-translator.ts similarity index 100% rename from packages/messaging-exp/src/helpers/array-base64-translator.ts rename to packages/messaging/src/helpers/array-base64-translator.ts diff --git a/packages/messaging-exp/src/helpers/externalizePayload.test.ts b/packages/messaging/src/helpers/externalizePayload.test.ts similarity index 100% rename from packages/messaging-exp/src/helpers/externalizePayload.test.ts rename to packages/messaging/src/helpers/externalizePayload.test.ts diff --git a/packages/messaging-exp/src/helpers/externalizePayload.ts b/packages/messaging/src/helpers/externalizePayload.ts similarity index 100% rename from packages/messaging-exp/src/helpers/externalizePayload.ts rename to packages/messaging/src/helpers/externalizePayload.ts diff --git a/packages/messaging-exp/src/helpers/extract-app-config.test.ts b/packages/messaging/src/helpers/extract-app-config.test.ts similarity index 100% rename from packages/messaging-exp/src/helpers/extract-app-config.test.ts rename to packages/messaging/src/helpers/extract-app-config.test.ts diff --git a/packages/messaging-exp/src/helpers/extract-app-config.ts b/packages/messaging/src/helpers/extract-app-config.ts similarity index 100% rename from packages/messaging-exp/src/helpers/extract-app-config.ts rename to packages/messaging/src/helpers/extract-app-config.ts diff --git a/packages/messaging-exp/src/helpers/is-console-message.ts b/packages/messaging/src/helpers/is-console-message.ts similarity index 100% rename from packages/messaging-exp/src/helpers/is-console-message.ts rename to packages/messaging/src/helpers/is-console-message.ts diff --git a/packages/messaging-exp/src/helpers/logToFirelog.test.ts b/packages/messaging/src/helpers/logToFirelog.test.ts similarity index 100% rename from packages/messaging-exp/src/helpers/logToFirelog.test.ts rename to packages/messaging/src/helpers/logToFirelog.test.ts diff --git a/packages/messaging-exp/src/helpers/logToFirelog.ts b/packages/messaging/src/helpers/logToFirelog.ts similarity index 100% rename from packages/messaging-exp/src/helpers/logToFirelog.ts rename to packages/messaging/src/helpers/logToFirelog.ts diff --git a/packages/messaging-exp/src/helpers/logToScion.ts b/packages/messaging/src/helpers/logToScion.ts similarity index 100% rename from packages/messaging-exp/src/helpers/logToScion.ts rename to packages/messaging/src/helpers/logToScion.ts diff --git a/packages/messaging-exp/src/helpers/migrate-old-database.test.ts b/packages/messaging/src/helpers/migrate-old-database.test.ts similarity index 100% rename from packages/messaging-exp/src/helpers/migrate-old-database.test.ts rename to packages/messaging/src/helpers/migrate-old-database.test.ts diff --git a/packages/messaging-exp/src/helpers/migrate-old-database.ts b/packages/messaging/src/helpers/migrate-old-database.ts similarity index 100% rename from packages/messaging-exp/src/helpers/migrate-old-database.ts rename to packages/messaging/src/helpers/migrate-old-database.ts diff --git a/packages/messaging-exp/src/helpers/register.ts b/packages/messaging/src/helpers/register.ts similarity index 100% rename from packages/messaging-exp/src/helpers/register.ts rename to packages/messaging/src/helpers/register.ts diff --git a/packages/messaging-exp/src/helpers/registerDefaultSw.ts b/packages/messaging/src/helpers/registerDefaultSw.ts similarity index 100% rename from packages/messaging-exp/src/helpers/registerDefaultSw.ts rename to packages/messaging/src/helpers/registerDefaultSw.ts diff --git a/packages/messaging-exp/src/helpers/sleep.test.ts b/packages/messaging/src/helpers/sleep.test.ts similarity index 100% rename from packages/messaging-exp/src/helpers/sleep.test.ts rename to packages/messaging/src/helpers/sleep.test.ts diff --git a/packages/messaging-exp/src/helpers/sleep.ts b/packages/messaging/src/helpers/sleep.ts similarity index 100% rename from packages/messaging-exp/src/helpers/sleep.ts rename to packages/messaging/src/helpers/sleep.ts diff --git a/packages/messaging-exp/src/helpers/updateSwReg.ts b/packages/messaging/src/helpers/updateSwReg.ts similarity index 100% rename from packages/messaging-exp/src/helpers/updateSwReg.ts rename to packages/messaging/src/helpers/updateSwReg.ts diff --git a/packages/messaging-exp/src/helpers/updateVapidKey.ts b/packages/messaging/src/helpers/updateVapidKey.ts similarity index 100% rename from packages/messaging-exp/src/helpers/updateVapidKey.ts rename to packages/messaging/src/helpers/updateVapidKey.ts diff --git a/packages/messaging-exp/src/index.sw.ts b/packages/messaging/src/index.sw.ts similarity index 100% rename from packages/messaging-exp/src/index.sw.ts rename to packages/messaging/src/index.sw.ts diff --git a/packages/messaging-exp/src/index.ts b/packages/messaging/src/index.ts similarity index 100% rename from packages/messaging-exp/src/index.ts rename to packages/messaging/src/index.ts diff --git a/packages/messaging-exp/src/interfaces/app-config.ts b/packages/messaging/src/interfaces/app-config.ts similarity index 100% rename from packages/messaging-exp/src/interfaces/app-config.ts rename to packages/messaging/src/interfaces/app-config.ts diff --git a/packages/messaging-exp/src/interfaces/internal-dependencies.ts b/packages/messaging/src/interfaces/internal-dependencies.ts similarity index 100% rename from packages/messaging-exp/src/interfaces/internal-dependencies.ts rename to packages/messaging/src/interfaces/internal-dependencies.ts diff --git a/packages/messaging-exp/src/interfaces/internal-message-payload.ts b/packages/messaging/src/interfaces/internal-message-payload.ts similarity index 100% rename from packages/messaging-exp/src/interfaces/internal-message-payload.ts rename to packages/messaging/src/interfaces/internal-message-payload.ts diff --git a/packages/messaging-exp/src/interfaces/logging-types.ts b/packages/messaging/src/interfaces/logging-types.ts similarity index 100% rename from packages/messaging-exp/src/interfaces/logging-types.ts rename to packages/messaging/src/interfaces/logging-types.ts diff --git a/packages/messaging-exp/src/interfaces/public-types.ts b/packages/messaging/src/interfaces/public-types.ts similarity index 100% rename from packages/messaging-exp/src/interfaces/public-types.ts rename to packages/messaging/src/interfaces/public-types.ts diff --git a/packages/messaging-exp/src/interfaces/token-details.ts b/packages/messaging/src/interfaces/token-details.ts similarity index 100% rename from packages/messaging-exp/src/interfaces/token-details.ts rename to packages/messaging/src/interfaces/token-details.ts diff --git a/packages/messaging-exp/src/internals/idb-manager.test.ts b/packages/messaging/src/internals/idb-manager.test.ts similarity index 100% rename from packages/messaging-exp/src/internals/idb-manager.test.ts rename to packages/messaging/src/internals/idb-manager.test.ts diff --git a/packages/messaging-exp/src/internals/idb-manager.ts b/packages/messaging/src/internals/idb-manager.ts similarity index 100% rename from packages/messaging-exp/src/internals/idb-manager.ts rename to packages/messaging/src/internals/idb-manager.ts diff --git a/packages/messaging-exp/src/internals/requests.test.ts b/packages/messaging/src/internals/requests.test.ts similarity index 100% rename from packages/messaging-exp/src/internals/requests.test.ts rename to packages/messaging/src/internals/requests.test.ts diff --git a/packages/messaging-exp/src/internals/requests.ts b/packages/messaging/src/internals/requests.ts similarity index 100% rename from packages/messaging-exp/src/internals/requests.ts rename to packages/messaging/src/internals/requests.ts diff --git a/packages/messaging-exp/src/internals/token-manager.test.ts b/packages/messaging/src/internals/token-manager.test.ts similarity index 100% rename from packages/messaging-exp/src/internals/token-manager.test.ts rename to packages/messaging/src/internals/token-manager.test.ts diff --git a/packages/messaging-exp/src/internals/token-manager.ts b/packages/messaging/src/internals/token-manager.ts similarity index 100% rename from packages/messaging-exp/src/internals/token-manager.ts rename to packages/messaging/src/internals/token-manager.ts diff --git a/packages/messaging-exp/src/listeners/sw-listeners.test.ts b/packages/messaging/src/listeners/sw-listeners.test.ts similarity index 100% rename from packages/messaging-exp/src/listeners/sw-listeners.test.ts rename to packages/messaging/src/listeners/sw-listeners.test.ts diff --git a/packages/messaging-exp/src/listeners/sw-listeners.ts b/packages/messaging/src/listeners/sw-listeners.ts similarity index 100% rename from packages/messaging-exp/src/listeners/sw-listeners.ts rename to packages/messaging/src/listeners/sw-listeners.ts diff --git a/packages/messaging-exp/src/listeners/window-listener.ts b/packages/messaging/src/listeners/window-listener.ts similarity index 100% rename from packages/messaging-exp/src/listeners/window-listener.ts rename to packages/messaging/src/listeners/window-listener.ts diff --git a/packages/messaging-exp/src/messaging-service.ts b/packages/messaging/src/messaging-service.ts similarity index 100% rename from packages/messaging-exp/src/messaging-service.ts rename to packages/messaging/src/messaging-service.ts diff --git a/packages/messaging-exp/src/testing/compare-headers.test.ts b/packages/messaging/src/testing/compare-headers.test.ts similarity index 100% rename from packages/messaging-exp/src/testing/compare-headers.test.ts rename to packages/messaging/src/testing/compare-headers.test.ts diff --git a/packages/messaging-exp/src/testing/compare-headers.ts b/packages/messaging/src/testing/compare-headers.ts similarity index 100% rename from packages/messaging-exp/src/testing/compare-headers.ts rename to packages/messaging/src/testing/compare-headers.ts diff --git a/packages/messaging-exp/src/testing/fakes/firebase-dependencies.ts b/packages/messaging/src/testing/fakes/firebase-dependencies.ts similarity index 100% rename from packages/messaging-exp/src/testing/fakes/firebase-dependencies.ts rename to packages/messaging/src/testing/fakes/firebase-dependencies.ts diff --git a/packages/messaging-exp/src/testing/fakes/logging-object.ts b/packages/messaging/src/testing/fakes/logging-object.ts similarity index 100% rename from packages/messaging-exp/src/testing/fakes/logging-object.ts rename to packages/messaging/src/testing/fakes/logging-object.ts diff --git a/packages/messaging-exp/src/testing/fakes/messaging-service.ts b/packages/messaging/src/testing/fakes/messaging-service.ts similarity index 100% rename from packages/messaging-exp/src/testing/fakes/messaging-service.ts rename to packages/messaging/src/testing/fakes/messaging-service.ts diff --git a/packages/messaging-exp/src/testing/fakes/service-worker.ts b/packages/messaging/src/testing/fakes/service-worker.ts similarity index 100% rename from packages/messaging-exp/src/testing/fakes/service-worker.ts rename to packages/messaging/src/testing/fakes/service-worker.ts diff --git a/packages/messaging-exp/src/testing/fakes/token-details.ts b/packages/messaging/src/testing/fakes/token-details.ts similarity index 100% rename from packages/messaging-exp/src/testing/fakes/token-details.ts rename to packages/messaging/src/testing/fakes/token-details.ts diff --git a/packages/messaging-exp/src/testing/setup.ts b/packages/messaging/src/testing/setup.ts similarity index 100% rename from packages/messaging-exp/src/testing/setup.ts rename to packages/messaging/src/testing/setup.ts diff --git a/packages/messaging-exp/src/testing/sinon-types.ts b/packages/messaging/src/testing/sinon-types.ts similarity index 100% rename from packages/messaging-exp/src/testing/sinon-types.ts rename to packages/messaging/src/testing/sinon-types.ts diff --git a/packages/messaging-exp/src/util/constants.ts b/packages/messaging/src/util/constants.ts similarity index 100% rename from packages/messaging-exp/src/util/constants.ts rename to packages/messaging/src/util/constants.ts diff --git a/packages/messaging-exp/src/util/errors.ts b/packages/messaging/src/util/errors.ts similarity index 100% rename from packages/messaging-exp/src/util/errors.ts rename to packages/messaging/src/util/errors.ts diff --git a/packages/messaging-exp/src/util/sw-types.ts b/packages/messaging/src/util/sw-types.ts similarity index 100% rename from packages/messaging-exp/src/util/sw-types.ts rename to packages/messaging/src/util/sw-types.ts diff --git a/packages/messaging-exp/sw/package.json b/packages/messaging/sw/package.json similarity index 100% rename from packages/messaging-exp/sw/package.json rename to packages/messaging/sw/package.json diff --git a/packages/messaging-exp/tsconfig.json b/packages/messaging/tsconfig.json similarity index 100% rename from packages/messaging-exp/tsconfig.json rename to packages/messaging/tsconfig.json diff --git a/packages/performance-exp/.eslintrc.js b/packages/performance/.eslintrc.js similarity index 100% rename from packages/performance-exp/.eslintrc.js rename to packages/performance/.eslintrc.js diff --git a/packages/performance-exp/README.md b/packages/performance/README.md similarity index 100% rename from packages/performance-exp/README.md rename to packages/performance/README.md diff --git a/packages/performance-exp/api-extractor.json b/packages/performance/api-extractor.json similarity index 100% rename from packages/performance-exp/api-extractor.json rename to packages/performance/api-extractor.json diff --git a/packages/performance-exp/karma.conf.js b/packages/performance/karma.conf.js similarity index 100% rename from packages/performance-exp/karma.conf.js rename to packages/performance/karma.conf.js diff --git a/packages/performance-exp/package.json b/packages/performance/package.json similarity index 100% rename from packages/performance-exp/package.json rename to packages/performance/package.json diff --git a/packages/performance-exp/rollup.config.js b/packages/performance/rollup.config.js similarity index 100% rename from packages/performance-exp/rollup.config.js rename to packages/performance/rollup.config.js diff --git a/packages/performance-exp/rollup.config.release.js b/packages/performance/rollup.config.release.js similarity index 100% rename from packages/performance-exp/rollup.config.release.js rename to packages/performance/rollup.config.release.js diff --git a/packages/performance-exp/rollup.shared.js b/packages/performance/rollup.shared.js similarity index 100% rename from packages/performance-exp/rollup.shared.js rename to packages/performance/rollup.shared.js diff --git a/packages/performance-exp/src/constants.ts b/packages/performance/src/constants.ts similarity index 100% rename from packages/performance-exp/src/constants.ts rename to packages/performance/src/constants.ts diff --git a/packages/performance-exp/src/controllers/perf.test.ts b/packages/performance/src/controllers/perf.test.ts similarity index 100% rename from packages/performance-exp/src/controllers/perf.test.ts rename to packages/performance/src/controllers/perf.test.ts diff --git a/packages/performance-exp/src/controllers/perf.ts b/packages/performance/src/controllers/perf.ts similarity index 100% rename from packages/performance-exp/src/controllers/perf.ts rename to packages/performance/src/controllers/perf.ts diff --git a/packages/performance-exp/src/index.test.ts b/packages/performance/src/index.test.ts similarity index 100% rename from packages/performance-exp/src/index.test.ts rename to packages/performance/src/index.test.ts diff --git a/packages/performance-exp/src/index.ts b/packages/performance/src/index.ts similarity index 100% rename from packages/performance-exp/src/index.ts rename to packages/performance/src/index.ts diff --git a/packages/performance-exp/src/public_types.ts b/packages/performance/src/public_types.ts similarity index 100% rename from packages/performance-exp/src/public_types.ts rename to packages/performance/src/public_types.ts diff --git a/packages/performance-exp/src/resources/network_request.test.ts b/packages/performance/src/resources/network_request.test.ts similarity index 100% rename from packages/performance-exp/src/resources/network_request.test.ts rename to packages/performance/src/resources/network_request.test.ts diff --git a/packages/performance-exp/src/resources/network_request.ts b/packages/performance/src/resources/network_request.ts similarity index 100% rename from packages/performance-exp/src/resources/network_request.ts rename to packages/performance/src/resources/network_request.ts diff --git a/packages/performance-exp/src/resources/trace.test.ts b/packages/performance/src/resources/trace.test.ts similarity index 100% rename from packages/performance-exp/src/resources/trace.test.ts rename to packages/performance/src/resources/trace.test.ts diff --git a/packages/performance-exp/src/resources/trace.ts b/packages/performance/src/resources/trace.ts similarity index 100% rename from packages/performance-exp/src/resources/trace.ts rename to packages/performance/src/resources/trace.ts diff --git a/packages/performance-exp/src/services/api_service.test.ts b/packages/performance/src/services/api_service.test.ts similarity index 100% rename from packages/performance-exp/src/services/api_service.test.ts rename to packages/performance/src/services/api_service.test.ts diff --git a/packages/performance-exp/src/services/api_service.ts b/packages/performance/src/services/api_service.ts similarity index 100% rename from packages/performance-exp/src/services/api_service.ts rename to packages/performance/src/services/api_service.ts diff --git a/packages/performance-exp/src/services/iid_service.test.ts b/packages/performance/src/services/iid_service.test.ts similarity index 100% rename from packages/performance-exp/src/services/iid_service.test.ts rename to packages/performance/src/services/iid_service.test.ts diff --git a/packages/performance-exp/src/services/iid_service.ts b/packages/performance/src/services/iid_service.ts similarity index 100% rename from packages/performance-exp/src/services/iid_service.ts rename to packages/performance/src/services/iid_service.ts diff --git a/packages/performance-exp/src/services/initialization_service.test.ts b/packages/performance/src/services/initialization_service.test.ts similarity index 100% rename from packages/performance-exp/src/services/initialization_service.test.ts rename to packages/performance/src/services/initialization_service.test.ts diff --git a/packages/performance-exp/src/services/initialization_service.ts b/packages/performance/src/services/initialization_service.ts similarity index 100% rename from packages/performance-exp/src/services/initialization_service.ts rename to packages/performance/src/services/initialization_service.ts diff --git a/packages/performance-exp/src/services/oob_resources_service.test.ts b/packages/performance/src/services/oob_resources_service.test.ts similarity index 100% rename from packages/performance-exp/src/services/oob_resources_service.test.ts rename to packages/performance/src/services/oob_resources_service.test.ts diff --git a/packages/performance-exp/src/services/oob_resources_service.ts b/packages/performance/src/services/oob_resources_service.ts similarity index 100% rename from packages/performance-exp/src/services/oob_resources_service.ts rename to packages/performance/src/services/oob_resources_service.ts diff --git a/packages/performance-exp/src/services/perf_logger.test.ts b/packages/performance/src/services/perf_logger.test.ts similarity index 100% rename from packages/performance-exp/src/services/perf_logger.test.ts rename to packages/performance/src/services/perf_logger.test.ts diff --git a/packages/performance-exp/src/services/perf_logger.ts b/packages/performance/src/services/perf_logger.ts similarity index 100% rename from packages/performance-exp/src/services/perf_logger.ts rename to packages/performance/src/services/perf_logger.ts diff --git a/packages/performance-exp/src/services/remote_config_service.test.ts b/packages/performance/src/services/remote_config_service.test.ts similarity index 100% rename from packages/performance-exp/src/services/remote_config_service.test.ts rename to packages/performance/src/services/remote_config_service.test.ts diff --git a/packages/performance-exp/src/services/remote_config_service.ts b/packages/performance/src/services/remote_config_service.ts similarity index 100% rename from packages/performance-exp/src/services/remote_config_service.ts rename to packages/performance/src/services/remote_config_service.ts diff --git a/packages/performance-exp/src/services/settings_service.ts b/packages/performance/src/services/settings_service.ts similarity index 100% rename from packages/performance-exp/src/services/settings_service.ts rename to packages/performance/src/services/settings_service.ts diff --git a/packages/performance-exp/src/services/transport_service.test.ts b/packages/performance/src/services/transport_service.test.ts similarity index 100% rename from packages/performance-exp/src/services/transport_service.test.ts rename to packages/performance/src/services/transport_service.test.ts diff --git a/packages/performance-exp/src/services/transport_service.ts b/packages/performance/src/services/transport_service.ts similarity index 100% rename from packages/performance-exp/src/services/transport_service.ts rename to packages/performance/src/services/transport_service.ts diff --git a/packages/performance-exp/src/utils/app_utils.ts b/packages/performance/src/utils/app_utils.ts similarity index 100% rename from packages/performance-exp/src/utils/app_utils.ts rename to packages/performance/src/utils/app_utils.ts diff --git a/packages/performance-exp/src/utils/attribute_utils.test.ts b/packages/performance/src/utils/attribute_utils.test.ts similarity index 100% rename from packages/performance-exp/src/utils/attribute_utils.test.ts rename to packages/performance/src/utils/attribute_utils.test.ts diff --git a/packages/performance-exp/src/utils/attributes_utils.ts b/packages/performance/src/utils/attributes_utils.ts similarity index 100% rename from packages/performance-exp/src/utils/attributes_utils.ts rename to packages/performance/src/utils/attributes_utils.ts diff --git a/packages/performance-exp/src/utils/console_logger.ts b/packages/performance/src/utils/console_logger.ts similarity index 100% rename from packages/performance-exp/src/utils/console_logger.ts rename to packages/performance/src/utils/console_logger.ts diff --git a/packages/performance-exp/src/utils/errors.ts b/packages/performance/src/utils/errors.ts similarity index 100% rename from packages/performance-exp/src/utils/errors.ts rename to packages/performance/src/utils/errors.ts diff --git a/packages/performance-exp/src/utils/metric_utils.test.ts b/packages/performance/src/utils/metric_utils.test.ts similarity index 100% rename from packages/performance-exp/src/utils/metric_utils.test.ts rename to packages/performance/src/utils/metric_utils.test.ts diff --git a/packages/performance-exp/src/utils/metric_utils.ts b/packages/performance/src/utils/metric_utils.ts similarity index 100% rename from packages/performance-exp/src/utils/metric_utils.ts rename to packages/performance/src/utils/metric_utils.ts diff --git a/packages/performance-exp/src/utils/string_merger.test.ts b/packages/performance/src/utils/string_merger.test.ts similarity index 100% rename from packages/performance-exp/src/utils/string_merger.test.ts rename to packages/performance/src/utils/string_merger.test.ts diff --git a/packages/performance-exp/src/utils/string_merger.ts b/packages/performance/src/utils/string_merger.ts similarity index 100% rename from packages/performance-exp/src/utils/string_merger.ts rename to packages/performance/src/utils/string_merger.ts diff --git a/packages/performance-exp/test/setup.ts b/packages/performance/test/setup.ts similarity index 100% rename from packages/performance-exp/test/setup.ts rename to packages/performance/test/setup.ts diff --git a/packages/performance-exp/tsconfig.json b/packages/performance/tsconfig.json similarity index 100% rename from packages/performance-exp/tsconfig.json rename to packages/performance/tsconfig.json diff --git a/packages/remote-config-exp/.eslintrc.js b/packages/remote-config/.eslintrc.js similarity index 100% rename from packages/remote-config-exp/.eslintrc.js rename to packages/remote-config/.eslintrc.js diff --git a/packages/remote-config-exp/.npmignore b/packages/remote-config/.npmignore similarity index 100% rename from packages/remote-config-exp/.npmignore rename to packages/remote-config/.npmignore diff --git a/packages/remote-config-exp/README.md b/packages/remote-config/README.md similarity index 100% rename from packages/remote-config-exp/README.md rename to packages/remote-config/README.md diff --git a/packages/remote-config-exp/api-extractor.json b/packages/remote-config/api-extractor.json similarity index 100% rename from packages/remote-config-exp/api-extractor.json rename to packages/remote-config/api-extractor.json diff --git a/packages/remote-config-exp/karma.conf.js b/packages/remote-config/karma.conf.js similarity index 100% rename from packages/remote-config-exp/karma.conf.js rename to packages/remote-config/karma.conf.js diff --git a/packages/remote-config-exp/package.json b/packages/remote-config/package.json similarity index 100% rename from packages/remote-config-exp/package.json rename to packages/remote-config/package.json diff --git a/packages/remote-config-exp/rollup.config.js b/packages/remote-config/rollup.config.js similarity index 100% rename from packages/remote-config-exp/rollup.config.js rename to packages/remote-config/rollup.config.js diff --git a/packages/remote-config-exp/rollup.config.release.js b/packages/remote-config/rollup.config.release.js similarity index 100% rename from packages/remote-config-exp/rollup.config.release.js rename to packages/remote-config/rollup.config.release.js diff --git a/packages/remote-config-exp/rollup.shared.js b/packages/remote-config/rollup.shared.js similarity index 100% rename from packages/remote-config-exp/rollup.shared.js rename to packages/remote-config/rollup.shared.js diff --git a/packages/remote-config-exp/src/api.ts b/packages/remote-config/src/api.ts similarity index 100% rename from packages/remote-config-exp/src/api.ts rename to packages/remote-config/src/api.ts diff --git a/packages/remote-config-exp/src/api2.ts b/packages/remote-config/src/api2.ts similarity index 100% rename from packages/remote-config-exp/src/api2.ts rename to packages/remote-config/src/api2.ts diff --git a/packages/remote-config-exp/src/client/caching_client.ts b/packages/remote-config/src/client/caching_client.ts similarity index 100% rename from packages/remote-config-exp/src/client/caching_client.ts rename to packages/remote-config/src/client/caching_client.ts diff --git a/packages/remote-config-exp/src/client/remote_config_fetch_client.ts b/packages/remote-config/src/client/remote_config_fetch_client.ts similarity index 100% rename from packages/remote-config-exp/src/client/remote_config_fetch_client.ts rename to packages/remote-config/src/client/remote_config_fetch_client.ts diff --git a/packages/remote-config-exp/src/client/rest_client.ts b/packages/remote-config/src/client/rest_client.ts similarity index 100% rename from packages/remote-config-exp/src/client/rest_client.ts rename to packages/remote-config/src/client/rest_client.ts diff --git a/packages/remote-config-exp/src/client/retrying_client.ts b/packages/remote-config/src/client/retrying_client.ts similarity index 100% rename from packages/remote-config-exp/src/client/retrying_client.ts rename to packages/remote-config/src/client/retrying_client.ts diff --git a/packages/remote-config-exp/src/constants.ts b/packages/remote-config/src/constants.ts similarity index 100% rename from packages/remote-config-exp/src/constants.ts rename to packages/remote-config/src/constants.ts diff --git a/packages/remote-config-exp/src/errors.ts b/packages/remote-config/src/errors.ts similarity index 100% rename from packages/remote-config-exp/src/errors.ts rename to packages/remote-config/src/errors.ts diff --git a/packages/remote-config-exp/src/index.ts b/packages/remote-config/src/index.ts similarity index 100% rename from packages/remote-config-exp/src/index.ts rename to packages/remote-config/src/index.ts diff --git a/packages/remote-config-exp/src/language.ts b/packages/remote-config/src/language.ts similarity index 100% rename from packages/remote-config-exp/src/language.ts rename to packages/remote-config/src/language.ts diff --git a/packages/remote-config-exp/src/public_types.ts b/packages/remote-config/src/public_types.ts similarity index 100% rename from packages/remote-config-exp/src/public_types.ts rename to packages/remote-config/src/public_types.ts diff --git a/packages/remote-config-exp/src/register.ts b/packages/remote-config/src/register.ts similarity index 100% rename from packages/remote-config-exp/src/register.ts rename to packages/remote-config/src/register.ts diff --git a/packages/remote-config-exp/src/remote_config.ts b/packages/remote-config/src/remote_config.ts similarity index 100% rename from packages/remote-config-exp/src/remote_config.ts rename to packages/remote-config/src/remote_config.ts diff --git a/packages/remote-config-exp/src/storage/storage.ts b/packages/remote-config/src/storage/storage.ts similarity index 100% rename from packages/remote-config-exp/src/storage/storage.ts rename to packages/remote-config/src/storage/storage.ts diff --git a/packages/remote-config-exp/src/storage/storage_cache.ts b/packages/remote-config/src/storage/storage_cache.ts similarity index 100% rename from packages/remote-config-exp/src/storage/storage_cache.ts rename to packages/remote-config/src/storage/storage_cache.ts diff --git a/packages/remote-config-exp/src/value.ts b/packages/remote-config/src/value.ts similarity index 100% rename from packages/remote-config-exp/src/value.ts rename to packages/remote-config/src/value.ts diff --git a/packages/remote-config-exp/test/client/caching_client.test.ts b/packages/remote-config/test/client/caching_client.test.ts similarity index 100% rename from packages/remote-config-exp/test/client/caching_client.test.ts rename to packages/remote-config/test/client/caching_client.test.ts diff --git a/packages/remote-config-exp/test/client/rest_client.test.ts b/packages/remote-config/test/client/rest_client.test.ts similarity index 100% rename from packages/remote-config-exp/test/client/rest_client.test.ts rename to packages/remote-config/test/client/rest_client.test.ts diff --git a/packages/remote-config-exp/test/client/retrying_client.test.ts b/packages/remote-config/test/client/retrying_client.test.ts similarity index 100% rename from packages/remote-config-exp/test/client/retrying_client.test.ts rename to packages/remote-config/test/client/retrying_client.test.ts diff --git a/packages/remote-config-exp/test/errors.test.ts b/packages/remote-config/test/errors.test.ts similarity index 100% rename from packages/remote-config-exp/test/errors.test.ts rename to packages/remote-config/test/errors.test.ts diff --git a/packages/remote-config-exp/test/language.test.ts b/packages/remote-config/test/language.test.ts similarity index 100% rename from packages/remote-config-exp/test/language.test.ts rename to packages/remote-config/test/language.test.ts diff --git a/packages/remote-config-exp/test/remote_config.test.ts b/packages/remote-config/test/remote_config.test.ts similarity index 100% rename from packages/remote-config-exp/test/remote_config.test.ts rename to packages/remote-config/test/remote_config.test.ts diff --git a/packages/remote-config-exp/test/setup.ts b/packages/remote-config/test/setup.ts similarity index 100% rename from packages/remote-config-exp/test/setup.ts rename to packages/remote-config/test/setup.ts diff --git a/packages/remote-config-exp/test/storage/storage.test.ts b/packages/remote-config/test/storage/storage.test.ts similarity index 100% rename from packages/remote-config-exp/test/storage/storage.test.ts rename to packages/remote-config/test/storage/storage.test.ts diff --git a/packages/remote-config-exp/test/storage/storage_cache.test.ts b/packages/remote-config/test/storage/storage_cache.test.ts similarity index 100% rename from packages/remote-config-exp/test/storage/storage_cache.test.ts rename to packages/remote-config/test/storage/storage_cache.test.ts diff --git a/packages/remote-config-exp/test/value.test.ts b/packages/remote-config/test/value.test.ts similarity index 100% rename from packages/remote-config-exp/test/value.test.ts rename to packages/remote-config/test/value.test.ts diff --git a/packages/remote-config-exp/test_app/index.html b/packages/remote-config/test_app/index.html similarity index 100% rename from packages/remote-config-exp/test_app/index.html rename to packages/remote-config/test_app/index.html diff --git a/packages/remote-config-exp/test_app/index.js b/packages/remote-config/test_app/index.js similarity index 100% rename from packages/remote-config-exp/test_app/index.js rename to packages/remote-config/test_app/index.js diff --git a/packages/remote-config-exp/tsconfig.json b/packages/remote-config/tsconfig.json similarity index 100% rename from packages/remote-config-exp/tsconfig.json rename to packages/remote-config/tsconfig.json From 1f62cd83f9c59b28385e7f07224bb938f96356c3 Mon Sep 17 00:00:00 2001 From: Feiyang1 Date: Wed, 18 Aug 2021 14:57:07 -0700 Subject: [PATCH 03/38] migrate app and app-compat --- .../api-review/{app-exp.api.md => app.api.md} | 224 +++++++++--------- packages/app-compat/README.md | 2 +- packages/app-compat/package.json | 12 +- packages/app-compat/rollup.config.release.js | 122 ---------- packages/app-compat/src/firebaseApp.ts | 2 +- .../app-compat/src/firebaseNamespaceCore.ts | 4 +- .../app-compat/src/lite/firebaseAppLite.ts | 2 +- .../app-compat/src/registerCoreComponents.ts | 2 +- .../app-compat/test/firebaseAppCompat.test.ts | 2 +- packages/app/api-extractor.json | 2 +- packages/app/package.json | 8 +- packages/app/src/api.ts | 2 +- 12 files changed, 129 insertions(+), 255 deletions(-) rename common/api-review/{app-exp.api.md => app.api.md} (95%) delete mode 100644 packages/app-compat/rollup.config.release.js diff --git a/common/api-review/app-exp.api.md b/common/api-review/app.api.md similarity index 95% rename from common/api-review/app-exp.api.md rename to common/api-review/app.api.md index 75f20fb2612..4744c91f503 100644 --- a/common/api-review/app-exp.api.md +++ b/common/api-review/app.api.md @@ -1,112 +1,112 @@ -## API Report File for "@firebase/app-exp" - -> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). - -```ts - -import { Component } from '@firebase/component'; -import { ComponentContainer } from '@firebase/component'; -import { LogCallback } from '@firebase/logger'; -import { LogLevelString } from '@firebase/logger'; -import { LogOptions } from '@firebase/logger'; -import { Name } from '@firebase/component'; -import { Provider } from '@firebase/component'; - -// @internal (undocumented) -export function _addComponent(app: FirebaseApp, component: Component): void; - -// @internal (undocumented) -export function _addOrOverwriteComponent(app: FirebaseApp, component: Component): void; - -// @internal (undocumented) -export const _apps: Map; - -// @internal -export function _clearComponents(): void; - -// @internal -export const _components: Map>; - -// @internal -export const _DEFAULT_ENTRY_NAME = "[DEFAULT]"; - -// @public -export function deleteApp(app: FirebaseApp): Promise; - -// @public -export interface FirebaseApp { - automaticDataCollectionEnabled: boolean; - readonly name: string; - readonly options: FirebaseOptions; -} - -// @internal (undocumented) -export interface _FirebaseAppInternal extends FirebaseApp { - // (undocumented) - checkDestroyed(): void; - // (undocumented) - container: ComponentContainer; - // (undocumented) - isDeleted: boolean; -} - -// @public -export interface FirebaseAppSettings { - automaticDataCollectionEnabled?: boolean; - name?: string; -} - -// @public -export interface FirebaseOptions { - apiKey?: string; - appId?: string; - authDomain?: string; - databaseURL?: string; - measurementId?: string; - messagingSenderId?: string; - projectId?: string; - storageBucket?: string; -} - -// @internal (undocumented) -export interface _FirebaseService { - // (undocumented) - app: FirebaseApp; - _delete(): Promise; -} - -// @public -export function getApp(name?: string): FirebaseApp; - -// @public -export function getApps(): FirebaseApp[]; - -// @internal (undocumented) -export function _getProvider(app: FirebaseApp, name: T): Provider; - -// @public -export function initializeApp(options: FirebaseOptions, name?: string): FirebaseApp; - -// @public -export function initializeApp(options: FirebaseOptions, config?: FirebaseAppSettings): FirebaseApp; - -// @public -export function onLog(logCallback: LogCallback | null, options?: LogOptions): void; - -// @internal (undocumented) -export function _registerComponent(component: Component): boolean; - -// @public -export function registerVersion(libraryKeyOrName: string, version: string, variant?: string): void; - -// @internal (undocumented) -export function _removeServiceInstance(app: FirebaseApp, name: T, instanceIdentifier?: string): void; - -// @public -export const SDK_VERSION: string; - -// @public -export function setLogLevel(logLevel: LogLevelString): void; - - -``` +## API Report File for "@firebase/app" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts + +import { Component } from '@firebase/component'; +import { ComponentContainer } from '@firebase/component'; +import { LogCallback } from '@firebase/logger'; +import { LogLevelString } from '@firebase/logger'; +import { LogOptions } from '@firebase/logger'; +import { Name } from '@firebase/component'; +import { Provider } from '@firebase/component'; + +// @internal (undocumented) +export function _addComponent(app: FirebaseApp, component: Component): void; + +// @internal (undocumented) +export function _addOrOverwriteComponent(app: FirebaseApp, component: Component): void; + +// @internal (undocumented) +export const _apps: Map; + +// @internal +export function _clearComponents(): void; + +// @internal +export const _components: Map>; + +// @internal +export const _DEFAULT_ENTRY_NAME = "[DEFAULT]"; + +// @public +export function deleteApp(app: FirebaseApp): Promise; + +// @public +export interface FirebaseApp { + automaticDataCollectionEnabled: boolean; + readonly name: string; + readonly options: FirebaseOptions; +} + +// @internal (undocumented) +export interface _FirebaseAppInternal extends FirebaseApp { + // (undocumented) + checkDestroyed(): void; + // (undocumented) + container: ComponentContainer; + // (undocumented) + isDeleted: boolean; +} + +// @public +export interface FirebaseAppSettings { + automaticDataCollectionEnabled?: boolean; + name?: string; +} + +// @public +export interface FirebaseOptions { + apiKey?: string; + appId?: string; + authDomain?: string; + databaseURL?: string; + measurementId?: string; + messagingSenderId?: string; + projectId?: string; + storageBucket?: string; +} + +// @internal (undocumented) +export interface _FirebaseService { + // (undocumented) + app: FirebaseApp; + _delete(): Promise; +} + +// @public +export function getApp(name?: string): FirebaseApp; + +// @public +export function getApps(): FirebaseApp[]; + +// @internal (undocumented) +export function _getProvider(app: FirebaseApp, name: T): Provider; + +// @public +export function initializeApp(options: FirebaseOptions, name?: string): FirebaseApp; + +// @public +export function initializeApp(options: FirebaseOptions, config?: FirebaseAppSettings): FirebaseApp; + +// @public +export function onLog(logCallback: LogCallback | null, options?: LogOptions): void; + +// @internal (undocumented) +export function _registerComponent(component: Component): boolean; + +// @public +export function registerVersion(libraryKeyOrName: string, version: string, variant?: string): void; + +// @internal (undocumented) +export function _removeServiceInstance(app: FirebaseApp, name: T, instanceIdentifier?: string): void; + +// @public +export const SDK_VERSION: string; + +// @public +export function setLogLevel(logLevel: LogLevelString): void; + + +``` diff --git a/packages/app-compat/README.md b/packages/app-compat/README.md index bb7e8ac3386..7077bc70433 100644 --- a/packages/app-compat/README.md +++ b/packages/app-compat/README.md @@ -1,5 +1,5 @@ # @firebase/app-compat -This is the compat package that recreates the v7 APIs. +This is the compatibility layer for the Firebase App package, which recreates the v8 API. **This package is not intended for direct usage, and should only be used via the officially supported [firebase](https://www.npmjs.com/package/firebase) package.** diff --git a/packages/app-compat/package.json b/packages/app-compat/package.json index 39c776d5999..bc8374486d7 100644 --- a/packages/app-compat/package.json +++ b/packages/app-compat/package.json @@ -1,9 +1,8 @@ { "name": "@firebase/app-compat", - "version": "0.0.900", + "version": "0.1.0", "description": "The primary entrypoint to the Firebase JS SDK", "author": "Firebase (https://firebase.google.com/)", - "private": true, "main": "dist/index.cjs.js", "browser": "dist/index.esm2017.js", "module": "dist/index.esm2017.js", @@ -16,7 +15,6 @@ "lint": "eslint -c .eslintrc.js '**/*.ts' --ignore-path '../../.gitignore'", "lint:fix": "eslint --fix -c .eslintrc.js '**/*.ts' --ignore-path '../../.gitignore'", "build": "rollup -c", - "build:release": "rollup -c rollup.config.release.js", "build:deps": "lerna run --scope @firebase/app-compat --include-dependencies build", "dev": "rollup -c -w", "test": "run-p lint test:all", @@ -28,13 +26,11 @@ }, "license": "Apache-2.0", "dependencies": { - "@firebase/app-exp": "0.0.900", + "@firebase/app": "0.6.30", "@firebase/util": "1.2.0", "@firebase/logger": "0.2.6", "@firebase/component": "0.5.5", - "tslib": "^2.1.0", - "dom-storage": "2.1.0", - "xmlhttprequest": "1.8.0" + "tslib": "^2.1.0" }, "devDependencies": { "rollup": "2.52.2", @@ -44,7 +40,7 @@ "typescript": "4.2.2" }, "repository": { - "directory": "packages-exp/app-compat", + "directory": "packages/app-compat", "type": "git", "url": "https://github.com/firebase/firebase-js-sdk.git" }, diff --git a/packages/app-compat/rollup.config.release.js b/packages/app-compat/rollup.config.release.js deleted file mode 100644 index a8b90c16fae..00000000000 --- a/packages/app-compat/rollup.config.release.js +++ /dev/null @@ -1,122 +0,0 @@ -/** - * @license - * Copyright 2018 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import typescriptPlugin from 'rollup-plugin-typescript2'; -import json from '@rollup/plugin-json'; -import typescript from 'typescript'; -import pkg from './package.json'; -import { importPathTransformer } from '../../scripts/exp/ts-transform-import-path'; - -const deps = [ - ...Object.keys(Object.assign({}, pkg.peerDependencies, pkg.dependencies)), - '@firebase/app' -]; - -/** - * ES5 Builds - */ -const es5BuildPlugins = [ - typescriptPlugin({ - typescript, - clean: true, - abortOnError: false, - transformers: [importPathTransformer] - }), - json() -]; - -const es5Builds = [ - { - input: 'src/index.ts', - output: [ - { file: pkg.main, format: 'cjs', sourcemap: true }, - { file: pkg.esm5, format: 'es', sourcemap: true } - ], - plugins: es5BuildPlugins, - external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)), - treeshake: { - moduleSideEffects: false - } - }, - { - input: 'src/index.lite.ts', - output: { - file: pkg['lite-esm5'], - format: 'es', - sourcemap: true - }, - plugins: es5BuildPlugins, - external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)), - treeshake: { - moduleSideEffects: false - } - } -]; - -/** - * ES2017 Builds - */ -const es2017BuildPlugins = [ - typescriptPlugin({ - typescript, - clean: true, - abortOnError: false, - tsconfigOverride: { - compilerOptions: { - target: 'es2017' - } - }, - transformers: [importPathTransformer] - }), - json({ - preferConst: true - }) -]; - -const es2017Builds = [ - /** - * Browser Builds - */ - { - input: 'src/index.ts', - output: { - file: pkg.browser, - format: 'es', - sourcemap: true - }, - plugins: es2017BuildPlugins, - external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)), - treeshake: { - moduleSideEffects: false - } - }, - { - input: 'src/index.lite.ts', - output: { - file: pkg.lite, - format: 'es', - sourcemap: true - }, - plugins: es2017BuildPlugins, - external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)), - treeshake: { - moduleSideEffects: false - } - } -]; - -export default [...es5Builds, ...es2017Builds]; diff --git a/packages/app-compat/src/firebaseApp.ts b/packages/app-compat/src/firebaseApp.ts index e3ebe336bc0..8697a4a14ff 100644 --- a/packages/app-compat/src/firebaseApp.ts +++ b/packages/app-compat/src/firebaseApp.ts @@ -29,7 +29,7 @@ import { _addOrOverwriteComponent, _DEFAULT_ENTRY_NAME, _FirebaseAppInternal as _FirebaseAppExp -} from '@firebase/app-exp'; +} from '@firebase/app'; import { _FirebaseService, _FirebaseNamespace } from './types'; import { Compat } from '@firebase/util'; diff --git a/packages/app-compat/src/firebaseNamespaceCore.ts b/packages/app-compat/src/firebaseNamespaceCore.ts index e5d96409ae5..2acd29581e4 100644 --- a/packages/app-compat/src/firebaseNamespaceCore.ts +++ b/packages/app-compat/src/firebaseNamespaceCore.ts @@ -21,8 +21,8 @@ import { _FirebaseService, FirebaseServiceNamespace } from './types'; -import * as modularAPIs from '@firebase/app-exp'; -import { _FirebaseAppInternal as _FirebaseAppExp } from '@firebase/app-exp'; +import * as modularAPIs from '@firebase/app'; +import { _FirebaseAppInternal as _FirebaseAppExp } from '@firebase/app'; import { Component, ComponentType, Name } from '@firebase/component'; import { deepExtend, contains } from '@firebase/util'; diff --git a/packages/app-compat/src/lite/firebaseAppLite.ts b/packages/app-compat/src/lite/firebaseAppLite.ts index 4a0f2372051..247d8caa1e4 100644 --- a/packages/app-compat/src/lite/firebaseAppLite.ts +++ b/packages/app-compat/src/lite/firebaseAppLite.ts @@ -22,7 +22,7 @@ import { _addComponent, _DEFAULT_ENTRY_NAME, _FirebaseAppInternal as FirebaseAppExp -} from '@firebase/app-exp'; +} from '@firebase/app'; import { Component, ComponentType, Name } from '@firebase/component'; import { Compat } from '@firebase/util'; diff --git a/packages/app-compat/src/registerCoreComponents.ts b/packages/app-compat/src/registerCoreComponents.ts index 3b2eab206b7..187aa3c4f9c 100644 --- a/packages/app-compat/src/registerCoreComponents.ts +++ b/packages/app-compat/src/registerCoreComponents.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { registerVersion } from '@firebase/app-exp'; +import { registerVersion } from '@firebase/app'; import { name, version } from '../package.json'; diff --git a/packages/app-compat/test/firebaseAppCompat.test.ts b/packages/app-compat/test/firebaseAppCompat.test.ts index 83c0367f569..f12a73e61a8 100644 --- a/packages/app-compat/test/firebaseAppCompat.test.ts +++ b/packages/app-compat/test/firebaseAppCompat.test.ts @@ -20,7 +20,7 @@ import { expect } from 'chai'; import { stub } from 'sinon'; import { FirebaseNamespace, FirebaseOptions } from '../src/public-types'; import { _FirebaseApp, _FirebaseNamespace } from '../src/types'; -import { _components, _clearComponents } from '@firebase/app-exp'; +import { _components, _clearComponents } from '@firebase/app'; import { Component, ComponentType, diff --git a/packages/app/api-extractor.json b/packages/app/api-extractor.json index cb3fc26988e..34d3466f091 100644 --- a/packages/app/api-extractor.json +++ b/packages/app/api-extractor.json @@ -1,7 +1,7 @@ { "extends": "../../config/api-extractor.json", // Point it to your entry point d.ts file. - "mainEntryPointFilePath": "/dist/packages-exp/app-exp/src/index.d.ts", + "mainEntryPointFilePath": "/dist/app/src/index.d.ts", "dtsRollup": { "enabled": true, "untrimmedFilePath": "/dist/.d.ts", diff --git a/packages/app/package.json b/packages/app/package.json index e6d207c7103..112ba8cb002 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -25,8 +25,8 @@ "predoc": "node ../../scripts/exp/remove-exp.js temp", "doc": "api-documenter markdown --input temp --output docs", "build:doc": "yarn build && yarn doc", - "typings:public": "node ../../scripts/exp/use_typings.js ./dist/app-exp-public.d.ts", - "typings:internal": "node ../../scripts/exp/use_typings.js ./dist/app-exp.d.ts" + "typings:public": "node ../../scripts/exp/use_typings.js ./dist/app-public.d.ts", + "typings:internal": "node ../../scripts/exp/use_typings.js ./dist/app.d.ts" }, "dependencies": { "@firebase/util": "1.2.0", @@ -43,14 +43,14 @@ "typescript": "4.2.2" }, "repository": { - "directory": "packages-exp/app-exp", + "directory": "packages/app", "type": "git", "url": "https://github.com/firebase/firebase-js-sdk.git" }, "bugs": { "url": "https://github.com/firebase/firebase-js-sdk/issues" }, - "typings": "./dist/packages-exp/app-exp/src/index.d.ts", + "typings": "./dist/app/src/index.d.ts", "nyc": { "extension": [ ".ts" diff --git a/packages/app/src/api.ts b/packages/app/src/api.ts index 7368a1671fe..e5b3c8e6412 100644 --- a/packages/app/src/api.ts +++ b/packages/app/src/api.ts @@ -28,7 +28,7 @@ import { Name, ComponentType } from '@firebase/component'; -import { version } from '../../firebase-exp/package.json'; +import { version } from '../../firebase/package.json'; import { FirebaseAppImpl } from './firebaseApp'; import { _apps, _components, _registerComponent } from './internal'; import { logger } from './logger'; From 2a9e57575cb9303ddf9054010582d7ece0d055d3 Mon Sep 17 00:00:00 2001 From: Feiyang1 Date: Wed, 18 Aug 2021 15:39:41 -0700 Subject: [PATCH 04/38] migrate installations and analytics --- ...{analytics-exp.api.md => analytics.api.md} | 820 +++++++++--------- ...ations-exp.api.md => installations.api.md} | 82 +- packages/analytics-compat/package.json | 6 +- packages/analytics-compat/rollup.config.js | 40 +- .../analytics-compat/rollup.config.release.js | 73 -- packages/analytics-compat/rollup.shared.js | 54 -- packages/analytics-compat/src/index.ts | 4 +- packages/analytics-compat/src/service.test.ts | 2 +- packages/analytics-compat/src/service.ts | 2 +- packages/analytics-types/index.d.ts | 2 +- packages/analytics/CHANGELOG.md | 208 +++++ packages/analytics/package.json | 18 +- packages/analytics/rollup.config.js | 43 +- packages/analytics/rollup.shared.js | 54 -- packages/analytics/src/api.test.ts | 2 +- packages/analytics/src/api.ts | 6 +- packages/analytics/src/constants.ts | 2 +- packages/analytics/src/factory.ts | 4 +- packages/analytics/src/get-config.ts | 2 +- packages/analytics/src/index.test.ts | 4 +- packages/analytics/src/index.ts | 8 +- .../src/initialize-analytics.test.ts | 4 +- .../analytics/src/initialize-analytics.ts | 4 +- packages/analytics/src/public-types.ts | 2 +- .../testing/get-fake-firebase-services.ts | 8 +- .../testing/integration-tests/integration.ts | 4 +- packages/app-check-compat/package.json | 2 +- packages/app/CHANGELOG.md | 184 ++++ packages/app/rollup.config.js | 50 +- packages/app/rollup.config.release.js | 73 -- packages/app/rollup.shared.js | 56 -- packages/firebase/package.json | 20 +- packages/functions-compat/package.json | 2 +- packages/installations-compat/README.md | 5 + packages/installations-compat/package.json | 9 +- .../installations-compat/rollup.config.js | 35 +- .../rollup.config.release.js | 71 -- .../installations-compat/rollup.shared.js | 48 - packages/installations-compat/src/index.ts | 2 +- .../src/installationsCompat.test.ts | 2 +- .../src/installationsCompat.ts | 2 +- .../installations-compat/src/testing/util.ts | 2 +- packages/installations-types/index.d.ts | 2 +- packages/installations/CHANGELOG.md | 139 +++ packages/installations/package.json | 18 +- packages/installations/rollup.config.js | 37 +- .../installations/rollup.config.release.js | 71 -- packages/installations/rollup.shared.js | 51 -- .../src/api/get-installations.ts | 4 +- .../installations/src/functions/config.ts | 14 +- .../src/helpers/extract-app-config.ts | 2 +- packages/installations/src/index.ts | 2 +- .../src/interfaces/installation-impl.ts | 2 +- .../src/interfaces/public-types.ts | 4 +- .../src/testing/fake-generators.ts | 2 +- packages/messaging-compat/package.json | 2 +- packages/performance-compat/package.json | 2 +- packages/remote-config-compat/package.json | 2 +- 58 files changed, 1232 insertions(+), 1143 deletions(-) rename common/api-review/{analytics-exp.api.md => analytics.api.md} (96%) rename common/api-review/{installations-exp.api.md => installations.api.md} (86%) delete mode 100644 packages/analytics-compat/rollup.config.release.js delete mode 100644 packages/analytics-compat/rollup.shared.js create mode 100644 packages/analytics/CHANGELOG.md delete mode 100644 packages/analytics/rollup.shared.js create mode 100644 packages/app/CHANGELOG.md delete mode 100644 packages/app/rollup.config.release.js delete mode 100644 packages/app/rollup.shared.js create mode 100644 packages/installations-compat/README.md delete mode 100644 packages/installations-compat/rollup.config.release.js delete mode 100644 packages/installations-compat/rollup.shared.js create mode 100644 packages/installations/CHANGELOG.md delete mode 100644 packages/installations/rollup.config.release.js delete mode 100644 packages/installations/rollup.shared.js diff --git a/common/api-review/analytics-exp.api.md b/common/api-review/analytics.api.md similarity index 96% rename from common/api-review/analytics-exp.api.md rename to common/api-review/analytics.api.md index b7f381967a0..091c3ffe7d3 100644 --- a/common/api-review/analytics-exp.api.md +++ b/common/api-review/analytics.api.md @@ -1,410 +1,410 @@ -## API Report File for "@firebase/analytics-exp" - -> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). - -```ts - -import { FirebaseApp } from '@firebase/app-exp'; - -// @public -export interface Analytics { - app: FirebaseApp; -} - -// @public -export interface AnalyticsCallOptions { - global: boolean; -} - -// @public -export interface AnalyticsSettings { - config?: GtagConfigParams | EventParams; -} - -// @public -export interface ControlParams { - // (undocumented) - event_callback?: () => void; - // (undocumented) - event_timeout?: number; - // (undocumented) - groups?: string | string[]; - // (undocumented) - send_to?: string | string[]; -} - -// @public -export type Currency = string | number; - -// @public -export type CustomEventName = T extends EventNameString ? never : T; - -// @public -export interface CustomParams { - // (undocumented) - [key: string]: unknown; -} - -// @public -export type EventNameString = 'add_payment_info' | 'add_shipping_info' | 'add_to_cart' | 'add_to_wishlist' | 'begin_checkout' | 'checkout_progress' | 'exception' | 'generate_lead' | 'login' | 'page_view' | 'purchase' | 'refund' | 'remove_from_cart' | 'screen_view' | 'search' | 'select_content' | 'select_item' | 'select_promotion' | 'set_checkout_option' | 'share' | 'sign_up' | 'timing_complete' | 'view_cart' | 'view_item' | 'view_item_list' | 'view_promotion' | 'view_search_results'; - -// @public -export interface EventParams { - // (undocumented) - [key: string]: unknown; - // (undocumented) - affiliation?: string; - // (undocumented) - checkout_option?: string; - // (undocumented) - checkout_step?: number; - // (undocumented) - content_type?: string; - // (undocumented) - coupon?: string; - // (undocumented) - currency?: string; - // (undocumented) - description?: string; - // (undocumented) - event_category?: string; - // (undocumented) - event_label?: string; - // (undocumented) - fatal?: boolean; - firebase_screen?: string; - firebase_screen_class?: string; - // (undocumented) - item_id?: string; - // (undocumented) - item_list_id?: string; - // (undocumented) - item_list_name?: string; - // (undocumented) - items?: Item[]; - // (undocumented) - method?: string; - // (undocumented) - number?: string; - // (undocumented) - page_location?: string; - // (undocumented) - page_path?: string; - // (undocumented) - page_title?: string; - // (undocumented) - payment_type?: string; - // (undocumented) - promotion_id?: string; - // (undocumented) - promotion_name?: string; - // (undocumented) - promotions?: Promotion[]; - // (undocumented) - screen_name?: string; - // (undocumented) - search_term?: string; - // (undocumented) - shipping?: Currency; - // (undocumented) - shipping_tier?: string; - // (undocumented) - tax?: Currency; - // (undocumented) - transaction_id?: string; - // (undocumented) - value?: number; -} - -// @public -export function getAnalytics(app?: FirebaseApp): Analytics; - -// @public -export interface GtagConfigParams { - 'allow_google_signals?': boolean; - // (undocumented) - [key: string]: unknown; - 'allow_ad_personalization_signals'?: boolean; - 'cookie_domain'?: string; - 'cookie_expires'?: number; - 'cookie_flags'?: string; - 'cookie_prefix'?: string; - 'cookie_update'?: boolean; - 'page_location'?: string; - 'page_title'?: string; - 'send_page_view'?: boolean; -} - -// @public -export function initializeAnalytics(app: FirebaseApp, options?: AnalyticsSettings): Analytics; - -// @public -export function isSupported(): Promise; - -// @public -export interface Item { - // (undocumented) - affiliation?: string; - // @deprecated (undocumented) - brand?: string; - // @deprecated (undocumented) - category?: string; - // (undocumented) - coupon?: string; - // (undocumented) - creative_name?: string; - // (undocumented) - creative_slot?: string; - // (undocumented) - discount?: Currency; - // @deprecated (undocumented) - id?: string; - // (undocumented) - index?: number; - // (undocumented) - item_brand?: string; - // (undocumented) - item_category?: string; - // (undocumented) - item_category2?: string; - // (undocumented) - item_category3?: string; - // (undocumented) - item_category4?: string; - // (undocumented) - item_category5?: string; - // (undocumented) - item_id?: string; - // (undocumented) - item_list_id?: string; - // (undocumented) - item_list_name?: string; - // (undocumented) - item_name?: string; - // (undocumented) - item_variant?: string; - // (undocumented) - location_id?: string; - // @deprecated (undocumented) - name?: string; - // (undocumented) - price?: Currency; - // (undocumented) - promotion_id?: string; - // (undocumented) - promotion_name?: string; - // (undocumented) - quantity?: number; -} - -// @public -export function logEvent(analyticsInstance: Analytics, eventName: 'add_payment_info', eventParams?: { - coupon?: EventParams['coupon']; - currency?: EventParams['currency']; - items?: EventParams['items']; - payment_type?: EventParams['payment_type']; - value?: EventParams['value']; - [key: string]: any; -}, options?: AnalyticsCallOptions): void; - -// @public -export function logEvent(analyticsInstance: Analytics, eventName: 'add_shipping_info', eventParams?: { - coupon?: EventParams['coupon']; - currency?: EventParams['currency']; - items?: EventParams['items']; - shipping_tier?: EventParams['shipping_tier']; - value?: EventParams['value']; - [key: string]: any; -}, options?: AnalyticsCallOptions): void; - -// @public -export function logEvent(analyticsInstance: Analytics, eventName: 'add_to_cart' | 'add_to_wishlist' | 'remove_from_cart', eventParams?: { - currency?: EventParams['currency']; - value?: EventParams['value']; - items?: EventParams['items']; - [key: string]: any; -}, options?: AnalyticsCallOptions): void; - -// @public -export function logEvent(analyticsInstance: Analytics, eventName: 'begin_checkout', eventParams?: { - currency?: EventParams['currency']; - coupon?: EventParams['coupon']; - value?: EventParams['value']; - items?: EventParams['items']; - [key: string]: any; -}, options?: AnalyticsCallOptions): void; - -// @public -export function logEvent(analyticsInstance: Analytics, eventName: 'checkout_progress', eventParams?: { - currency?: EventParams['currency']; - coupon?: EventParams['coupon']; - value?: EventParams['value']; - items?: EventParams['items']; - checkout_step?: EventParams['checkout_step']; - checkout_option?: EventParams['checkout_option']; - [key: string]: any; -}, options?: AnalyticsCallOptions): void; - -// @public -export function logEvent(analyticsInstance: Analytics, eventName: 'exception', eventParams?: { - description?: EventParams['description']; - fatal?: EventParams['fatal']; - [key: string]: any; -}, options?: AnalyticsCallOptions): void; - -// @public -export function logEvent(analyticsInstance: Analytics, eventName: 'generate_lead', eventParams?: { - value?: EventParams['value']; - currency?: EventParams['currency']; - [key: string]: any; -}, options?: AnalyticsCallOptions): void; - -// @public -export function logEvent(analyticsInstance: Analytics, eventName: 'login', eventParams?: { - method?: EventParams['method']; - [key: string]: any; -}, options?: AnalyticsCallOptions): void; - -// @public -export function logEvent(analyticsInstance: Analytics, eventName: 'page_view', eventParams?: { - page_title?: string; - page_location?: string; - page_path?: string; - [key: string]: any; -}, options?: AnalyticsCallOptions): void; - -// @public -export function logEvent(analyticsInstance: Analytics, eventName: 'purchase' | 'refund', eventParams?: { - value?: EventParams['value']; - currency?: EventParams['currency']; - transaction_id: EventParams['transaction_id']; - tax?: EventParams['tax']; - shipping?: EventParams['shipping']; - items?: EventParams['items']; - coupon?: EventParams['coupon']; - affiliation?: EventParams['affiliation']; - [key: string]: any; -}, options?: AnalyticsCallOptions): void; - -// @public -export function logEvent(analyticsInstance: Analytics, eventName: 'screen_view', eventParams?: { - firebase_screen: EventParams['firebase_screen']; - firebase_screen_class: EventParams['firebase_screen_class']; - [key: string]: any; -}, options?: AnalyticsCallOptions): void; - -// @public -export function logEvent(analyticsInstance: Analytics, eventName: 'search' | 'view_search_results', eventParams?: { - search_term?: EventParams['search_term']; - [key: string]: any; -}, options?: AnalyticsCallOptions): void; - -// @public -export function logEvent(analyticsInstance: Analytics, eventName: 'select_content', eventParams?: { - content_type?: EventParams['content_type']; - item_id?: EventParams['item_id']; - [key: string]: any; -}, options?: AnalyticsCallOptions): void; - -// @public -export function logEvent(analyticsInstance: Analytics, eventName: 'select_item', eventParams?: { - items?: EventParams['items']; - item_list_name?: EventParams['item_list_name']; - item_list_id?: EventParams['item_list_id']; - [key: string]: any; -}, options?: AnalyticsCallOptions): void; - -// @public -export function logEvent(analyticsInstance: Analytics, eventName: 'select_promotion' | 'view_promotion', eventParams?: { - items?: EventParams['items']; - promotion_id?: EventParams['promotion_id']; - promotion_name?: EventParams['promotion_name']; - [key: string]: any; -}, options?: AnalyticsCallOptions): void; - -// @public -export function logEvent(analyticsInstance: Analytics, eventName: 'set_checkout_option', eventParams?: { - checkout_step?: EventParams['checkout_step']; - checkout_option?: EventParams['checkout_option']; - [key: string]: any; -}, options?: AnalyticsCallOptions): void; - -// @public -export function logEvent(analyticsInstance: Analytics, eventName: 'share', eventParams?: { - method?: EventParams['method']; - content_type?: EventParams['content_type']; - item_id?: EventParams['item_id']; - [key: string]: any; -}, options?: AnalyticsCallOptions): void; - -// @public -export function logEvent(analyticsInstance: Analytics, eventName: 'sign_up', eventParams?: { - method?: EventParams['method']; - [key: string]: any; -}, options?: AnalyticsCallOptions): void; - -// @public -export function logEvent(analyticsInstance: Analytics, eventName: 'timing_complete', eventParams?: { - name: string; - value: number; - event_category?: string; - event_label?: string; - [key: string]: any; -}, options?: AnalyticsCallOptions): void; - -// @public -export function logEvent(analyticsInstance: Analytics, eventName: 'view_cart' | 'view_item', eventParams?: { - currency?: EventParams['currency']; - items?: EventParams['items']; - value?: EventParams['value']; - [key: string]: any; -}, options?: AnalyticsCallOptions): void; - -// @public -export function logEvent(analyticsInstance: Analytics, eventName: 'view_item_list', eventParams?: { - items?: EventParams['items']; - item_list_name?: EventParams['item_list_name']; - item_list_id?: EventParams['item_list_id']; - [key: string]: any; -}, options?: AnalyticsCallOptions): void; - -// @public -export function logEvent(analyticsInstance: Analytics, eventName: CustomEventName, eventParams?: { - [key: string]: any; -}, options?: AnalyticsCallOptions): void; - -// @public @deprecated -export interface Promotion { - // (undocumented) - creative_name?: string; - // (undocumented) - creative_slot?: string; - // (undocumented) - id?: string; - // (undocumented) - name?: string; -} - -// @public -export function setAnalyticsCollectionEnabled(analyticsInstance: Analytics, enabled: boolean): void; - -// @public -export function setCurrentScreen(analyticsInstance: Analytics, screenName: string, options?: AnalyticsCallOptions): void; - -// @public -export function settings(options: SettingsOptions): void; - -// @public -export interface SettingsOptions { - dataLayerName?: string; - gtagName?: string; -} - -// @public -export function setUserId(analyticsInstance: Analytics, id: string, options?: AnalyticsCallOptions): void; - -// @public -export function setUserProperties(analyticsInstance: Analytics, properties: CustomParams, options?: AnalyticsCallOptions): void; - - -``` +## API Report File for "@firebase/analytics" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts + +import { FirebaseApp } from '@firebase/app'; + +// @public +export interface Analytics { + app: FirebaseApp; +} + +// @public +export interface AnalyticsCallOptions { + global: boolean; +} + +// @public +export interface AnalyticsSettings { + config?: GtagConfigParams | EventParams; +} + +// @public +export interface ControlParams { + // (undocumented) + event_callback?: () => void; + // (undocumented) + event_timeout?: number; + // (undocumented) + groups?: string | string[]; + // (undocumented) + send_to?: string | string[]; +} + +// @public +export type Currency = string | number; + +// @public +export type CustomEventName = T extends EventNameString ? never : T; + +// @public +export interface CustomParams { + // (undocumented) + [key: string]: unknown; +} + +// @public +export type EventNameString = 'add_payment_info' | 'add_shipping_info' | 'add_to_cart' | 'add_to_wishlist' | 'begin_checkout' | 'checkout_progress' | 'exception' | 'generate_lead' | 'login' | 'page_view' | 'purchase' | 'refund' | 'remove_from_cart' | 'screen_view' | 'search' | 'select_content' | 'select_item' | 'select_promotion' | 'set_checkout_option' | 'share' | 'sign_up' | 'timing_complete' | 'view_cart' | 'view_item' | 'view_item_list' | 'view_promotion' | 'view_search_results'; + +// @public +export interface EventParams { + // (undocumented) + [key: string]: unknown; + // (undocumented) + affiliation?: string; + // (undocumented) + checkout_option?: string; + // (undocumented) + checkout_step?: number; + // (undocumented) + content_type?: string; + // (undocumented) + coupon?: string; + // (undocumented) + currency?: string; + // (undocumented) + description?: string; + // (undocumented) + event_category?: string; + // (undocumented) + event_label?: string; + // (undocumented) + fatal?: boolean; + firebase_screen?: string; + firebase_screen_class?: string; + // (undocumented) + item_id?: string; + // (undocumented) + item_list_id?: string; + // (undocumented) + item_list_name?: string; + // (undocumented) + items?: Item[]; + // (undocumented) + method?: string; + // (undocumented) + number?: string; + // (undocumented) + page_location?: string; + // (undocumented) + page_path?: string; + // (undocumented) + page_title?: string; + // (undocumented) + payment_type?: string; + // (undocumented) + promotion_id?: string; + // (undocumented) + promotion_name?: string; + // (undocumented) + promotions?: Promotion[]; + // (undocumented) + screen_name?: string; + // (undocumented) + search_term?: string; + // (undocumented) + shipping?: Currency; + // (undocumented) + shipping_tier?: string; + // (undocumented) + tax?: Currency; + // (undocumented) + transaction_id?: string; + // (undocumented) + value?: number; +} + +// @public +export function getAnalytics(app?: FirebaseApp): Analytics; + +// @public +export interface GtagConfigParams { + 'allow_google_signals?': boolean; + // (undocumented) + [key: string]: unknown; + 'allow_ad_personalization_signals'?: boolean; + 'cookie_domain'?: string; + 'cookie_expires'?: number; + 'cookie_flags'?: string; + 'cookie_prefix'?: string; + 'cookie_update'?: boolean; + 'page_location'?: string; + 'page_title'?: string; + 'send_page_view'?: boolean; +} + +// @public +export function initializeAnalytics(app: FirebaseApp, options?: AnalyticsSettings): Analytics; + +// @public +export function isSupported(): Promise; + +// @public +export interface Item { + // (undocumented) + affiliation?: string; + // @deprecated (undocumented) + brand?: string; + // @deprecated (undocumented) + category?: string; + // (undocumented) + coupon?: string; + // (undocumented) + creative_name?: string; + // (undocumented) + creative_slot?: string; + // (undocumented) + discount?: Currency; + // @deprecated (undocumented) + id?: string; + // (undocumented) + index?: number; + // (undocumented) + item_brand?: string; + // (undocumented) + item_category?: string; + // (undocumented) + item_category2?: string; + // (undocumented) + item_category3?: string; + // (undocumented) + item_category4?: string; + // (undocumented) + item_category5?: string; + // (undocumented) + item_id?: string; + // (undocumented) + item_list_id?: string; + // (undocumented) + item_list_name?: string; + // (undocumented) + item_name?: string; + // (undocumented) + item_variant?: string; + // (undocumented) + location_id?: string; + // @deprecated (undocumented) + name?: string; + // (undocumented) + price?: Currency; + // (undocumented) + promotion_id?: string; + // (undocumented) + promotion_name?: string; + // (undocumented) + quantity?: number; +} + +// @public +export function logEvent(analyticsInstance: Analytics, eventName: 'add_payment_info', eventParams?: { + coupon?: EventParams['coupon']; + currency?: EventParams['currency']; + items?: EventParams['items']; + payment_type?: EventParams['payment_type']; + value?: EventParams['value']; + [key: string]: any; +}, options?: AnalyticsCallOptions): void; + +// @public +export function logEvent(analyticsInstance: Analytics, eventName: 'add_shipping_info', eventParams?: { + coupon?: EventParams['coupon']; + currency?: EventParams['currency']; + items?: EventParams['items']; + shipping_tier?: EventParams['shipping_tier']; + value?: EventParams['value']; + [key: string]: any; +}, options?: AnalyticsCallOptions): void; + +// @public +export function logEvent(analyticsInstance: Analytics, eventName: 'add_to_cart' | 'add_to_wishlist' | 'remove_from_cart', eventParams?: { + currency?: EventParams['currency']; + value?: EventParams['value']; + items?: EventParams['items']; + [key: string]: any; +}, options?: AnalyticsCallOptions): void; + +// @public +export function logEvent(analyticsInstance: Analytics, eventName: 'begin_checkout', eventParams?: { + currency?: EventParams['currency']; + coupon?: EventParams['coupon']; + value?: EventParams['value']; + items?: EventParams['items']; + [key: string]: any; +}, options?: AnalyticsCallOptions): void; + +// @public +export function logEvent(analyticsInstance: Analytics, eventName: 'checkout_progress', eventParams?: { + currency?: EventParams['currency']; + coupon?: EventParams['coupon']; + value?: EventParams['value']; + items?: EventParams['items']; + checkout_step?: EventParams['checkout_step']; + checkout_option?: EventParams['checkout_option']; + [key: string]: any; +}, options?: AnalyticsCallOptions): void; + +// @public +export function logEvent(analyticsInstance: Analytics, eventName: 'exception', eventParams?: { + description?: EventParams['description']; + fatal?: EventParams['fatal']; + [key: string]: any; +}, options?: AnalyticsCallOptions): void; + +// @public +export function logEvent(analyticsInstance: Analytics, eventName: 'generate_lead', eventParams?: { + value?: EventParams['value']; + currency?: EventParams['currency']; + [key: string]: any; +}, options?: AnalyticsCallOptions): void; + +// @public +export function logEvent(analyticsInstance: Analytics, eventName: 'login', eventParams?: { + method?: EventParams['method']; + [key: string]: any; +}, options?: AnalyticsCallOptions): void; + +// @public +export function logEvent(analyticsInstance: Analytics, eventName: 'page_view', eventParams?: { + page_title?: string; + page_location?: string; + page_path?: string; + [key: string]: any; +}, options?: AnalyticsCallOptions): void; + +// @public +export function logEvent(analyticsInstance: Analytics, eventName: 'purchase' | 'refund', eventParams?: { + value?: EventParams['value']; + currency?: EventParams['currency']; + transaction_id: EventParams['transaction_id']; + tax?: EventParams['tax']; + shipping?: EventParams['shipping']; + items?: EventParams['items']; + coupon?: EventParams['coupon']; + affiliation?: EventParams['affiliation']; + [key: string]: any; +}, options?: AnalyticsCallOptions): void; + +// @public +export function logEvent(analyticsInstance: Analytics, eventName: 'screen_view', eventParams?: { + firebase_screen: EventParams['firebase_screen']; + firebase_screen_class: EventParams['firebase_screen_class']; + [key: string]: any; +}, options?: AnalyticsCallOptions): void; + +// @public +export function logEvent(analyticsInstance: Analytics, eventName: 'search' | 'view_search_results', eventParams?: { + search_term?: EventParams['search_term']; + [key: string]: any; +}, options?: AnalyticsCallOptions): void; + +// @public +export function logEvent(analyticsInstance: Analytics, eventName: 'select_content', eventParams?: { + content_type?: EventParams['content_type']; + item_id?: EventParams['item_id']; + [key: string]: any; +}, options?: AnalyticsCallOptions): void; + +// @public +export function logEvent(analyticsInstance: Analytics, eventName: 'select_item', eventParams?: { + items?: EventParams['items']; + item_list_name?: EventParams['item_list_name']; + item_list_id?: EventParams['item_list_id']; + [key: string]: any; +}, options?: AnalyticsCallOptions): void; + +// @public +export function logEvent(analyticsInstance: Analytics, eventName: 'select_promotion' | 'view_promotion', eventParams?: { + items?: EventParams['items']; + promotion_id?: EventParams['promotion_id']; + promotion_name?: EventParams['promotion_name']; + [key: string]: any; +}, options?: AnalyticsCallOptions): void; + +// @public +export function logEvent(analyticsInstance: Analytics, eventName: 'set_checkout_option', eventParams?: { + checkout_step?: EventParams['checkout_step']; + checkout_option?: EventParams['checkout_option']; + [key: string]: any; +}, options?: AnalyticsCallOptions): void; + +// @public +export function logEvent(analyticsInstance: Analytics, eventName: 'share', eventParams?: { + method?: EventParams['method']; + content_type?: EventParams['content_type']; + item_id?: EventParams['item_id']; + [key: string]: any; +}, options?: AnalyticsCallOptions): void; + +// @public +export function logEvent(analyticsInstance: Analytics, eventName: 'sign_up', eventParams?: { + method?: EventParams['method']; + [key: string]: any; +}, options?: AnalyticsCallOptions): void; + +// @public +export function logEvent(analyticsInstance: Analytics, eventName: 'timing_complete', eventParams?: { + name: string; + value: number; + event_category?: string; + event_label?: string; + [key: string]: any; +}, options?: AnalyticsCallOptions): void; + +// @public +export function logEvent(analyticsInstance: Analytics, eventName: 'view_cart' | 'view_item', eventParams?: { + currency?: EventParams['currency']; + items?: EventParams['items']; + value?: EventParams['value']; + [key: string]: any; +}, options?: AnalyticsCallOptions): void; + +// @public +export function logEvent(analyticsInstance: Analytics, eventName: 'view_item_list', eventParams?: { + items?: EventParams['items']; + item_list_name?: EventParams['item_list_name']; + item_list_id?: EventParams['item_list_id']; + [key: string]: any; +}, options?: AnalyticsCallOptions): void; + +// @public +export function logEvent(analyticsInstance: Analytics, eventName: CustomEventName, eventParams?: { + [key: string]: any; +}, options?: AnalyticsCallOptions): void; + +// @public @deprecated +export interface Promotion { + // (undocumented) + creative_name?: string; + // (undocumented) + creative_slot?: string; + // (undocumented) + id?: string; + // (undocumented) + name?: string; +} + +// @public +export function setAnalyticsCollectionEnabled(analyticsInstance: Analytics, enabled: boolean): void; + +// @public +export function setCurrentScreen(analyticsInstance: Analytics, screenName: string, options?: AnalyticsCallOptions): void; + +// @public +export function settings(options: SettingsOptions): void; + +// @public +export interface SettingsOptions { + dataLayerName?: string; + gtagName?: string; +} + +// @public +export function setUserId(analyticsInstance: Analytics, id: string, options?: AnalyticsCallOptions): void; + +// @public +export function setUserProperties(analyticsInstance: Analytics, properties: CustomParams, options?: AnalyticsCallOptions): void; + + +``` diff --git a/common/api-review/installations-exp.api.md b/common/api-review/installations.api.md similarity index 86% rename from common/api-review/installations-exp.api.md rename to common/api-review/installations.api.md index dd3b285afc7..d6f978290cb 100644 --- a/common/api-review/installations-exp.api.md +++ b/common/api-review/installations.api.md @@ -1,41 +1,41 @@ -## API Report File for "@firebase/installations-exp" - -> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). - -```ts - -import { FirebaseApp } from '@firebase/app-exp'; - -// @public -export function deleteInstallations(installations: Installations): Promise; - -// @internal -export interface _FirebaseInstallationsInternal { - getId(): Promise; - getToken(forceRefresh?: boolean): Promise; -} - -// @public -export function getId(installations: Installations): Promise; - -// @public -export function getInstallations(app?: FirebaseApp): Installations; - -// @public -export function getToken(installations: Installations, forceRefresh?: boolean): Promise; - -// @public -export type IdChangeCallbackFn = (installationId: string) => void; - -// @public -export type IdChangeUnsubscribeFn = () => void; - -// @public -export interface Installations { -} - -// @public -export function onIdChange(installations: Installations, callback: IdChangeCallbackFn): IdChangeUnsubscribeFn; - - -``` +## API Report File for "@firebase/installations" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts + +import { FirebaseApp } from '@firebase/app'; + +// @public +export function deleteInstallations(installations: Installations): Promise; + +// @internal +export interface _FirebaseInstallationsInternal { + getId(): Promise; + getToken(forceRefresh?: boolean): Promise; +} + +// @public +export function getId(installations: Installations): Promise; + +// @public +export function getInstallations(app?: FirebaseApp): Installations; + +// @public +export function getToken(installations: Installations, forceRefresh?: boolean): Promise; + +// @public +export type IdChangeCallbackFn = (installationId: string) => void; + +// @public +export type IdChangeUnsubscribeFn = () => void; + +// @public +export interface Installations { +} + +// @public +export function onIdChange(installations: Installations, callback: IdChangeCallbackFn): IdChangeUnsubscribeFn; + + +``` diff --git a/packages/analytics-compat/package.json b/packages/analytics-compat/package.json index 58e2929cf7a..872bb2cbb1a 100644 --- a/packages/analytics-compat/package.json +++ b/packages/analytics-compat/package.json @@ -21,7 +21,7 @@ "typescript": "4.2.2" }, "repository": { - "directory": "packages-exp/analytics-compat", + "directory": "packages/analytics-compat", "type": "git", "url": "https://github.com/firebase/firebase-js-sdk.git" }, @@ -33,13 +33,13 @@ "lint:fix": "eslint --fix -c .eslintrc.js '**/*.ts' --ignore-path '../../.gitignore'", "build": "rollup -c", "build:deps": "lerna run --scope @firebase/analytics-compat --include-dependencies build", - "build:release": "rollup -c rollup.config.release.js && yarn add-compat-overloads", + "build:release": "yarn build && yarn add-compat-overloads", "dev": "rollup -c -w", "test": "run-p lint test:browser", "test:ci": "node ../../scripts/run_tests_in_ci.js -s test:browser", "test:browser": "karma start --single-run", "test:browser:debug": "karma start --browsers=Chrome --auto-watch", - "add-compat-overloads": "ts-node-script ../../scripts/exp/create-overloads.ts -i ../analytics-exp/dist/analytics-exp-public.d.ts -o dist/src/index.d.ts -a -r Analytics:FirebaseAnalytics -r FirebaseApp:FirebaseAppCompat --moduleToEnhance @firebase/analytics" + "add-compat-overloads": "ts-node-script ../../scripts/exp/create-overloads.ts -i ../analytics/dist/analytics-public.d.ts -o dist/src/index.d.ts -a -r Analytics:FirebaseAnalytics -r FirebaseApp:FirebaseAppCompat --moduleToEnhance @firebase/analytics" }, "typings": "dist/src/index.d.ts", "dependencies": { diff --git a/packages/analytics-compat/rollup.config.js b/packages/analytics-compat/rollup.config.js index 9b89b7772af..c5d161f6e62 100644 --- a/packages/analytics-compat/rollup.config.js +++ b/packages/analytics-compat/rollup.config.js @@ -18,8 +18,9 @@ import json from '@rollup/plugin-json'; import typescriptPlugin from 'rollup-plugin-typescript2'; import typescript from 'typescript'; -import { es2017BuildsNoPlugin, es5BuildsNoPlugin } from './rollup.shared'; +import pkg from './package.json'; +const deps = Object.keys(Object.assign({}, pkg.peerDependencies, pkg.dependencies)); /** * ES5 Builds */ @@ -30,10 +31,20 @@ const es5BuildPlugins = [ json() ]; -const es5Builds = es5BuildsNoPlugin.map(build => ({ - ...build, - plugins: es5BuildPlugins -})); +const es5Builds = [ + /** + * Browser Builds + */ + { + input: 'src/index.ts', + output: [ + { file: pkg.main, format: 'cjs', sourcemap: true }, + { file: pkg.esm5, format: 'es', sourcemap: true } + ], + external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)), + plugins: es5BuildPlugins + } +]; /** * ES2017 Builds @@ -50,9 +61,20 @@ const es2017BuildPlugins = [ json({ preferConst: true }) ]; -const es2017Builds = es2017BuildsNoPlugin.map(build => ({ - ...build, - plugins: es2017BuildPlugins -})); +const es2017Builds = [ + { + /** + * Browser Build + */ + input: 'src/index.ts', + output: { + file: pkg.browser, + format: 'es', + sourcemap: true + }, + external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)), + plugins: es2017BuildPlugins + } +]; export default [...es5Builds, ...es2017Builds]; diff --git a/packages/analytics-compat/rollup.config.release.js b/packages/analytics-compat/rollup.config.release.js deleted file mode 100644 index aed49b162c9..00000000000 --- a/packages/analytics-compat/rollup.config.release.js +++ /dev/null @@ -1,73 +0,0 @@ -/** - * @license - * Copyright 2021 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import typescriptPlugin from 'rollup-plugin-typescript2'; -import typescript from 'typescript'; -import json from '@rollup/plugin-json'; -import { importPathTransformer } from '../../scripts/exp/ts-transform-import-path'; -import { es2017BuildsNoPlugin, es5BuildsNoPlugin } from './rollup.shared'; - -/** - * ES5 Builds - */ -const es5BuildPlugins = [ - typescriptPlugin({ - typescript, - clean: true, - abortOnError: false, - transformers: [importPathTransformer] - }), - json() -]; - -const es5Builds = es5BuildsNoPlugin.map(build => ({ - ...build, - plugins: es5BuildPlugins, - treeshake: { - moduleSideEffects: id => id === '@firebase/installations' - } -})); - -/** - * ES2017 Builds - */ -const es2017BuildPlugins = [ - typescriptPlugin({ - typescript, - tsconfigOverride: { - compilerOptions: { - target: 'es2017' - } - }, - abortOnError: false, - clean: true, - transformers: [importPathTransformer] - }), - json({ - preferConst: true - }) -]; - -const es2017Builds = es2017BuildsNoPlugin.map(build => ({ - ...build, - plugins: es2017BuildPlugins, - treeshake: { - moduleSideEffects: id => id === '@firebase/installations' - } -})); - -export default [...es5Builds, ...es2017Builds]; diff --git a/packages/analytics-compat/rollup.shared.js b/packages/analytics-compat/rollup.shared.js deleted file mode 100644 index ff3cbd71e62..00000000000 --- a/packages/analytics-compat/rollup.shared.js +++ /dev/null @@ -1,54 +0,0 @@ -/** - * @license - * Copyright 2021 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import pkg from './package.json'; - -const deps = [ - ...Object.keys(Object.assign({}, pkg.peerDependencies, pkg.dependencies)), - '@firebase/analytics' -]; - -export const es5BuildsNoPlugin = [ - /** - * Browser Builds - */ - { - input: 'src/index.ts', - output: [ - { file: pkg.main, format: 'cjs', sourcemap: true }, - { file: pkg.esm5, format: 'es', sourcemap: true } - ], - external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)) - } -]; - -/** - * ES2017 Builds - */ -export const es2017BuildsNoPlugin = [ - { - /** - * Browser Build - */ - input: 'src/index.ts', - output: { - file: pkg.browser, - format: 'es', - sourcemap: true - }, - external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)) - } -]; diff --git a/packages/analytics-compat/src/index.ts b/packages/analytics-compat/src/index.ts index eeb46e88f8e..e4b524fe7a3 100644 --- a/packages/analytics-compat/src/index.ts +++ b/packages/analytics-compat/src/index.ts @@ -31,7 +31,7 @@ import { import { settings as settingsExp, isSupported as isSupportedExp -} from '@firebase/analytics-exp'; +} from '@firebase/analytics'; import { EventName } from './constants'; declare module '@firebase/component' { @@ -46,7 +46,7 @@ const factory: InstanceFactory<'analytics-compat'> = ( // Dependencies const app = container.getProvider('app-compat').getImmediate(); const analyticsServiceExp = container - .getProvider('analytics-exp') + .getProvider('analytics') .getImmediate(); return new AnalyticsService(app as FirebaseApp, analyticsServiceExp); diff --git a/packages/analytics-compat/src/service.test.ts b/packages/analytics-compat/src/service.test.ts index 1817a0be314..958f97c525c 100644 --- a/packages/analytics-compat/src/service.test.ts +++ b/packages/analytics-compat/src/service.test.ts @@ -17,7 +17,7 @@ import { expect, use } from 'chai'; import { AnalyticsService } from './service'; import { firebase, FirebaseApp } from '@firebase/app-compat'; -import * as analyticsExp from '@firebase/analytics-exp'; +import * as analyticsExp from '@firebase/analytics'; import { stub, match, SinonStub } from 'sinon'; import * as sinonChai from 'sinon-chai'; diff --git a/packages/analytics-compat/src/service.ts b/packages/analytics-compat/src/service.ts index 283c4478683..ed53cc533d2 100644 --- a/packages/analytics-compat/src/service.ts +++ b/packages/analytics-compat/src/service.ts @@ -28,7 +28,7 @@ import { setCurrentScreen as setCurrentScreenExp, setUserId as setUserIdExp, setUserProperties as setUserPropertiesExp -} from '@firebase/analytics-exp'; +} from '@firebase/analytics'; import { _FirebaseService, FirebaseApp } from '@firebase/app-compat'; export class AnalyticsService implements FirebaseAnalytics, _FirebaseService { diff --git a/packages/analytics-types/index.d.ts b/packages/analytics-types/index.d.ts index 49bc5ddf3d1..286a8ee37a3 100644 --- a/packages/analytics-types/index.d.ts +++ b/packages/analytics-types/index.d.ts @@ -679,6 +679,6 @@ export interface ThrottleMetadata { declare module '@firebase/component' { interface NameServiceMapping { - 'analytics': FirebaseAnalytics; + 'analytics-compat': FirebaseAnalytics; } } diff --git a/packages/analytics/CHANGELOG.md b/packages/analytics/CHANGELOG.md new file mode 100644 index 00000000000..1ff121cde90 --- /dev/null +++ b/packages/analytics/CHANGELOG.md @@ -0,0 +1,208 @@ +# @firebase/analytics + +## 0.6.17 + +### Patch Changes + +- Updated dependencies [[`bd50d8310`](https://github.com/firebase/firebase-js-sdk/commit/bd50d83107be3d87064f72800c608abc94ae3456)]: + - @firebase/analytics-types@0.6.0 + +## 0.6.16 + +### Patch Changes + +- Updated dependencies [[`a3cbe719b`](https://github.com/firebase/firebase-js-sdk/commit/a3cbe719b1bd733a5c4c15ee0d0e6388d512054c)]: + - @firebase/util@1.2.0 + - @firebase/component@0.5.5 + - @firebase/installations@0.4.31 + +## 0.6.15 + +### Patch Changes + +- Updated dependencies [[`02586c975`](https://github.com/firebase/firebase-js-sdk/commit/02586c9754318b01a0051561d2c7c4906059b5af)]: + - @firebase/analytics-types@0.5.0 + +## 0.6.14 + +### Patch Changes + +- Updated dependencies [[`56a6a9d4a`](https://github.com/firebase/firebase-js-sdk/commit/56a6a9d4af2766154584a0f66d3c4d8024d74ba5)]: + - @firebase/component@0.5.4 + - @firebase/installations@0.4.30 + +## 0.6.13 + +### Patch Changes + +- Updated dependencies [[`725ab4684`](https://github.com/firebase/firebase-js-sdk/commit/725ab4684ef0999a12f71e704c204a00fb030e5d)]: + - @firebase/component@0.5.3 + - @firebase/installations@0.4.29 + +## 0.6.12 + +### Patch Changes + +- Updated dependencies [[`4c4b6aed9`](https://github.com/firebase/firebase-js-sdk/commit/4c4b6aed9757c9a7e75fb698a15e53274f93880b)]: + - @firebase/component@0.5.2 + - @firebase/installations@0.4.28 + +## 0.6.11 + +### Patch Changes + +- Updated dependencies [[`5fbc5fb01`](https://github.com/firebase/firebase-js-sdk/commit/5fbc5fb0140d7da980fd7ebbfbae810f8c64ae19)]: + - @firebase/component@0.5.1 + - @firebase/installations@0.4.27 + +## 0.6.10 + +### Patch Changes + +- Updated dependencies [[`c34ac7a92`](https://github.com/firebase/firebase-js-sdk/commit/c34ac7a92a616915f38d192654db7770d81747ae), [`ac4ad08a2`](https://github.com/firebase/firebase-js-sdk/commit/ac4ad08a284397ec966e991dd388bb1fba857467)]: + - @firebase/component@0.5.0 + - @firebase/util@1.1.0 + - @firebase/installations@0.4.26 + +## 0.6.9 + +### Patch Changes + +- Updated dependencies [[`7354a0ed4`](https://github.com/firebase/firebase-js-sdk/commit/7354a0ed438f4e3df6577e4927e8c8f8f1fbbfda)]: + - @firebase/util@1.0.0 + - @firebase/component@0.4.1 + - @firebase/installations@0.4.25 + +## 0.6.8 + +### Patch Changes + +- Updated dependencies [[`f24d8961b`](https://github.com/firebase/firebase-js-sdk/commit/f24d8961b3b87821413297688803fc85113086b3)]: + - @firebase/component@0.4.0 + - @firebase/installations@0.4.24 + +## 0.6.7 + +### Patch Changes + +- Updated dependencies [[`de5f90501`](https://github.com/firebase/firebase-js-sdk/commit/de5f9050137acc9ed1490082e5aa429b5de3cb2a)]: + - @firebase/util@0.4.1 + - @firebase/component@0.3.1 + - @firebase/installations@0.4.23 + +## 0.6.6 + +### Patch Changes + +- Updated dependencies [[`5c1a83ed7`](https://github.com/firebase/firebase-js-sdk/commit/5c1a83ed70bae979322bd8751c0885d683ce4bf3)]: + - @firebase/component@0.3.0 + - @firebase/installations@0.4.22 + +## 0.6.5 + +### Patch Changes + +- Updated dependencies [[`ec95df3d0`](https://github.com/firebase/firebase-js-sdk/commit/ec95df3d07e5f091f2a7f7327e46417f64d04b4e)]: + - @firebase/util@0.4.0 + - @firebase/component@0.2.1 + - @firebase/installations@0.4.21 + +## 0.6.4 + +### Patch Changes + +- Updated dependencies [[`6afe42613`](https://github.com/firebase/firebase-js-sdk/commit/6afe42613ed3d7a842d378dc1a09a795811db2ac)]: + - @firebase/component@0.2.0 + - @firebase/installations@0.4.20 + +## 0.6.3 + +### Patch Changes + +- [`74bf52009`](https://github.com/firebase/firebase-js-sdk/commit/74bf52009b291a62deabfd865084d4e0fcacc483) [#4458](https://github.com/firebase/firebase-js-sdk/pull/4458) - Fixed a behavior causing `gtag` to be downloaded twice on Firebase Analytics initialization. This did not seem to affect the functionality of Firebase Analytics but adds noise to the logs when users are trying to debug. + +## 0.6.2 + +### Patch Changes + +- Updated dependencies [[`9cf727fcc`](https://github.com/firebase/firebase-js-sdk/commit/9cf727fcc3d049551b16ae0698ac33dc2fe45ada)]: + - @firebase/util@0.3.4 + - @firebase/component@0.1.21 + - @firebase/installations@0.4.19 + +## 0.6.1 + +### Patch Changes + +- Updated dependencies [[`a5768b0aa`](https://github.com/firebase/firebase-js-sdk/commit/a5768b0aa7d7ce732279931aa436e988c9f36487), [`7d916d905`](https://github.com/firebase/firebase-js-sdk/commit/7d916d905ba16816ac8ac7c8748c83831ff614ce)]: + - @firebase/component@0.1.20 + - @firebase/util@0.3.3 + - @firebase/installations@0.4.18 + +## 0.6.0 + +### Minor Changes + +- [`d4db75ff8`](https://github.com/firebase/firebase-js-sdk/commit/d4db75ff81388430489bd561ac2247fe9e0b6eb5) [#3836](https://github.com/firebase/firebase-js-sdk/pull/3836) (fixes [#3573](https://github.com/firebase/firebase-js-sdk/issues/3573)) - Analytics now warns instead of throwing if it detects a browser environment where analytics does not work. + +## 0.5.0 + +### Minor Changes + +- [`fb3b095e4`](https://github.com/firebase/firebase-js-sdk/commit/fb3b095e4b7c8f57fdb3172bc039c84576abf290) [#2800](https://github.com/firebase/firebase-js-sdk/pull/2800) - Analytics now dynamically fetches the app's Measurement ID from the Dynamic Config backend + instead of depending on the local Firebase config. It will fall back to any `measurementId` + value found in the local config if the Dynamic Config fetch fails. + +### Patch Changes + +- Updated dependencies [[`da1c7df79`](https://github.com/firebase/firebase-js-sdk/commit/da1c7df7982b08bbef82fcc8d93255f3e2d23cca), [`fb3b095e4`](https://github.com/firebase/firebase-js-sdk/commit/fb3b095e4b7c8f57fdb3172bc039c84576abf290), [`fb3b095e4`](https://github.com/firebase/firebase-js-sdk/commit/fb3b095e4b7c8f57fdb3172bc039c84576abf290)]: + - @firebase/component@0.1.19 + - @firebase/util@0.3.2 + - @firebase/analytics-types@0.4.0 + - @firebase/installations@0.4.17 + +## 0.4.2 + +### Patch Changes + +- [`2a0d254f`](https://github.com/firebase/firebase-js-sdk/commit/2a0d254fa58e607842fc0380c8cfa7bbbb69df75) [#3555](https://github.com/firebase/firebase-js-sdk/pull/3555) - Added Browser Extension check for Firebase Analytics. `analytics.isSupported()` will now return `Promise` for extension environments. + +- Updated dependencies [[`d4ca3da0`](https://github.com/firebase/firebase-js-sdk/commit/d4ca3da0a59fcea1261ba69d7eb663bba38d3089)]: + - @firebase/util@0.3.1 + - @firebase/component@0.1.18 + - @firebase/installations@0.4.16 + +## 0.4.1 + +### Patch Changes + +- [`a87676b8`](https://github.com/firebase/firebase-js-sdk/commit/a87676b84b78ccc2f057a22eb947a5d13402949c) [#3472](https://github.com/firebase/firebase-js-sdk/pull/3472) - - Fix an error where an analytics PR included a change to `@firebase/util`, but + the util package was not properly included in the changeset for a patch bump. + + - `@firebase/util` adds environment check methods `isIndexedDBAvailable` + `validateIndexedDBOpenable`, and `areCookiesEnabled`. + +- Updated dependencies [[`a87676b8`](https://github.com/firebase/firebase-js-sdk/commit/a87676b84b78ccc2f057a22eb947a5d13402949c)]: + - @firebase/util@0.3.0 + - @firebase/component@0.1.17 + - @firebase/installations@0.4.15 + +## 0.4.0 + +### Minor Changes + +- [`02419ce8`](https://github.com/firebase/firebase-js-sdk/commit/02419ce8470141f012d9ce425a6a4a4aa912e480) [#3165](https://github.com/firebase/firebase-js-sdk/pull/3165) - Issue 2393 fix - analytics module + + - Added a public method `isSupported` to Analytics module which returns true if current browser context supports initialization of analytics module. + - Added runtime checks to Analytics module that validate if cookie is enabled in current browser and if current browser environment supports indexedDB functionalities. + +## 0.3.9 + +### Patch Changes + +- [`a754645e`](https://github.com/firebase/firebase-js-sdk/commit/a754645ec2be1b8c205f25f510196eee298b0d6e) [#3297](https://github.com/firebase/firebase-js-sdk/pull/3297) Thanks [@renovate](https://github.com/apps/renovate)! - Update dependency typescript to v3.9.5 + +- Updated dependencies [[`a754645e`](https://github.com/firebase/firebase-js-sdk/commit/a754645ec2be1b8c205f25f510196eee298b0d6e)]: + - @firebase/component@0.1.16 + - @firebase/installations@0.4.14 + - @firebase/logger@0.2.6 diff --git a/packages/analytics/package.json b/packages/analytics/package.json index 5f861ac49f3..9635fa69b5f 100644 --- a/packages/analytics/package.json +++ b/packages/analytics/package.json @@ -1,7 +1,6 @@ { - "name": "@firebase/analytics-exp", - "version": "0.0.900", - "private": true, + "name": "@firebase/analytics", + "version": "0.6.18", "description": "A analytics package for new firebase packages", "author": "Firebase (https://firebase.google.com/)", "main": "dist/index.cjs.js", @@ -14,8 +13,8 @@ "lint": "eslint -c .eslintrc.js '**/*.ts' --ignore-path '../../.gitignore'", "lint:fix": "eslint --fix -c .eslintrc.js '**/*.ts' --ignore-path '../../.gitignore'", "build": "rollup -c && yarn api-report", - "build:release": "rollup -c rollup.config.release.js && yarn api-report && yarn typings:public", - "build:deps": "lerna run --scope @firebase/analytics-exp --include-dependencies build", + "build:release": "yarn build && yarn typings:public", + "build:deps": "lerna run --scope @firebase/analytics --include-dependencies build", "dev": "rollup -c -w", "test": "run-p lint test:all", "test:all": "run-p test:browser test:integration", @@ -23,16 +22,15 @@ "test:browser": "karma start --single-run --nocache", "test:integration": "karma start ./karma.integration.conf.js --single-run --nocache", "api-report": "api-extractor run --local --verbose", - "predoc": "node ../../scripts/exp/remove-exp.js temp", "doc": "api-documenter markdown --input temp --output docs", "build:doc": "yarn build && yarn doc", - "typings:public": "node ../../scripts/exp/use_typings.js ./dist/analytics-exp-public.d.ts" + "typings:public": "node ../../scripts/exp/use_typings.js ./dist/analytics-public.d.ts" }, "peerDependencies": { - "@firebase/app-exp": "0.x" + "@firebase/app": "0.x" }, "dependencies": { - "@firebase/installations-exp": "0.0.900", + "@firebase/installations": "0.4.32", "@firebase/logger": "0.2.6", "@firebase/util": "1.2.0", "@firebase/component": "0.5.5", @@ -40,7 +38,7 @@ }, "license": "Apache-2.0", "devDependencies": { - "@firebase/app-exp": "0.0.900", + "@firebase/app": "0.6.30", "rollup": "2.52.2", "@rollup/plugin-commonjs": "17.1.0", "@rollup/plugin-json": "4.1.0", diff --git a/packages/analytics/rollup.config.js b/packages/analytics/rollup.config.js index 184071d3577..6f3e15c1a93 100644 --- a/packages/analytics/rollup.config.js +++ b/packages/analytics/rollup.config.js @@ -18,7 +18,11 @@ import json from '@rollup/plugin-json'; import typescriptPlugin from 'rollup-plugin-typescript2'; import typescript from 'typescript'; -import { es2017BuildsNoPlugin, es5BuildsNoPlugin } from './rollup.shared'; +import pkg from './package.json'; + +const deps = [ + ...Object.keys(Object.assign({}, pkg.peerDependencies, pkg.dependencies)) +]; /** * ES5 Builds @@ -30,10 +34,20 @@ const es5BuildPlugins = [ json() ]; -const es5Builds = es5BuildsNoPlugin.map(build => ({ - ...build, - plugins: es5BuildPlugins -})); +const es5Builds = [ + /** + * Browser Builds + */ + { + input: 'src/index.ts', + output: [ + { file: pkg.main, format: 'cjs', sourcemap: true }, + { file: pkg.esm5, format: 'es', sourcemap: true } + ], + external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)), + plugins: es5BuildPlugins + } +]; /** * ES2017 Builds @@ -50,9 +64,20 @@ const es2017BuildPlugins = [ json({ preferConst: true }) ]; -const es2017Builds = es2017BuildsNoPlugin.map(build => ({ - ...build, - plugins: es2017BuildPlugins -})); +const es2017Builds = [ + { + /** + * Browser Build + */ + input: 'src/index.ts', + output: { + file: pkg.browser, + format: 'es', + sourcemap: true + }, + external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)), + plugins: es2017BuildPlugins + } +]; export default [...es5Builds, ...es2017Builds]; diff --git a/packages/analytics/rollup.shared.js b/packages/analytics/rollup.shared.js deleted file mode 100644 index 397949ded6b..00000000000 --- a/packages/analytics/rollup.shared.js +++ /dev/null @@ -1,54 +0,0 @@ -/** - * @license - * Copyright 2018 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import pkg from './package.json'; - -const deps = [ - ...Object.keys(Object.assign({}, pkg.peerDependencies, pkg.dependencies)), - '@firebase/app' -]; - -export const es5BuildsNoPlugin = [ - /** - * Browser Builds - */ - { - input: 'src/index.ts', - output: [ - { file: pkg.main, format: 'cjs', sourcemap: true }, - { file: pkg.esm5, format: 'es', sourcemap: true } - ], - external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)) - } -]; - -/** - * ES2017 Builds - */ -export const es2017BuildsNoPlugin = [ - { - /** - * Browser Build - */ - input: 'src/index.ts', - output: { - file: pkg.browser, - format: 'es', - sourcemap: true - }, - external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)) - } -]; diff --git a/packages/analytics/src/api.test.ts b/packages/analytics/src/api.test.ts index 90820083128..573468a715e 100644 --- a/packages/analytics/src/api.test.ts +++ b/packages/analytics/src/api.test.ts @@ -20,7 +20,7 @@ import { SinonStub, stub } from 'sinon'; import '../testing/setup'; import { getFullApp } from '../testing/get-fake-firebase-services'; import { getAnalytics, initializeAnalytics } from './api'; -import { FirebaseApp, deleteApp } from '@firebase/app-exp'; +import { FirebaseApp, deleteApp } from '@firebase/app'; import { AnalyticsError } from './errors'; import * as init from './initialize-analytics'; const fakeAppParams = { appId: 'abcdefgh12345:23405', apiKey: 'AAbbCCdd12345' }; diff --git a/packages/analytics/src/api.ts b/packages/analytics/src/api.ts index 38fde73f535..76f8b2007c4 100644 --- a/packages/analytics/src/api.ts +++ b/packages/analytics/src/api.ts @@ -17,7 +17,7 @@ * limitations under the License. */ -import { _getProvider, FirebaseApp, getApp } from '@firebase/app-exp'; +import { _getProvider, FirebaseApp, getApp } from '@firebase/app'; import { Analytics, AnalyticsCallOptions, @@ -69,7 +69,7 @@ declare module '@firebase/component' { export function getAnalytics(app: FirebaseApp = getApp()): Analytics { app = getModularInstance(app); // Dependencies - const analyticsProvider: Provider<'analytics-exp'> = _getProvider( + const analyticsProvider: Provider<'analytics'> = _getProvider( app, ANALYTICS_TYPE ); @@ -93,7 +93,7 @@ export function initializeAnalytics( options: AnalyticsSettings = {} ): Analytics { // Dependencies - const analyticsProvider: Provider<'analytics-exp'> = _getProvider( + const analyticsProvider: Provider<'analytics'> = _getProvider( app, ANALYTICS_TYPE ); diff --git a/packages/analytics/src/constants.ts b/packages/analytics/src/constants.ts index 1fdfdd5e523..6697466c8aa 100644 --- a/packages/analytics/src/constants.ts +++ b/packages/analytics/src/constants.ts @@ -18,7 +18,7 @@ /** * Type constant for Firebase Analytics. */ -export const ANALYTICS_TYPE = 'analytics-exp'; +export const ANALYTICS_TYPE = 'analytics'; // Key to attach FID to in gtag params. export const GA_FID_KEY = 'firebase_id'; diff --git a/packages/analytics/src/factory.ts b/packages/analytics/src/factory.ts index 6d9d54585ed..b0ef0e04aa4 100644 --- a/packages/analytics/src/factory.ts +++ b/packages/analytics/src/factory.ts @@ -19,11 +19,11 @@ import { SettingsOptions, Analytics, AnalyticsSettings } from './public-types'; import { Gtag, DynamicConfig, MinimalDynamicConfig } from './types'; import { getOrCreateDataLayer, wrapOrCreateGtag } from './helpers'; import { AnalyticsError, ERROR_FACTORY } from './errors'; -import { _FirebaseInstallationsInternal } from '@firebase/installations-exp'; +import { _FirebaseInstallationsInternal } from '@firebase/installations'; import { areCookiesEnabled, isBrowserExtension } from '@firebase/util'; import { _initializeAnalytics } from './initialize-analytics'; import { logger } from './logger'; -import { FirebaseApp, _FirebaseService } from '@firebase/app-exp'; +import { FirebaseApp, _FirebaseService } from '@firebase/app'; /** * Analytics Service class. diff --git a/packages/analytics/src/get-config.ts b/packages/analytics/src/get-config.ts index 0b03867c857..0b41c88edf0 100644 --- a/packages/analytics/src/get-config.ts +++ b/packages/analytics/src/get-config.ts @@ -19,7 +19,7 @@ * @fileoverview Most logic is copied from packages/remote-config/src/client/retrying_client.ts */ -import { FirebaseApp } from '@firebase/app-exp'; +import { FirebaseApp } from '@firebase/app'; import { DynamicConfig, ThrottleMetadata, MinimalDynamicConfig } from './types'; import { FirebaseError, calculateBackoffMillis } from '@firebase/util'; import { AnalyticsError, ERROR_FACTORY } from './errors'; diff --git a/packages/analytics/src/index.test.ts b/packages/analytics/src/index.test.ts index 43bb2ea69a1..607c2e74a5d 100644 --- a/packages/analytics/src/index.test.ts +++ b/packages/analytics/src/index.test.ts @@ -23,7 +23,7 @@ import { getFakeApp, getFakeInstallations } from '../testing/get-fake-firebase-services'; -import { FirebaseApp } from '@firebase/app-exp'; +import { FirebaseApp } from '@firebase/app'; import { GtagCommand } from './constants'; import { findGtagScriptOnPage } from './helpers'; import { removeGtagScript } from '../testing/gtag-script-util'; @@ -36,7 +36,7 @@ import { resetGlobalVars, factory as analyticsFactory } from './factory'; -import { _FirebaseInstallationsInternal } from '@firebase/installations-exp'; +import { _FirebaseInstallationsInternal } from '@firebase/installations'; let analyticsInstance: AnalyticsService = {} as AnalyticsService; const fakeMeasurementId = 'abcd-efgh'; diff --git a/packages/analytics/src/index.ts b/packages/analytics/src/index.ts index d4050799802..3974400462b 100644 --- a/packages/analytics/src/index.ts +++ b/packages/analytics/src/index.ts @@ -21,7 +21,7 @@ * limitations under the License. */ -import { registerVersion, _registerComponent } from '@firebase/app-exp'; +import { registerVersion, _registerComponent } from '@firebase/app'; import { FirebaseAnalyticsInternal } from '@firebase/analytics-interop-types'; import { factory } from './factory'; import { ANALYTICS_TYPE } from './constants'; @@ -35,7 +35,7 @@ import { ERROR_FACTORY, AnalyticsError } from './errors'; import { logEvent } from './api'; import { name, version } from '../package.json'; import { AnalyticsCallOptions } from './public-types'; -import '@firebase/installations-exp'; +import '@firebase/installations'; declare global { interface Window { @@ -49,9 +49,9 @@ function registerAnalytics(): void { ANALYTICS_TYPE, (container, { options: analyticsOptions }: InstanceFactoryOptions) => { // getImmediate for FirebaseApp will always succeed - const app = container.getProvider('app-exp').getImmediate(); + const app = container.getProvider('app').getImmediate(); const installations = container - .getProvider('installations-exp-internal') + .getProvider('installations-internal') .getImmediate(); return factory(app, installations, analyticsOptions); diff --git a/packages/analytics/src/initialize-analytics.test.ts b/packages/analytics/src/initialize-analytics.test.ts index a6152a4dc34..34c799fc83c 100644 --- a/packages/analytics/src/initialize-analytics.test.ts +++ b/packages/analytics/src/initialize-analytics.test.ts @@ -25,9 +25,9 @@ import { } from '../testing/get-fake-firebase-services'; import { GtagCommand } from './constants'; import { DynamicConfig } from './types'; -import { FirebaseApp } from '@firebase/app-exp'; +import { FirebaseApp } from '@firebase/app'; import { Deferred } from '@firebase/util'; -import { _FirebaseInstallationsInternal } from '@firebase/installations-exp'; +import { _FirebaseInstallationsInternal } from '@firebase/installations'; import { removeGtagScript } from '../testing/gtag-script-util'; const fakeMeasurementId = 'abcd-efgh-ijkl'; diff --git a/packages/analytics/src/initialize-analytics.ts b/packages/analytics/src/initialize-analytics.ts index 8e3ad0f5a44..2b9c42847f8 100644 --- a/packages/analytics/src/initialize-analytics.ts +++ b/packages/analytics/src/initialize-analytics.ts @@ -17,10 +17,10 @@ import { DynamicConfig, Gtag, MinimalDynamicConfig } from './types'; import { GtagCommand, GA_FID_KEY, ORIGIN_KEY } from './constants'; -import { _FirebaseInstallationsInternal } from '@firebase/installations-exp'; +import { _FirebaseInstallationsInternal } from '@firebase/installations'; import { fetchDynamicConfigWithRetry } from './get-config'; import { logger } from './logger'; -import { FirebaseApp } from '@firebase/app-exp'; +import { FirebaseApp } from '@firebase/app'; import { isIndexedDBAvailable, validateIndexedDBOpenable diff --git a/packages/analytics/src/public-types.ts b/packages/analytics/src/public-types.ts index 4654428444b..5d4ac6db70d 100644 --- a/packages/analytics/src/public-types.ts +++ b/packages/analytics/src/public-types.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { FirebaseApp } from '@firebase/app-exp'; +import { FirebaseApp } from '@firebase/app'; /** * A set of common Google Analytics config settings recognized by diff --git a/packages/analytics/testing/get-fake-firebase-services.ts b/packages/analytics/testing/get-fake-firebase-services.ts index d4fe70c26b9..5075c41f775 100644 --- a/packages/analytics/testing/get-fake-firebase-services.ts +++ b/packages/analytics/testing/get-fake-firebase-services.ts @@ -19,9 +19,9 @@ import { FirebaseApp, initializeApp, _registerComponent -} from '@firebase/app-exp'; +} from '@firebase/app'; import { Component, ComponentType } from '@firebase/component'; -import { _FirebaseInstallationsInternal } from '@firebase/installations-exp'; +import { _FirebaseInstallationsInternal } from '@firebase/installations'; import { AnalyticsService } from '../src/factory'; const fakeConfig = { @@ -65,7 +65,7 @@ export function getFullApp(fakeAppParams?: { }): FirebaseApp { _registerComponent( new Component( - 'installations-exp-internal', + 'installations-internal', () => { return {} as _FirebaseInstallationsInternal; }, @@ -74,7 +74,7 @@ export function getFullApp(fakeAppParams?: { ); _registerComponent( new Component( - 'analytics-exp', + 'analytics', () => { return {} as AnalyticsService; }, diff --git a/packages/analytics/testing/integration-tests/integration.ts b/packages/analytics/testing/integration-tests/integration.ts index 96995bccd2e..b920973a79e 100644 --- a/packages/analytics/testing/integration-tests/integration.ts +++ b/packages/analytics/testing/integration-tests/integration.ts @@ -15,8 +15,8 @@ * limitations under the License. */ -import { initializeApp, deleteApp, FirebaseApp } from '@firebase/app-exp'; -import '@firebase/installations-exp'; +import { initializeApp, deleteApp, FirebaseApp } from '@firebase/app'; +import '@firebase/installations'; import { getAnalytics, initializeAnalytics, logEvent } from '../../src/index'; import '../setup'; import { expect } from 'chai'; diff --git a/packages/app-check-compat/package.json b/packages/app-check-compat/package.json index 48c4967f090..ce5cbef6f87 100644 --- a/packages/app-check-compat/package.json +++ b/packages/app-check-compat/package.json @@ -34,7 +34,7 @@ }, "license": "Apache-2.0", "devDependencies": { - "@firebase/app-compat": "0.0.900", + "@firebase/app-compat": "0.1.0", "rollup": "2.52.2", "@rollup/plugin-commonjs": "17.1.0", "@rollup/plugin-json": "4.1.0", diff --git a/packages/app/CHANGELOG.md b/packages/app/CHANGELOG.md new file mode 100644 index 00000000000..2c01f294278 --- /dev/null +++ b/packages/app/CHANGELOG.md @@ -0,0 +1,184 @@ +# @firebase/app + +## 0.6.29 + +### Patch Changes + +- Updated dependencies [[`a3cbe719b`](https://github.com/firebase/firebase-js-sdk/commit/a3cbe719b1bd733a5c4c15ee0d0e6388d512054c), [`3d10d33bc`](https://github.com/firebase/firebase-js-sdk/commit/3d10d33bc167177fecbf86d2a6574af2e4e210f9)]: + - @firebase/util@1.2.0 + - @firebase/app-types@0.6.3 + - @firebase/component@0.5.5 + +## 0.6.28 + +### Patch Changes + +- Updated dependencies [[`56a6a9d4a`](https://github.com/firebase/firebase-js-sdk/commit/56a6a9d4af2766154584a0f66d3c4d8024d74ba5)]: + - @firebase/component@0.5.4 + +## 0.6.27 + +### Patch Changes + +- Updated dependencies [[`725ab4684`](https://github.com/firebase/firebase-js-sdk/commit/725ab4684ef0999a12f71e704c204a00fb030e5d)]: + - @firebase/component@0.5.3 + +## 0.6.26 + +### Patch Changes + +- Update SDK_VERSION. + +## 0.6.25 + +### Patch Changes + +- Updated dependencies [[`4c4b6aed9`](https://github.com/firebase/firebase-js-sdk/commit/4c4b6aed9757c9a7e75fb698a15e53274f93880b)]: + - @firebase/component@0.5.2 + +## 0.6.24 + +### Patch Changes + +- Update SDK_VERSION. + +## 0.6.23 + +### Patch Changes + +- Updated dependencies [[`5fbc5fb01`](https://github.com/firebase/firebase-js-sdk/commit/5fbc5fb0140d7da980fd7ebbfbae810f8c64ae19)]: + - @firebase/component@0.5.1 + +## 0.6.22 + +### Patch Changes + +- [`60e834739`](https://github.com/firebase/firebase-js-sdk/commit/60e83473940e60f8390b1b0f97cf45a1733f66f0) [#4897](https://github.com/firebase/firebase-js-sdk/pull/4897) - Make App Check initialization explicit, to prevent unexpected errors for users who do not intend to use App Check. + +## 0.6.21 + +### Patch Changes + +- [`e123f241c`](https://github.com/firebase/firebase-js-sdk/commit/e123f241c0cf39a983645582c4e42b7a5bff7bd6) [#4857](https://github.com/firebase/firebase-js-sdk/pull/4857) - Add AppCheck platform logging string. + +- Updated dependencies [[`c34ac7a92`](https://github.com/firebase/firebase-js-sdk/commit/c34ac7a92a616915f38d192654db7770d81747ae), [`ac4ad08a2`](https://github.com/firebase/firebase-js-sdk/commit/ac4ad08a284397ec966e991dd388bb1fba857467)]: + - @firebase/component@0.5.0 + - @firebase/util@1.1.0 + +## 0.6.20 + +### Patch Changes + +- Updated dependencies [[`7354a0ed4`](https://github.com/firebase/firebase-js-sdk/commit/7354a0ed438f4e3df6577e4927e8c8f8f1fbbfda)]: + - @firebase/util@1.0.0 + - @firebase/component@0.4.1 + +## 0.6.19 + +### Patch Changes + +- [`f24d8961b`](https://github.com/firebase/firebase-js-sdk/commit/f24d8961b3b87821413297688803fc85113086b3) [#4714](https://github.com/firebase/firebase-js-sdk/pull/4714) - Internal typing changes + +- Updated dependencies [[`f24d8961b`](https://github.com/firebase/firebase-js-sdk/commit/f24d8961b3b87821413297688803fc85113086b3), [`f24d8961b`](https://github.com/firebase/firebase-js-sdk/commit/f24d8961b3b87821413297688803fc85113086b3)]: + - @firebase/component@0.4.0 + - @firebase/app-types@0.6.2 + +## 0.6.18 + +### Patch Changes + +- Updated dependencies [[`de5f90501`](https://github.com/firebase/firebase-js-sdk/commit/de5f9050137acc9ed1490082e5aa429b5de3cb2a)]: + - @firebase/util@0.4.1 + - @firebase/component@0.3.1 + +## 0.6.17 + +### Patch Changes + +- Updated dependencies [[`5c1a83ed7`](https://github.com/firebase/firebase-js-sdk/commit/5c1a83ed70bae979322bd8751c0885d683ce4bf3)]: + - @firebase/component@0.3.0 + +## 0.6.16 + +### Patch Changes + +- Updated dependencies [[`ec95df3d0`](https://github.com/firebase/firebase-js-sdk/commit/ec95df3d07e5f091f2a7f7327e46417f64d04b4e)]: + - @firebase/util@0.4.0 + - @firebase/component@0.2.1 + +## 0.6.15 + +### Patch Changes + +- Updated dependencies [[`6afe42613`](https://github.com/firebase/firebase-js-sdk/commit/6afe42613ed3d7a842d378dc1a09a795811db2ac)]: + - @firebase/component@0.2.0 + +## 0.6.14 + +### Patch Changes + +- [`749c7f3d9`](https://github.com/firebase/firebase-js-sdk/commit/749c7f3d985f978cd2a204cbc28c3fff09458b5b) [#4298](https://github.com/firebase/firebase-js-sdk/pull/4298) (fixes [#4258](https://github.com/firebase/firebase-js-sdk/issues/4258)) - Firestore classes like DocumentReference and Query can now be serialized to JSON (#4258) + +## 0.6.13 + +### Patch Changes + +- Updated dependencies [[`9cf727fcc`](https://github.com/firebase/firebase-js-sdk/commit/9cf727fcc3d049551b16ae0698ac33dc2fe45ada)]: + - @firebase/util@0.3.4 + - @firebase/component@0.1.21 + +## 0.6.12 + +### Patch Changes + +- [`a5768b0aa`](https://github.com/firebase/firebase-js-sdk/commit/a5768b0aa7d7ce732279931aa436e988c9f36487) [#3932](https://github.com/firebase/firebase-js-sdk/pull/3932) - Point browser field to esm build. Now you need to use default import instead of namespace import to import firebase. + + Before this change + + ``` + import * as firebase from 'firebase/app'; + ``` + + After this change + + ``` + import firebase from 'firebase/app'; + ``` + +- Updated dependencies [[`a5768b0aa`](https://github.com/firebase/firebase-js-sdk/commit/a5768b0aa7d7ce732279931aa436e988c9f36487), [`7d916d905`](https://github.com/firebase/firebase-js-sdk/commit/7d916d905ba16816ac8ac7c8748c83831ff614ce)]: + - @firebase/component@0.1.20 + - @firebase/util@0.3.3 + +## 0.6.11 + +### Patch Changes + +- Updated dependencies [[`da1c7df79`](https://github.com/firebase/firebase-js-sdk/commit/da1c7df7982b08bbef82fcc8d93255f3e2d23cca), [`fb3b095e4`](https://github.com/firebase/firebase-js-sdk/commit/fb3b095e4b7c8f57fdb3172bc039c84576abf290)]: + - @firebase/component@0.1.19 + - @firebase/util@0.3.2 + +## 0.6.10 + +### Patch Changes + +- Updated dependencies [[`d4ca3da0`](https://github.com/firebase/firebase-js-sdk/commit/d4ca3da0a59fcea1261ba69d7eb663bba38d3089)]: + - @firebase/util@0.3.1 + - @firebase/component@0.1.18 + +## 0.6.9 + +### Patch Changes + +- Updated dependencies [[`a87676b8`](https://github.com/firebase/firebase-js-sdk/commit/a87676b84b78ccc2f057a22eb947a5d13402949c)]: + - @firebase/util@0.3.0 + - @firebase/component@0.1.17 + +## 0.6.8 + +### Patch Changes + +- [`a754645e`](https://github.com/firebase/firebase-js-sdk/commit/a754645ec2be1b8c205f25f510196eee298b0d6e) [#3297](https://github.com/firebase/firebase-js-sdk/pull/3297) Thanks [@renovate](https://github.com/apps/renovate)! - Update dependency typescript to v3.9.5 + +- Updated dependencies [[`a754645e`](https://github.com/firebase/firebase-js-sdk/commit/a754645ec2be1b8c205f25f510196eee298b0d6e)]: + - @firebase/component@0.1.16 + - @firebase/logger@0.2.6 diff --git a/packages/app/rollup.config.js b/packages/app/rollup.config.js index 5dc6ca47633..0a2242857a9 100644 --- a/packages/app/rollup.config.js +++ b/packages/app/rollup.config.js @@ -19,11 +19,10 @@ import typescriptPlugin from 'rollup-plugin-typescript2'; import typescript from 'typescript'; import json from '@rollup/plugin-json'; import pkg from './package.json'; -import { es2017BuildsNoPlugin, es5BuildsNoPlugin } from './rollup.shared'; -const deps = Object.keys( - Object.assign({}, pkg.peerDependencies, pkg.dependencies) -); +const deps = [ + ...Object.keys(Object.assign({}, pkg.peerDependencies, pkg.dependencies)) +]; /** * ES5 Builds @@ -35,10 +34,26 @@ const es5BuildPlugins = [ json() ]; -const es5Builds = es5BuildsNoPlugin.map(build => ({ - ...build, - plugins: es5BuildPlugins -})); +const es5Builds = [ + /** + * Browser Builds + */ + { + input: 'src/index.ts', + output: [{ file: pkg.esm5, format: 'es', sourcemap: true }], + external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)), + plugins: es5BuildPlugins + }, + /** + * Node.js Build + */ + { + input: 'src/index.ts', + output: [{ file: pkg.main, format: 'cjs', sourcemap: true }], + external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)), + plugins: es5BuildPlugins + } +]; /** * ES2017 Builds @@ -57,9 +72,20 @@ const es2017BuildPlugins = [ }) ]; -const es2017Builds = es2017BuildsNoPlugin.map(build => ({ - ...build, - plugins: es2017BuildPlugins -})); +const es2017Builds = [ + /** + * Browser Builds + */ + { + input: 'src/index.ts', + output: { + file: pkg.browser, + format: 'es', + sourcemap: true + }, + external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)), + plugins: es2017BuildPlugins + } +]; export default [...es5Builds, ...es2017Builds]; diff --git a/packages/app/rollup.config.release.js b/packages/app/rollup.config.release.js deleted file mode 100644 index ce92982b33d..00000000000 --- a/packages/app/rollup.config.release.js +++ /dev/null @@ -1,73 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import typescriptPlugin from 'rollup-plugin-typescript2'; -import typescript from 'typescript'; -import json from '@rollup/plugin-json'; -import { importPathTransformer } from '../../scripts/exp/ts-transform-import-path'; -import { es2017BuildsNoPlugin, es5BuildsNoPlugin } from './rollup.shared'; - -/** - * ES5 Builds - */ -const es5BuildPlugins = [ - typescriptPlugin({ - typescript, - clean: true, - abortOnError: false, - transformers: [importPathTransformer] - }), - json() -]; - -const es5Builds = es5BuildsNoPlugin.map(build => ({ - ...build, - plugins: es5BuildPlugins, - treeshake: { - moduleSideEffects: false - } -})); - -/** - * ES2017 Builds - */ -const es2017BuildPlugins = [ - typescriptPlugin({ - typescript, - tsconfigOverride: { - compilerOptions: { - target: 'es2017' - } - }, - clean: true, - abortOnError: false, - transformers: [importPathTransformer] - }), - json({ - preferConst: true - }) -]; - -const es2017Builds = es2017BuildsNoPlugin.map(build => ({ - ...build, - plugins: es2017BuildPlugins, - treeshake: { - moduleSideEffects: false - } -})); - -export default [...es5Builds, ...es2017Builds]; diff --git a/packages/app/rollup.shared.js b/packages/app/rollup.shared.js deleted file mode 100644 index 32f7926601f..00000000000 --- a/packages/app/rollup.shared.js +++ /dev/null @@ -1,56 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import pkg from './package.json'; - -const deps = [ - ...Object.keys(Object.assign({}, pkg.peerDependencies, pkg.dependencies)), - '@firebase/app' -]; - -export const es5BuildsNoPlugin = [ - /** - * Browser Builds - */ - { - input: 'src/index.ts', - output: [{ file: pkg.esm5, format: 'es', sourcemap: true }], - external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)) - }, - /** - * Node.js Build - */ - { - input: 'src/index.ts', - output: [{ file: pkg.main, format: 'cjs', sourcemap: true }], - external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)) - } -]; - -export const es2017BuildsNoPlugin = [ - /** - * Browser Builds - */ - { - input: 'src/index.ts', - output: { - file: pkg.browser, - format: 'es', - sourcemap: true - }, - external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)) - } -]; diff --git a/packages/firebase/package.json b/packages/firebase/package.json index df371b4f060..4ed400872fa 100644 --- a/packages/firebase/package.json +++ b/packages/firebase/package.json @@ -221,24 +221,24 @@ "test:ci": "echo 'No test suite for firebase wrapper'" }, "dependencies": { - "@firebase/analytics-exp": "0.0.900", - "@firebase/analytics-compat": "0.0.900", - "@firebase/app-exp": "0.0.900", - "@firebase/app-compat": "0.0.900", - "@firebase/app-check-exp": "0.0.900", + "@firebase/analytics": "0.6.18", + "@firebase/analytics-compat": "0.1.0", + "@firebase/app": "0.6.30", + "@firebase/app-compat": "0.1.0", + "@firebase/app-check": "0.0.900", "@firebase/app-check-compat": "0.0.900", - "@firebase/auth-exp": "0.0.900", + "@firebase/auth": "0.0.900", "@firebase/auth-compat": "0.0.900", "@firebase/database": "0.10.9", - "@firebase/functions-exp": "0.0.900", + "@firebase/functions": "0.0.900", "@firebase/functions-compat": "0.0.900", "@firebase/firestore": "2.3.10", "@firebase/storage": "0.6.2", - "@firebase/performance-exp": "0.0.900", + "@firebase/performance": "0.0.900", "@firebase/performance-compat": "0.0.900", - "@firebase/remote-config-exp": "0.0.900", + "@firebase/remote-config": "0.0.900", "@firebase/remote-config-compat": "0.0.900", - "@firebase/messaging-exp": "0.0.900", + "@firebase/messaging": "0.0.900", "@firebase/messaging-compat": "0.0.900" }, "devDependencies": { diff --git a/packages/functions-compat/package.json b/packages/functions-compat/package.json index 1a84563ff83..e1103dccecb 100644 --- a/packages/functions-compat/package.json +++ b/packages/functions-compat/package.json @@ -15,7 +15,7 @@ "@firebase/app-compat": "0.x" }, "devDependencies": { - "@firebase/app-compat": "0.0.900", + "@firebase/app-compat": "0.1.0", "rollup": "2.52.2", "@rollup/plugin-json": "4.1.0", "rollup-plugin-typescript2": "0.30.0", diff --git a/packages/installations-compat/README.md b/packages/installations-compat/README.md new file mode 100644 index 00000000000..9d1a6511c3e --- /dev/null +++ b/packages/installations-compat/README.md @@ -0,0 +1,5 @@ +# @firebase/installations-compat + +This is a compatability layer for the Firebase Installations SDK + +**This package is not intended for direct usage, and should only be used via the officially supported [firebase](https://www.npmjs.com/package/firebase) package.** \ No newline at end of file diff --git a/packages/installations-compat/package.json b/packages/installations-compat/package.json index e49f6d4722f..65dde3a48bf 100644 --- a/packages/installations-compat/package.json +++ b/packages/installations-compat/package.json @@ -1,7 +1,6 @@ { "name": "@firebase/installations-compat", - "version": "0.0.900", - "private": true, + "version": "0.1.0", "author": "Firebase (https://firebase.google.com/)", "main": "dist/index.cjs.js", "module": "dist/index.esm2017.js", @@ -28,7 +27,7 @@ "serve:host": "http-server -c-1 test-app" }, "repository": { - "directory": "packages-exp/installations-compat", + "directory": "packages/installations-compat", "type": "git", "url": "https://github.com/firebase/firebase-js-sdk.git" }, @@ -36,7 +35,7 @@ "url": "https://github.com/firebase/firebase-js-sdk/issues" }, "devDependencies": { - "@firebase/app-compat": "0.0.900", + "@firebase/app-compat": "0.1.0", "rollup": "2.52.2", "@rollup/plugin-commonjs": "17.1.0", "@rollup/plugin-json": "4.1.0", @@ -49,7 +48,7 @@ "@firebase/app-compat": "0.x" }, "dependencies": { - "@firebase/installations-exp": "0.0.900", + "@firebase/installations": "0.4.32", "@firebase/installations-types": "0.3.4", "@firebase/util": "1.2.0", "@firebase/component": "0.5.5", diff --git a/packages/installations-compat/rollup.config.js b/packages/installations-compat/rollup.config.js index d66e464f546..b8de29ff5b0 100644 --- a/packages/installations-compat/rollup.config.js +++ b/packages/installations-compat/rollup.config.js @@ -18,17 +18,26 @@ import json from '@rollup/plugin-json'; import typescriptPlugin from 'rollup-plugin-typescript2'; import typescript from 'typescript'; -import { es2017BuildsNoPlugin, es5BuildsNoPlugin } from './rollup.shared'; +import pkg from './package.json'; + +const deps = Object.keys({ ...pkg.peerDependencies, ...pkg.dependencies }); /** * ES5 Builds */ const es5BuildPlugins = [typescriptPlugin({ typescript }), json()]; -const es5Builds = es5BuildsNoPlugin.map(build => ({ - ...build, - plugins: es5BuildPlugins -})); +const es5Builds = [ + { + input: 'src/index.ts', + output: [ + { file: pkg.main, format: 'cjs', sourcemap: true }, + { file: pkg.esm5, format: 'es', sourcemap: true } + ], + external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)), + plugins: es5BuildPlugins + } +]; /** * ES2017 Builds @@ -45,9 +54,17 @@ const es2017BuildPlugins = [ json({ preferConst: true }) ]; -const es2017Builds = es2017BuildsNoPlugin.map(build => ({ - ...build, - plugins: es2017BuildPlugins -})); +const es2017Builds = [ + { + input: 'src/index.ts', + output: { + file: pkg.browser, + format: 'es', + sourcemap: true + }, + external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)), + plugins: es2017BuildPlugins + } +]; export default [...es5Builds, ...es2017Builds]; diff --git a/packages/installations-compat/rollup.config.release.js b/packages/installations-compat/rollup.config.release.js deleted file mode 100644 index 5050932f4a4..00000000000 --- a/packages/installations-compat/rollup.config.release.js +++ /dev/null @@ -1,71 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import json from '@rollup/plugin-json'; -import typescriptPlugin from 'rollup-plugin-typescript2'; -import typescript from 'typescript'; -import { importPathTransformer } from '../../scripts/exp/ts-transform-import-path'; -import { es2017BuildsNoPlugin, es5BuildsNoPlugin } from './rollup.shared'; - -/** - * ES5 Builds - */ -const es5BuildPlugins = [ - typescriptPlugin({ - typescript, - clean: true, - abortOnError: false, - transformers: [importPathTransformer] - }), - json() -]; - -const es5Builds = es5BuildsNoPlugin.map(build => ({ - ...build, - plugins: es5BuildPlugins, - treeshake: { - moduleSideEffects: false - } -})); - -/** - * ES2017 Builds - */ -const es2017BuildPlugins = [ - typescriptPlugin({ - typescript, - tsconfigOverride: { - compilerOptions: { - target: 'es2017' - } - }, - abortOnError: false, - clean: true, - transformers: [importPathTransformer] - }), - json({ preferConst: true }) -]; - -const es2017Builds = es2017BuildsNoPlugin.map(build => ({ - ...build, - plugins: es2017BuildPlugins, - treeshake: { - moduleSideEffects: false - } -})); - -export default [...es5Builds, ...es2017Builds]; diff --git a/packages/installations-compat/rollup.shared.js b/packages/installations-compat/rollup.shared.js deleted file mode 100644 index 9b9b1f6cf38..00000000000 --- a/packages/installations-compat/rollup.shared.js +++ /dev/null @@ -1,48 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import pkg from './package.json'; - -const deps = Object.keys({ ...pkg.peerDependencies, ...pkg.dependencies }); - -/** - * ES5 Builds - */ -export const es5BuildsNoPlugin = [ - { - input: 'src/index.ts', - output: [ - { file: pkg.main, format: 'cjs', sourcemap: true }, - { file: pkg.esm5, format: 'es', sourcemap: true } - ], - external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)) - } -]; - -/** - * ES2017 Builds - */ -export const es2017BuildsNoPlugin = [ - { - input: 'src/index.ts', - output: { - file: pkg.browser, - format: 'es', - sourcemap: true - }, - external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)) - } -]; diff --git a/packages/installations-compat/src/index.ts b/packages/installations-compat/src/index.ts index 56475aba6c2..59774b67b62 100644 --- a/packages/installations-compat/src/index.ts +++ b/packages/installations-compat/src/index.ts @@ -34,7 +34,7 @@ function registerInstallations(instance: _FirebaseNamespace): void { container => { const app = container.getProvider('app-compat').getImmediate()!; const installations = container - .getProvider('installations-exp') + .getProvider('installations') .getImmediate()!; return new InstallationsCompat(app, installations); }, diff --git a/packages/installations-compat/src/installationsCompat.test.ts b/packages/installations-compat/src/installationsCompat.test.ts index 1f3442c4d86..2c6ae7063f7 100644 --- a/packages/installations-compat/src/installationsCompat.test.ts +++ b/packages/installations-compat/src/installationsCompat.test.ts @@ -18,7 +18,7 @@ import './testing/setup'; import { getFakeApp, getFakeInstallations } from './testing/util'; import { InstallationsCompat } from './installationsCompat'; -import * as modularApi from '@firebase/installations-exp'; +import * as modularApi from '@firebase/installations'; import { expect } from 'chai'; import { stub } from 'sinon'; diff --git a/packages/installations-compat/src/installationsCompat.ts b/packages/installations-compat/src/installationsCompat.ts index 47cd71bc337..9b811d53edd 100644 --- a/packages/installations-compat/src/installationsCompat.ts +++ b/packages/installations-compat/src/installationsCompat.ts @@ -25,7 +25,7 @@ import { IdChangeCallbackFn, IdChangeUnsubscribeFn, onIdChange -} from '@firebase/installations-exp'; +} from '@firebase/installations'; export class InstallationsCompat implements FirebaseInstallationsCompat, _FirebaseService diff --git a/packages/installations-compat/src/testing/util.ts b/packages/installations-compat/src/testing/util.ts index 9589e6892b6..14e02c3193d 100644 --- a/packages/installations-compat/src/testing/util.ts +++ b/packages/installations-compat/src/testing/util.ts @@ -16,7 +16,7 @@ */ import { FirebaseApp } from '@firebase/app-compat'; -import { Installations } from '@firebase/installations-exp'; +import { Installations } from '@firebase/installations'; const appName = 'testApp'; const apiKey = 'AIzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaA'; diff --git a/packages/installations-types/index.d.ts b/packages/installations-types/index.d.ts index 5508464a509..80cfccfc74b 100644 --- a/packages/installations-types/index.d.ts +++ b/packages/installations-types/index.d.ts @@ -49,6 +49,6 @@ export type FirebaseInstallationsName = 'installations'; declare module '@firebase/component' { interface NameServiceMapping { - 'installations': FirebaseInstallations; + 'installations-compat': FirebaseInstallations; } } diff --git a/packages/installations/CHANGELOG.md b/packages/installations/CHANGELOG.md new file mode 100644 index 00000000000..3503c959d63 --- /dev/null +++ b/packages/installations/CHANGELOG.md @@ -0,0 +1,139 @@ +# @firebase/installations + +## 0.4.31 + +### Patch Changes + +- Updated dependencies [[`a3cbe719b`](https://github.com/firebase/firebase-js-sdk/commit/a3cbe719b1bd733a5c4c15ee0d0e6388d512054c)]: + - @firebase/util@1.2.0 + - @firebase/component@0.5.5 + +## 0.4.30 + +### Patch Changes + +- Updated dependencies [[`56a6a9d4a`](https://github.com/firebase/firebase-js-sdk/commit/56a6a9d4af2766154584a0f66d3c4d8024d74ba5)]: + - @firebase/component@0.5.4 + +## 0.4.29 + +### Patch Changes + +- Updated dependencies [[`725ab4684`](https://github.com/firebase/firebase-js-sdk/commit/725ab4684ef0999a12f71e704c204a00fb030e5d)]: + - @firebase/component@0.5.3 + +## 0.4.28 + +### Patch Changes + +- Updated dependencies [[`4c4b6aed9`](https://github.com/firebase/firebase-js-sdk/commit/4c4b6aed9757c9a7e75fb698a15e53274f93880b)]: + - @firebase/component@0.5.2 + +## 0.4.27 + +### Patch Changes + +- Updated dependencies [[`5fbc5fb01`](https://github.com/firebase/firebase-js-sdk/commit/5fbc5fb0140d7da980fd7ebbfbae810f8c64ae19)]: + - @firebase/component@0.5.1 + +## 0.4.26 + +### Patch Changes + +- Updated dependencies [[`c34ac7a92`](https://github.com/firebase/firebase-js-sdk/commit/c34ac7a92a616915f38d192654db7770d81747ae), [`ac4ad08a2`](https://github.com/firebase/firebase-js-sdk/commit/ac4ad08a284397ec966e991dd388bb1fba857467)]: + - @firebase/component@0.5.0 + - @firebase/util@1.1.0 + +## 0.4.25 + +### Patch Changes + +- Updated dependencies [[`7354a0ed4`](https://github.com/firebase/firebase-js-sdk/commit/7354a0ed438f4e3df6577e4927e8c8f8f1fbbfda)]: + - @firebase/util@1.0.0 + - @firebase/component@0.4.1 + +## 0.4.24 + +### Patch Changes + +- Updated dependencies [[`f24d8961b`](https://github.com/firebase/firebase-js-sdk/commit/f24d8961b3b87821413297688803fc85113086b3)]: + - @firebase/component@0.4.0 + +## 0.4.23 + +### Patch Changes + +- Updated dependencies [[`de5f90501`](https://github.com/firebase/firebase-js-sdk/commit/de5f9050137acc9ed1490082e5aa429b5de3cb2a)]: + - @firebase/util@0.4.1 + - @firebase/component@0.3.1 + +## 0.4.22 + +### Patch Changes + +- Updated dependencies [[`5c1a83ed7`](https://github.com/firebase/firebase-js-sdk/commit/5c1a83ed70bae979322bd8751c0885d683ce4bf3)]: + - @firebase/component@0.3.0 + +## 0.4.21 + +### Patch Changes + +- Updated dependencies [[`ec95df3d0`](https://github.com/firebase/firebase-js-sdk/commit/ec95df3d07e5f091f2a7f7327e46417f64d04b4e)]: + - @firebase/util@0.4.0 + - @firebase/component@0.2.1 + +## 0.4.20 + +### Patch Changes + +- Updated dependencies [[`6afe42613`](https://github.com/firebase/firebase-js-sdk/commit/6afe42613ed3d7a842d378dc1a09a795811db2ac)]: + - @firebase/component@0.2.0 + +## 0.4.19 + +### Patch Changes + +- Updated dependencies [[`9cf727fcc`](https://github.com/firebase/firebase-js-sdk/commit/9cf727fcc3d049551b16ae0698ac33dc2fe45ada)]: + - @firebase/util@0.3.4 + - @firebase/component@0.1.21 + +## 0.4.18 + +### Patch Changes + +- Updated dependencies [[`a5768b0aa`](https://github.com/firebase/firebase-js-sdk/commit/a5768b0aa7d7ce732279931aa436e988c9f36487), [`7d916d905`](https://github.com/firebase/firebase-js-sdk/commit/7d916d905ba16816ac8ac7c8748c83831ff614ce)]: + - @firebase/component@0.1.20 + - @firebase/util@0.3.3 + +## 0.4.17 + +### Patch Changes + +- Updated dependencies [[`da1c7df79`](https://github.com/firebase/firebase-js-sdk/commit/da1c7df7982b08bbef82fcc8d93255f3e2d23cca), [`fb3b095e4`](https://github.com/firebase/firebase-js-sdk/commit/fb3b095e4b7c8f57fdb3172bc039c84576abf290)]: + - @firebase/component@0.1.19 + - @firebase/util@0.3.2 + +## 0.4.16 + +### Patch Changes + +- Updated dependencies [[`d4ca3da0`](https://github.com/firebase/firebase-js-sdk/commit/d4ca3da0a59fcea1261ba69d7eb663bba38d3089)]: + - @firebase/util@0.3.1 + - @firebase/component@0.1.18 + +## 0.4.15 + +### Patch Changes + +- Updated dependencies [[`a87676b8`](https://github.com/firebase/firebase-js-sdk/commit/a87676b84b78ccc2f057a22eb947a5d13402949c)]: + - @firebase/util@0.3.0 + - @firebase/component@0.1.17 + +## 0.4.14 + +### Patch Changes + +- [`a754645e`](https://github.com/firebase/firebase-js-sdk/commit/a754645ec2be1b8c205f25f510196eee298b0d6e) [#3297](https://github.com/firebase/firebase-js-sdk/pull/3297) Thanks [@renovate](https://github.com/apps/renovate)! - Update dependency typescript to v3.9.5 + +- Updated dependencies [[`a754645e`](https://github.com/firebase/firebase-js-sdk/commit/a754645ec2be1b8c205f25f510196eee298b0d6e)]: + - @firebase/component@0.1.16 diff --git a/packages/installations/package.json b/packages/installations/package.json index 9fbe3647904..ee42d2966c8 100644 --- a/packages/installations/package.json +++ b/packages/installations/package.json @@ -1,7 +1,6 @@ { - "name": "@firebase/installations-exp", - "version": "0.0.900", - "private": true, + "name": "@firebase/installations", + "version": "0.4.32", "author": "Firebase (https://firebase.google.com/)", "main": "dist/index.cjs.js", "module": "dist/index.esm2017.js", @@ -15,8 +14,8 @@ "lint": "eslint -c .eslintrc.js '**/*.ts' --ignore-path '../../.gitignore'", "lint:fix": "eslint --fix -c .eslintrc.js '**/*.ts' --ignore-path '../../.gitignore'", "build": "rollup -c && yarn api-report", - "build:deps": "lerna run --scope @firebase/installations-exp --include-dependencies build", - "build:release": "rollup -c rollup.config.release.js && yarn api-report && yarn typings:public", + "build:deps": "lerna run --scope @firebase/installations --include-dependencies build", + "build:release": "yarn build && yarn typings:public", "dev": "rollup -c -w", "test": "yarn type-check && yarn test:karma && yarn lint", "test:ci": "node ../../scripts/run_tests_in_ci.js", @@ -27,14 +26,13 @@ "serve:build": "rollup -c test-app/rollup.config.js", "serve:host": "http-server -c-1 test-app", "api-report": "api-extractor run --local --verbose", - "predoc": "node ../../scripts/exp/remove-exp.js temp", "doc": "api-documenter markdown --input temp --output docs", "build:doc": "yarn build && yarn doc", - "typings:public": "node ../../scripts/exp/use_typings.js ./dist/installations-exp-public.d.ts", + "typings:public": "node ../../scripts/exp/use_typings.js ./dist/installations-public.d.ts", "typings:internal": "node ../../scripts/exp/use_typings.js ./dist/src/index.d.ts" }, "repository": { - "directory": "packages-exp/installations-exp", + "directory": "packages/installations", "type": "git", "url": "https://github.com/firebase/firebase-js-sdk.git" }, @@ -42,7 +40,7 @@ "url": "https://github.com/firebase/firebase-js-sdk/issues" }, "devDependencies": { - "@firebase/app-exp": "0.0.900", + "@firebase/app": "0.6.30", "rollup": "2.52.2", "@rollup/plugin-commonjs": "17.1.0", "@rollup/plugin-json": "4.1.0", @@ -52,7 +50,7 @@ "typescript": "4.2.2" }, "peerDependencies": { - "@firebase/app-exp": "0.x" + "@firebase/app": "0.x" }, "dependencies": { "@firebase/util": "1.2.0", diff --git a/packages/installations/rollup.config.js b/packages/installations/rollup.config.js index d66e464f546..d01c2558271 100644 --- a/packages/installations/rollup.config.js +++ b/packages/installations/rollup.config.js @@ -18,17 +18,28 @@ import json from '@rollup/plugin-json'; import typescriptPlugin from 'rollup-plugin-typescript2'; import typescript from 'typescript'; -import { es2017BuildsNoPlugin, es5BuildsNoPlugin } from './rollup.shared'; +import pkg from './package.json'; + +const deps = [ + ...Object.keys({ ...pkg.peerDependencies, ...pkg.dependencies }) +]; /** * ES5 Builds */ const es5BuildPlugins = [typescriptPlugin({ typescript }), json()]; -const es5Builds = es5BuildsNoPlugin.map(build => ({ - ...build, - plugins: es5BuildPlugins -})); +const es5Builds = [ + { + input: 'src/index.ts', + output: [ + { file: pkg.main, format: 'cjs', sourcemap: true }, + { file: pkg.esm5, format: 'es', sourcemap: true } + ], + external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)), + plugins: es5BuildPlugins + } +]; /** * ES2017 Builds @@ -45,9 +56,17 @@ const es2017BuildPlugins = [ json({ preferConst: true }) ]; -const es2017Builds = es2017BuildsNoPlugin.map(build => ({ - ...build, - plugins: es2017BuildPlugins -})); +const es2017Builds = [ + { + input: 'src/index.ts', + output: { + file: pkg.browser, + format: 'es', + sourcemap: true + }, + external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)), + plugins: es2017BuildPlugins + } +]; export default [...es5Builds, ...es2017Builds]; diff --git a/packages/installations/rollup.config.release.js b/packages/installations/rollup.config.release.js deleted file mode 100644 index 5050932f4a4..00000000000 --- a/packages/installations/rollup.config.release.js +++ /dev/null @@ -1,71 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import json from '@rollup/plugin-json'; -import typescriptPlugin from 'rollup-plugin-typescript2'; -import typescript from 'typescript'; -import { importPathTransformer } from '../../scripts/exp/ts-transform-import-path'; -import { es2017BuildsNoPlugin, es5BuildsNoPlugin } from './rollup.shared'; - -/** - * ES5 Builds - */ -const es5BuildPlugins = [ - typescriptPlugin({ - typescript, - clean: true, - abortOnError: false, - transformers: [importPathTransformer] - }), - json() -]; - -const es5Builds = es5BuildsNoPlugin.map(build => ({ - ...build, - plugins: es5BuildPlugins, - treeshake: { - moduleSideEffects: false - } -})); - -/** - * ES2017 Builds - */ -const es2017BuildPlugins = [ - typescriptPlugin({ - typescript, - tsconfigOverride: { - compilerOptions: { - target: 'es2017' - } - }, - abortOnError: false, - clean: true, - transformers: [importPathTransformer] - }), - json({ preferConst: true }) -]; - -const es2017Builds = es2017BuildsNoPlugin.map(build => ({ - ...build, - plugins: es2017BuildPlugins, - treeshake: { - moduleSideEffects: false - } -})); - -export default [...es5Builds, ...es2017Builds]; diff --git a/packages/installations/rollup.shared.js b/packages/installations/rollup.shared.js deleted file mode 100644 index 329ad9eb73b..00000000000 --- a/packages/installations/rollup.shared.js +++ /dev/null @@ -1,51 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import pkg from './package.json'; - -const deps = [ - ...Object.keys({ ...pkg.peerDependencies, ...pkg.dependencies }), - '@firebase/app' -]; - -/** - * ES5 Builds - */ -export const es5BuildsNoPlugin = [ - { - input: 'src/index.ts', - output: [ - { file: pkg.main, format: 'cjs', sourcemap: true }, - { file: pkg.esm5, format: 'es', sourcemap: true } - ], - external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)) - } -]; - -/** - * ES2017 Builds - */ -export const es2017BuildsNoPlugin = [ - { - input: 'src/index.ts', - output: { - file: pkg.browser, - format: 'es', - sourcemap: true - }, - external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)) - } -]; diff --git a/packages/installations/src/api/get-installations.ts b/packages/installations/src/api/get-installations.ts index 777cb3fdc75..98ee432a747 100644 --- a/packages/installations/src/api/get-installations.ts +++ b/packages/installations/src/api/get-installations.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { FirebaseApp, getApp, _getProvider } from '@firebase/app-exp'; +import { FirebaseApp, getApp, _getProvider } from '@firebase/app'; import { Installations } from '../interfaces/public-types'; /** @@ -28,7 +28,7 @@ import { Installations } from '../interfaces/public-types'; export function getInstallations(app: FirebaseApp = getApp()): Installations { const installationsImpl = _getProvider( app, - 'installations-exp' + 'installations' ).getImmediate(); return installationsImpl; } diff --git a/packages/installations/src/functions/config.ts b/packages/installations/src/functions/config.ts index efd48f4468f..5d395f68ebd 100644 --- a/packages/installations/src/functions/config.ts +++ b/packages/installations/src/functions/config.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { _registerComponent, _getProvider } from '@firebase/app-exp'; +import { _registerComponent, _getProvider } from '@firebase/app'; import { Component, ComponentType, @@ -27,13 +27,13 @@ import { _FirebaseInstallationsInternal } from '../interfaces/public-types'; import { FirebaseInstallationsImpl } from '../interfaces/installation-impl'; import { extractAppConfig } from '../helpers/extract-app-config'; -const INSTALLATIONS_NAME = 'installations-exp'; -const INSTALLATIONS_NAME_INTERNAL = 'installations-exp-internal'; +const INSTALLATIONS_NAME = 'installations'; +const INSTALLATIONS_NAME_INTERNAL = 'installations-internal'; -const publicFactory: InstanceFactory<'installations-exp'> = ( +const publicFactory: InstanceFactory<'installations'> = ( container: ComponentContainer ) => { - const app = container.getProvider('app-exp').getImmediate(); + const app = container.getProvider('app').getImmediate(); // Throws if app isn't configured properly. const appConfig = extractAppConfig(app); const platformLoggerProvider = _getProvider(app, 'platform-logger'); @@ -47,10 +47,10 @@ const publicFactory: InstanceFactory<'installations-exp'> = ( return installationsImpl; }; -const internalFactory: InstanceFactory<'installations-exp-internal'> = ( +const internalFactory: InstanceFactory<'installations-internal'> = ( container: ComponentContainer ) => { - const app = container.getProvider('app-exp').getImmediate(); + const app = container.getProvider('app').getImmediate(); // Internal FIS instance relies on public FIS instance. const installations = _getProvider(app, INSTALLATIONS_NAME).getImmediate(); diff --git a/packages/installations/src/helpers/extract-app-config.ts b/packages/installations/src/helpers/extract-app-config.ts index b4c693f1b46..5b018aa8c7b 100644 --- a/packages/installations/src/helpers/extract-app-config.ts +++ b/packages/installations/src/helpers/extract-app-config.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { FirebaseApp, FirebaseOptions } from '@firebase/app-exp'; +import { FirebaseApp, FirebaseOptions } from '@firebase/app'; import { FirebaseError } from '@firebase/util'; import { AppConfig } from '../interfaces/installation-impl'; import { ERROR_FACTORY, ErrorCode } from '../util/errors'; diff --git a/packages/installations/src/index.ts b/packages/installations/src/index.ts index 5aa6674dea3..2d7f4b1b77b 100644 --- a/packages/installations/src/index.ts +++ b/packages/installations/src/index.ts @@ -22,7 +22,7 @@ */ import { registerInstallations } from './functions/config'; -import { registerVersion } from '@firebase/app-exp'; +import { registerVersion } from '@firebase/app'; import { name, version } from '../package.json'; export * from './api'; diff --git a/packages/installations/src/interfaces/installation-impl.ts b/packages/installations/src/interfaces/installation-impl.ts index 8c1a1147e94..2598275f9ad 100644 --- a/packages/installations/src/interfaces/installation-impl.ts +++ b/packages/installations/src/interfaces/installation-impl.ts @@ -16,7 +16,7 @@ */ import { Provider } from '@firebase/component'; -import { _FirebaseService } from '@firebase/app-exp'; +import { _FirebaseService } from '@firebase/app'; import { Installations } from '../interfaces/public-types'; export interface FirebaseInstallationsImpl diff --git a/packages/installations/src/interfaces/public-types.ts b/packages/installations/src/interfaces/public-types.ts index d37aa69e6bb..559d3f6cb2c 100644 --- a/packages/installations/src/interfaces/public-types.ts +++ b/packages/installations/src/interfaces/public-types.ts @@ -43,7 +43,7 @@ export interface _FirebaseInstallationsInternal { declare module '@firebase/component' { interface NameServiceMapping { - 'installations-exp': Installations; - 'installations-exp-internal': _FirebaseInstallationsInternal; + 'installations': Installations; + 'installations-internal': _FirebaseInstallationsInternal; } } diff --git a/packages/installations/src/testing/fake-generators.ts b/packages/installations/src/testing/fake-generators.ts index 0240b263943..419e0151e43 100644 --- a/packages/installations/src/testing/fake-generators.ts +++ b/packages/installations/src/testing/fake-generators.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { FirebaseApp } from '@firebase/app-exp'; +import { FirebaseApp } from '@firebase/app'; import { Component, ComponentContainer, diff --git a/packages/messaging-compat/package.json b/packages/messaging-compat/package.json index 7e3912b59b1..5c5208ecb54 100644 --- a/packages/messaging-compat/package.json +++ b/packages/messaging-compat/package.json @@ -38,7 +38,7 @@ "tslib": "^2.1.0" }, "devDependencies": { - "@firebase/app-compat": "0.0.900", + "@firebase/app-compat": "0.1.0", "@rollup/plugin-json": "4.1.0", "rollup-plugin-typescript2": "0.30.0", "ts-essentials": "7.0.1", diff --git a/packages/performance-compat/package.json b/packages/performance-compat/package.json index 86ae8ab0653..ae4f84d5758 100644 --- a/packages/performance-compat/package.json +++ b/packages/performance-compat/package.json @@ -43,7 +43,7 @@ "rollup-plugin-replace": "2.2.0", "rollup-plugin-typescript2": "0.30.0", "typescript": "4.2.2", - "@firebase/app-compat": "0.0.900" + "@firebase/app-compat": "0.1.0" }, "repository": { "directory": "packages-exp/performance-compat", diff --git a/packages/remote-config-compat/package.json b/packages/remote-config-compat/package.json index f2ae408cbdf..114dcb1333d 100644 --- a/packages/remote-config-compat/package.json +++ b/packages/remote-config-compat/package.json @@ -42,7 +42,7 @@ "rollup-plugin-replace": "2.2.0", "rollup-plugin-typescript2": "0.30.0", "typescript": "4.2.2", - "@firebase/app-compat": "0.0.900" + "@firebase/app-compat": "0.1.0" }, "repository": { "directory": "packages-exp/remote-config-compat", From 3d7cb6eaa997fde8c784017383415b9fba854246 Mon Sep 17 00:00:00 2001 From: Feiyang1 Date: Wed, 18 Aug 2021 15:51:14 -0700 Subject: [PATCH 05/38] migrate app check --- ...{app-check-exp.api.md => app-check.api.md} | 188 +++++++++--------- packages/app-check-compat/package.json | 9 +- packages/app-check-compat/rollup.config.js | 40 +++- .../app-check-compat/rollup.config.release.js | 67 ------- packages/app-check-compat/rollup.shared.js | 38 ---- packages/app-check-compat/src/service.test.ts | 4 +- packages/app-check-compat/src/service.ts | 2 +- packages/app-check-types/index.d.ts | 2 +- packages/app-check/CHANGELOG.md | 92 +++++++++ packages/app-check/package.json | 16 +- packages/app-check/rollup.config.js | 40 +++- packages/app-check/rollup.config.release.js | 73 ------- packages/app-check/rollup.shared.js | 54 ----- packages/app-check/src/api.test.ts | 2 +- packages/app-check/src/api.ts | 6 +- packages/app-check/src/client.test.ts | 2 +- packages/app-check/src/client.ts | 2 +- packages/app-check/src/factory.ts | 2 +- packages/app-check/src/index.ts | 8 +- packages/app-check/src/indexeddb.ts | 2 +- packages/app-check/src/internal-api.test.ts | 2 +- packages/app-check/src/internal-api.ts | 2 +- packages/app-check/src/providers.ts | 2 +- packages/app-check/src/public-types.ts | 4 +- packages/app-check/src/recaptcha.test.ts | 2 +- packages/app-check/src/recaptcha.ts | 2 +- packages/app-check/src/state.ts | 2 +- packages/app-check/src/storage.ts | 2 +- packages/app-check/src/types.ts | 2 +- packages/app-check/src/util.ts | 2 +- packages/app-check/test/util.ts | 7 +- 31 files changed, 289 insertions(+), 389 deletions(-) rename common/api-review/{app-check-exp.api.md => app-check.api.md} (91%) delete mode 100644 packages/app-check-compat/rollup.config.release.js create mode 100644 packages/app-check/CHANGELOG.md delete mode 100644 packages/app-check/rollup.config.release.js delete mode 100644 packages/app-check/rollup.shared.js diff --git a/common/api-review/app-check-exp.api.md b/common/api-review/app-check.api.md similarity index 91% rename from common/api-review/app-check-exp.api.md rename to common/api-review/app-check.api.md index 976284c1cad..154e7ce2295 100644 --- a/common/api-review/app-check-exp.api.md +++ b/common/api-review/app-check.api.md @@ -1,94 +1,94 @@ -## API Report File for "@firebase/app-check-exp" - -> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). - -```ts - -import { FirebaseApp } from '@firebase/app-exp'; -import { PartialObserver } from '@firebase/util'; -import { Unsubscribe } from '@firebase/util'; - -// @public -export interface AppCheck { - app: FirebaseApp; -} - -// @internal (undocumented) -export type _AppCheckComponentName = 'app-check-exp'; - -// @internal (undocumented) -export type _AppCheckInternalComponentName = 'app-check-internal'; - -// @public -export interface AppCheckOptions { - isTokenAutoRefreshEnabled?: boolean; - provider: CustomProvider | ReCaptchaV3Provider; -} - -// @public -export interface AppCheckToken { - readonly expireTimeMillis: number; - // (undocumented) - readonly token: string; -} - -// @public -export type AppCheckTokenListener = (token: AppCheckTokenResult) => void; - -// @public -export interface AppCheckTokenResult { - readonly token: string; -} - -// Warning: (ae-forgotten-export) The symbol "AppCheckProvider" needs to be exported by the entry point index.d.ts -// -// @public -export class CustomProvider implements AppCheckProvider { - constructor(_customProviderOptions: CustomProviderOptions); - // Warning: (ae-forgotten-export) The symbol "AppCheckTokenInternal" needs to be exported by the entry point index.d.ts - // - // @internal (undocumented) - getToken(): Promise; - // @internal (undocumented) - initialize(app: FirebaseApp): void; - // @internal (undocumented) - isEqual(otherProvider: unknown): boolean; -} - -// @public -export interface CustomProviderOptions { - getToken: () => Promise; -} - -// @public -export function getToken(appCheckInstance: AppCheck, forceRefresh?: boolean): Promise; - -// @public -export function initializeAppCheck(app: FirebaseApp | undefined, options: AppCheckOptions): AppCheck; - -// @public -export function onTokenChanged(appCheckInstance: AppCheck, observer: PartialObserver): Unsubscribe; - -// @public -export function onTokenChanged(appCheckInstance: AppCheck, onNext: (tokenResult: AppCheckTokenResult) => void, onError?: (error: Error) => void, onCompletion?: () => void): Unsubscribe; - -export { PartialObserver } - -// @public -export class ReCaptchaV3Provider implements AppCheckProvider { - constructor(_siteKey: string); - // @internal - getToken(): Promise; - // @internal (undocumented) - initialize(app: FirebaseApp): void; - // @internal (undocumented) - isEqual(otherProvider: unknown): boolean; - } - -// @public -export function setTokenAutoRefreshEnabled(appCheckInstance: AppCheck, isTokenAutoRefreshEnabled: boolean): void; - -export { Unsubscribe } - - -``` +## API Report File for "@firebase/app-check" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts + +import { FirebaseApp } from '@firebase/app'; +import { PartialObserver } from '@firebase/util'; +import { Unsubscribe } from '@firebase/util'; + +// @public +export interface AppCheck { + app: FirebaseApp; +} + +// @internal (undocumented) +export type _AppCheckComponentName = 'app-check'; + +// @internal (undocumented) +export type _AppCheckInternalComponentName = 'app-check-internal'; + +// @public +export interface AppCheckOptions { + isTokenAutoRefreshEnabled?: boolean; + provider: CustomProvider | ReCaptchaV3Provider; +} + +// @public +export interface AppCheckToken { + readonly expireTimeMillis: number; + // (undocumented) + readonly token: string; +} + +// @public +export type AppCheckTokenListener = (token: AppCheckTokenResult) => void; + +// @public +export interface AppCheckTokenResult { + readonly token: string; +} + +// Warning: (ae-forgotten-export) The symbol "AppCheckProvider" needs to be exported by the entry point index.d.ts +// +// @public +export class CustomProvider implements AppCheckProvider { + constructor(_customProviderOptions: CustomProviderOptions); + // Warning: (ae-forgotten-export) The symbol "AppCheckTokenInternal" needs to be exported by the entry point index.d.ts + // + // @internal (undocumented) + getToken(): Promise; + // @internal (undocumented) + initialize(app: FirebaseApp): void; + // @internal (undocumented) + isEqual(otherProvider: unknown): boolean; +} + +// @public +export interface CustomProviderOptions { + getToken: () => Promise; +} + +// @public +export function getToken(appCheckInstance: AppCheck, forceRefresh?: boolean): Promise; + +// @public +export function initializeAppCheck(app: FirebaseApp | undefined, options: AppCheckOptions): AppCheck; + +// @public +export function onTokenChanged(appCheckInstance: AppCheck, observer: PartialObserver): Unsubscribe; + +// @public +export function onTokenChanged(appCheckInstance: AppCheck, onNext: (tokenResult: AppCheckTokenResult) => void, onError?: (error: Error) => void, onCompletion?: () => void): Unsubscribe; + +export { PartialObserver } + +// @public +export class ReCaptchaV3Provider implements AppCheckProvider { + constructor(_siteKey: string); + // @internal + getToken(): Promise; + // @internal (undocumented) + initialize(app: FirebaseApp): void; + // @internal (undocumented) + isEqual(otherProvider: unknown): boolean; + } + +// @public +export function setTokenAutoRefreshEnabled(appCheckInstance: AppCheck, isTokenAutoRefreshEnabled: boolean): void; + +export { Unsubscribe } + + +``` diff --git a/packages/app-check-compat/package.json b/packages/app-check-compat/package.json index ce5cbef6f87..868f0517f1c 100644 --- a/packages/app-check-compat/package.json +++ b/packages/app-check-compat/package.json @@ -1,7 +1,6 @@ { "name": "@firebase/app-check-compat", - "version": "0.0.900", - "private": true, + "version": "0.1.0", "description": "A compat App Check package for new firebase packages", "author": "Firebase (https://firebase.google.com/)", "main": "dist/index.cjs.js", @@ -14,19 +13,19 @@ "lint": "eslint -c .eslintrc.js '**/*.ts' --ignore-path '../../.gitignore'", "lint:fix": "eslint --fix -c .eslintrc.js '**/*.ts' --ignore-path '../../.gitignore'", "build": "rollup -c", - "build:release": "rollup -c rollup.config.release.js && yarn add-compat-overloads", + "build:release": "yarn build && yarn add-compat-overloads", "build:deps": "lerna run --scope @firebase/app-check-compat --include-dependencies build", "dev": "rollup -c -w", "test": "run-p lint test:browser", "test:ci": "node ../../scripts/run_tests_in_ci.js -s test:browser", "test:browser": "karma start --single-run --nocache", - "add-compat-overloads": "ts-node-script ../../scripts/exp/create-overloads.ts -i ../app-check-exp/dist/app-check-exp-public.d.ts -o dist/src/index.d.ts -a -r AppCheck:FirebaseAppCheck -r FirebaseApp:FirebaseAppCompat --moduleToEnhance @firebase/app-check" + "add-compat-overloads": "ts-node-script ../../scripts/exp/create-overloads.ts -i ../app-check/dist/app-check-public.d.ts -o dist/src/index.d.ts -a -r AppCheck:FirebaseAppCheck -r FirebaseApp:FirebaseAppCompat --moduleToEnhance @firebase/app-check" }, "peerDependencies": { "@firebase/app-compat": "0.x" }, "dependencies": { - "@firebase/app-check-exp": "0.0.900", + "@firebase/app-check": "0.3.2", "@firebase/logger": "0.2.6", "@firebase/util": "1.2.0", "@firebase/component": "0.5.5", diff --git a/packages/app-check-compat/rollup.config.js b/packages/app-check-compat/rollup.config.js index 9b89b7772af..c5d161f6e62 100644 --- a/packages/app-check-compat/rollup.config.js +++ b/packages/app-check-compat/rollup.config.js @@ -18,8 +18,9 @@ import json from '@rollup/plugin-json'; import typescriptPlugin from 'rollup-plugin-typescript2'; import typescript from 'typescript'; -import { es2017BuildsNoPlugin, es5BuildsNoPlugin } from './rollup.shared'; +import pkg from './package.json'; +const deps = Object.keys(Object.assign({}, pkg.peerDependencies, pkg.dependencies)); /** * ES5 Builds */ @@ -30,10 +31,20 @@ const es5BuildPlugins = [ json() ]; -const es5Builds = es5BuildsNoPlugin.map(build => ({ - ...build, - plugins: es5BuildPlugins -})); +const es5Builds = [ + /** + * Browser Builds + */ + { + input: 'src/index.ts', + output: [ + { file: pkg.main, format: 'cjs', sourcemap: true }, + { file: pkg.esm5, format: 'es', sourcemap: true } + ], + external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)), + plugins: es5BuildPlugins + } +]; /** * ES2017 Builds @@ -50,9 +61,20 @@ const es2017BuildPlugins = [ json({ preferConst: true }) ]; -const es2017Builds = es2017BuildsNoPlugin.map(build => ({ - ...build, - plugins: es2017BuildPlugins -})); +const es2017Builds = [ + { + /** + * Browser Build + */ + input: 'src/index.ts', + output: { + file: pkg.browser, + format: 'es', + sourcemap: true + }, + external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)), + plugins: es2017BuildPlugins + } +]; export default [...es5Builds, ...es2017Builds]; diff --git a/packages/app-check-compat/rollup.config.release.js b/packages/app-check-compat/rollup.config.release.js deleted file mode 100644 index 1896d7036f5..00000000000 --- a/packages/app-check-compat/rollup.config.release.js +++ /dev/null @@ -1,67 +0,0 @@ -/** - * @license - * Copyright 2021 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import typescriptPlugin from 'rollup-plugin-typescript2'; -import typescript from 'typescript'; -import json from '@rollup/plugin-json'; -import { importPathTransformer } from '../../scripts/exp/ts-transform-import-path'; -import { es2017BuildsNoPlugin, es5BuildsNoPlugin } from './rollup.shared'; - -/** - * ES5 Builds - */ -const es5BuildPlugins = [ - typescriptPlugin({ - typescript, - clean: true, - abortOnError: false, - transformers: [importPathTransformer] - }), - json() -]; - -const es5Builds = es5BuildsNoPlugin.map(build => ({ - ...build, - plugins: es5BuildPlugins -})); - -/** - * ES2017 Builds - */ -const es2017BuildPlugins = [ - typescriptPlugin({ - typescript, - tsconfigOverride: { - compilerOptions: { - target: 'es2017' - } - }, - abortOnError: false, - clean: true, - transformers: [importPathTransformer] - }), - json({ - preferConst: true - }) -]; - -const es2017Builds = es2017BuildsNoPlugin.map(build => ({ - ...build, - plugins: es2017BuildPlugins -})); - -export default [...es5Builds, ...es2017Builds]; diff --git a/packages/app-check-compat/rollup.shared.js b/packages/app-check-compat/rollup.shared.js index 24bbc5a28c7..776f45fed8c 100644 --- a/packages/app-check-compat/rollup.shared.js +++ b/packages/app-check-compat/rollup.shared.js @@ -14,41 +14,3 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import pkg from './package.json'; - -const deps = [ - ...Object.keys(Object.assign({}, pkg.peerDependencies, pkg.dependencies)), - '@firebase/app' -]; - -export const es5BuildsNoPlugin = [ - /** - * Browser Builds - */ - { - input: 'src/index.ts', - output: [ - { file: pkg.main, format: 'cjs', sourcemap: true }, - { file: pkg.esm5, format: 'es', sourcemap: true } - ], - external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)) - } -]; - -/** - * ES2017 Builds - */ -export const es2017BuildsNoPlugin = [ - { - /** - * Browser Build - */ - input: 'src/index.ts', - output: { - file: pkg.browser, - format: 'es', - sourcemap: true - }, - external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)) - } -]; diff --git a/packages/app-check-compat/src/service.test.ts b/packages/app-check-compat/src/service.test.ts index 3799231126f..79c86043fdb 100644 --- a/packages/app-check-compat/src/service.test.ts +++ b/packages/app-check-compat/src/service.test.ts @@ -17,14 +17,14 @@ import { expect, use } from 'chai'; import { AppCheckService } from './service'; import { firebase, FirebaseApp } from '@firebase/app-compat'; -import * as appCheckExp from '@firebase/app-check-exp'; +import * as appCheckExp from '@firebase/app-check'; import { stub, match, SinonStub } from 'sinon'; import * as sinonChai from 'sinon-chai'; import { AppCheck, CustomProvider, ReCaptchaV3Provider -} from '@firebase/app-check-exp'; +} from '@firebase/app-check'; import { AppCheckTokenResult } from '@firebase/app-check-types'; import { PartialObserver } from '@firebase/util'; import { AppCheckError } from './errors'; diff --git a/packages/app-check-compat/src/service.ts b/packages/app-check-compat/src/service.ts index dc70e88c78e..adffc834ae0 100644 --- a/packages/app-check-compat/src/service.ts +++ b/packages/app-check-compat/src/service.ts @@ -29,7 +29,7 @@ import { setTokenAutoRefreshEnabled as setTokenAutoRefreshEnabledExp, getToken as getTokenExp, onTokenChanged as onTokenChangedExp -} from '@firebase/app-check-exp'; +} from '@firebase/app-check'; import { PartialObserver, Unsubscribe } from '@firebase/util'; import { ERROR_FACTORY, AppCheckError } from './errors'; diff --git a/packages/app-check-types/index.d.ts b/packages/app-check-types/index.d.ts index e75208c7c7b..32913afaacc 100644 --- a/packages/app-check-types/index.d.ts +++ b/packages/app-check-types/index.d.ts @@ -145,6 +145,6 @@ interface AppCheckTokenResult { export type AppCheckComponentName = 'appCheck'; declare module '@firebase/component' { interface NameServiceMapping { - 'appCheck': FirebaseAppCheck; + 'appCheck-compat': FirebaseAppCheck; } } diff --git a/packages/app-check/CHANGELOG.md b/packages/app-check/CHANGELOG.md new file mode 100644 index 00000000000..dab787b180b --- /dev/null +++ b/packages/app-check/CHANGELOG.md @@ -0,0 +1,92 @@ +# @firebase/app-check + +## 0.3.1 + +### Patch Changes + +- [`f1027e3c2`](https://github.com/firebase/firebase-js-sdk/commit/f1027e3c24cab52046766a898c6702860f5ad3f6) [#5261](https://github.com/firebase/firebase-js-sdk/pull/5261) (fixes [#5258](https://github.com/firebase/firebase-js-sdk/issues/5258)) - Fixed argument typings for `activate()`. + +- Updated dependencies [[`f1027e3c2`](https://github.com/firebase/firebase-js-sdk/commit/f1027e3c24cab52046766a898c6702860f5ad3f6)]: + - @firebase/app-check-types@0.3.1 + +## 0.3.0 + +### Minor Changes + +- [`8599d9141`](https://github.com/firebase/firebase-js-sdk/commit/8599d91416ae8ac5202742f11cee00666d3360ec) [#4902](https://github.com/firebase/firebase-js-sdk/pull/4902) - Add `RecaptchaV3Provider` and `CustomProvider` classes that can be supplied to `firebase.appCheck().activate()`. + +### Patch Changes + +- Updated dependencies [[`8599d9141`](https://github.com/firebase/firebase-js-sdk/commit/8599d91416ae8ac5202742f11cee00666d3360ec)]: + - @firebase/app-check-types@0.3.0 + +## 0.2.1 + +### Patch Changes + +- Updated dependencies [[`a3cbe719b`](https://github.com/firebase/firebase-js-sdk/commit/a3cbe719b1bd733a5c4c15ee0d0e6388d512054c)]: + - @firebase/util@1.2.0 + - @firebase/component@0.5.5 + +## 0.2.0 + +### Minor Changes + +- [`870dd5e35`](https://github.com/firebase/firebase-js-sdk/commit/870dd5e3594f5b588bdc2801c60c6d984d1d08cc) [#5033](https://github.com/firebase/firebase-js-sdk/pull/5033) - Added `getToken()` and `onTokenChanged` methods to App Check. + +### Patch Changes + +- [`5d007b8fb`](https://github.com/firebase/firebase-js-sdk/commit/5d007b8fb64ac26c2f82704398965e9f3deda58a) [#5084](https://github.com/firebase/firebase-js-sdk/pull/5084) - Fixed so token listeners added through public API call the error handler while internal token listeners return the error as a token field. + +* [`5d31e2192`](https://github.com/firebase/firebase-js-sdk/commit/5d31e2192d0ea68a768bc7826ad5aa830c2bc36c) [#5055](https://github.com/firebase/firebase-js-sdk/pull/5055) (fixes [#5052](https://github.com/firebase/firebase-js-sdk/issues/5052)) - Fix an error causing App Check to log `HTTP status 429` errors in debug mode. + +* Updated dependencies [[`870dd5e35`](https://github.com/firebase/firebase-js-sdk/commit/870dd5e3594f5b588bdc2801c60c6d984d1d08cc), [`5d007b8fb`](https://github.com/firebase/firebase-js-sdk/commit/5d007b8fb64ac26c2f82704398965e9f3deda58a), [`56a6a9d4a`](https://github.com/firebase/firebase-js-sdk/commit/56a6a9d4af2766154584a0f66d3c4d8024d74ba5)]: + - @firebase/app-check-types@0.2.0 + - @firebase/component@0.5.4 + +## 0.1.4 + +### Patch Changes + +- Updated dependencies [[`725ab4684`](https://github.com/firebase/firebase-js-sdk/commit/725ab4684ef0999a12f71e704c204a00fb030e5d)]: + - @firebase/component@0.5.3 + +## 0.1.3 + +### Patch Changes + +- Updated dependencies [[`4c4b6aed9`](https://github.com/firebase/firebase-js-sdk/commit/4c4b6aed9757c9a7e75fb698a15e53274f93880b)]: + - @firebase/component@0.5.2 + +## 0.1.2 + +### Patch Changes + +- Updated dependencies [[`5fbc5fb01`](https://github.com/firebase/firebase-js-sdk/commit/5fbc5fb0140d7da980fd7ebbfbae810f8c64ae19)]: + - @firebase/component@0.5.1 + +## 0.1.1 + +### Patch Changes + +- [`60e834739`](https://github.com/firebase/firebase-js-sdk/commit/60e83473940e60f8390b1b0f97cf45a1733f66f0) [#4897](https://github.com/firebase/firebase-js-sdk/pull/4897) - Make App Check initialization explicit, to prevent unexpected errors for users who do not intend to use App Check. + +## 0.1.0 + +### Minor Changes + +- [`81c131abe`](https://github.com/firebase/firebase-js-sdk/commit/81c131abea7001c5933156ff6b0f3925f16ff052) [#4860](https://github.com/firebase/firebase-js-sdk/pull/4860) - Release the Firebase App Check package. + +### Patch Changes + +- Updated dependencies [[`81c131abe`](https://github.com/firebase/firebase-js-sdk/commit/81c131abea7001c5933156ff6b0f3925f16ff052)]: + - @firebase/app-check-interop-types@0.1.0 + - @firebase/app-check-types@0.1.0 + +## 0.1.1 + +### Patch Changes + +- Updated dependencies [[`c34ac7a92`](https://github.com/firebase/firebase-js-sdk/commit/c34ac7a92a616915f38d192654db7770d81747ae), [`ac4ad08a2`](https://github.com/firebase/firebase-js-sdk/commit/ac4ad08a284397ec966e991dd388bb1fba857467)]: + - @firebase/component@0.5.0 + - @firebase/util@1.1.0 diff --git a/packages/app-check/package.json b/packages/app-check/package.json index c0623b4b51b..bb66d862278 100644 --- a/packages/app-check/package.json +++ b/packages/app-check/package.json @@ -1,7 +1,6 @@ { - "name": "@firebase/app-check-exp", - "version": "0.0.900", - "private": true, + "name": "@firebase/app-check", + "version": "0.3.2", "description": "An App Check package for new firebase packages", "author": "Firebase (https://firebase.google.com/)", "main": "dist/index.cjs.js", @@ -14,20 +13,19 @@ "lint": "eslint -c .eslintrc.js '**/*.ts' --ignore-path '../../.gitignore'", "lint:fix": "eslint --fix -c .eslintrc.js '**/*.ts' --ignore-path '../../.gitignore'", "build": "rollup -c && yarn api-report", - "build:release": "rollup -c rollup.config.release.js && yarn api-report && yarn typings:public", - "build:deps": "lerna run --scope @firebase/app-check-exp --include-dependencies build", + "build:release": "yarn build && yarn api-report && yarn typings:public", + "build:deps": "lerna run --scope @firebase/app-check --include-dependencies build", "dev": "rollup -c -w", "test": "run-p lint test:browser", "test:ci": "node ../../scripts/run_tests_in_ci.js -s test:browser", "test:browser": "karma start --single-run --nocache", "api-report": "api-extractor run --local --verbose", - "predoc": "node ../../scripts/exp/remove-exp.js temp", "doc": "api-documenter markdown --input temp --output docs", "build:doc": "yarn build && yarn doc", - "typings:public": "node ../../scripts/exp/use_typings.js ./dist/app-check-exp-public.d.ts" + "typings:public": "node ../../scripts/exp/use_typings.js ./dist/app-check-public.d.ts" }, "peerDependencies": { - "@firebase/app-exp": "0.x" + "@firebase/app": "0.x" }, "dependencies": { "@firebase/logger": "0.2.6", @@ -37,7 +35,7 @@ }, "license": "Apache-2.0", "devDependencies": { - "@firebase/app-exp": "0.0.900", + "@firebase/app": "0.6.30", "rollup": "2.52.2", "@rollup/plugin-commonjs": "17.1.0", "@rollup/plugin-json": "4.1.0", diff --git a/packages/app-check/rollup.config.js b/packages/app-check/rollup.config.js index 9b89b7772af..c5d161f6e62 100644 --- a/packages/app-check/rollup.config.js +++ b/packages/app-check/rollup.config.js @@ -18,8 +18,9 @@ import json from '@rollup/plugin-json'; import typescriptPlugin from 'rollup-plugin-typescript2'; import typescript from 'typescript'; -import { es2017BuildsNoPlugin, es5BuildsNoPlugin } from './rollup.shared'; +import pkg from './package.json'; +const deps = Object.keys(Object.assign({}, pkg.peerDependencies, pkg.dependencies)); /** * ES5 Builds */ @@ -30,10 +31,20 @@ const es5BuildPlugins = [ json() ]; -const es5Builds = es5BuildsNoPlugin.map(build => ({ - ...build, - plugins: es5BuildPlugins -})); +const es5Builds = [ + /** + * Browser Builds + */ + { + input: 'src/index.ts', + output: [ + { file: pkg.main, format: 'cjs', sourcemap: true }, + { file: pkg.esm5, format: 'es', sourcemap: true } + ], + external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)), + plugins: es5BuildPlugins + } +]; /** * ES2017 Builds @@ -50,9 +61,20 @@ const es2017BuildPlugins = [ json({ preferConst: true }) ]; -const es2017Builds = es2017BuildsNoPlugin.map(build => ({ - ...build, - plugins: es2017BuildPlugins -})); +const es2017Builds = [ + { + /** + * Browser Build + */ + input: 'src/index.ts', + output: { + file: pkg.browser, + format: 'es', + sourcemap: true + }, + external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)), + plugins: es2017BuildPlugins + } +]; export default [...es5Builds, ...es2017Builds]; diff --git a/packages/app-check/rollup.config.release.js b/packages/app-check/rollup.config.release.js deleted file mode 100644 index aed49b162c9..00000000000 --- a/packages/app-check/rollup.config.release.js +++ /dev/null @@ -1,73 +0,0 @@ -/** - * @license - * Copyright 2021 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import typescriptPlugin from 'rollup-plugin-typescript2'; -import typescript from 'typescript'; -import json from '@rollup/plugin-json'; -import { importPathTransformer } from '../../scripts/exp/ts-transform-import-path'; -import { es2017BuildsNoPlugin, es5BuildsNoPlugin } from './rollup.shared'; - -/** - * ES5 Builds - */ -const es5BuildPlugins = [ - typescriptPlugin({ - typescript, - clean: true, - abortOnError: false, - transformers: [importPathTransformer] - }), - json() -]; - -const es5Builds = es5BuildsNoPlugin.map(build => ({ - ...build, - plugins: es5BuildPlugins, - treeshake: { - moduleSideEffects: id => id === '@firebase/installations' - } -})); - -/** - * ES2017 Builds - */ -const es2017BuildPlugins = [ - typescriptPlugin({ - typescript, - tsconfigOverride: { - compilerOptions: { - target: 'es2017' - } - }, - abortOnError: false, - clean: true, - transformers: [importPathTransformer] - }), - json({ - preferConst: true - }) -]; - -const es2017Builds = es2017BuildsNoPlugin.map(build => ({ - ...build, - plugins: es2017BuildPlugins, - treeshake: { - moduleSideEffects: id => id === '@firebase/installations' - } -})); - -export default [...es5Builds, ...es2017Builds]; diff --git a/packages/app-check/rollup.shared.js b/packages/app-check/rollup.shared.js deleted file mode 100644 index 24bbc5a28c7..00000000000 --- a/packages/app-check/rollup.shared.js +++ /dev/null @@ -1,54 +0,0 @@ -/** - * @license - * Copyright 2021 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import pkg from './package.json'; - -const deps = [ - ...Object.keys(Object.assign({}, pkg.peerDependencies, pkg.dependencies)), - '@firebase/app' -]; - -export const es5BuildsNoPlugin = [ - /** - * Browser Builds - */ - { - input: 'src/index.ts', - output: [ - { file: pkg.main, format: 'cjs', sourcemap: true }, - { file: pkg.esm5, format: 'es', sourcemap: true } - ], - external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)) - } -]; - -/** - * ES2017 Builds - */ -export const es2017BuildsNoPlugin = [ - { - /** - * Browser Build - */ - input: 'src/index.ts', - output: { - file: pkg.browser, - format: 'es', - sourcemap: true - }, - external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)) - } -]; diff --git a/packages/app-check/src/api.test.ts b/packages/app-check/src/api.test.ts index fc06ffc1ba9..3e435f5b0cb 100644 --- a/packages/app-check/src/api.test.ts +++ b/packages/app-check/src/api.test.ts @@ -38,7 +38,7 @@ import * as logger from './logger'; import * as client from './client'; import * as storage from './storage'; import * as internalApi from './internal-api'; -import { deleteApp, FirebaseApp } from '@firebase/app-exp'; +import { deleteApp, FirebaseApp } from '@firebase/app'; import { CustomProvider, ReCaptchaV3Provider } from './providers'; import { AppCheckService } from './factory'; import { AppCheckToken } from './public-types'; diff --git a/packages/app-check/src/api.ts b/packages/app-check/src/api.ts index fefe64519f3..48ed326018c 100644 --- a/packages/app-check/src/api.ts +++ b/packages/app-check/src/api.ts @@ -24,7 +24,7 @@ import { } from './public-types'; import { ERROR_FACTORY, AppCheckError } from './errors'; import { getState, setState, AppCheckState } from './state'; -import { FirebaseApp, getApp, _getProvider } from '@firebase/app-exp'; +import { FirebaseApp, getApp, _getProvider } from '@firebase/app'; import { getModularInstance, ErrorFn, NextFn } from '@firebase/util'; import { AppCheckService } from './factory'; import { AppCheckProvider, ListenerType } from './types'; @@ -38,7 +38,7 @@ import { readTokenFromStorage } from './storage'; declare module '@firebase/component' { interface NameServiceMapping { - 'app-check-exp': AppCheckService; + 'app-check': AppCheckService; } } @@ -55,7 +55,7 @@ export function initializeAppCheck( options: AppCheckOptions ): AppCheck { app = getModularInstance(app); - const provider = _getProvider(app, 'app-check-exp'); + const provider = _getProvider(app, 'app-check'); if (provider.isInitialized()) { const existingInstance = provider.getImmediate(); diff --git a/packages/app-check/src/client.test.ts b/packages/app-check/src/client.test.ts index fbdb524c464..769c3f49fb5 100644 --- a/packages/app-check/src/client.test.ts +++ b/packages/app-check/src/client.test.ts @@ -18,7 +18,7 @@ import '../test/setup'; import { expect } from 'chai'; import { stub, SinonStub, useFakeTimers } from 'sinon'; -import { FirebaseApp } from '@firebase/app-exp'; +import { FirebaseApp } from '@firebase/app'; import { getFakeApp, getFakePlatformLoggingProvider } from '../test/util'; import { getExchangeRecaptchaTokenRequest, exchangeToken } from './client'; import { FirebaseError } from '@firebase/util'; diff --git a/packages/app-check/src/client.ts b/packages/app-check/src/client.ts index 56d01da9012..c51f34402e0 100644 --- a/packages/app-check/src/client.ts +++ b/packages/app-check/src/client.ts @@ -20,7 +20,7 @@ import { EXCHANGE_DEBUG_TOKEN_METHOD, EXCHANGE_RECAPTCHA_TOKEN_METHOD } from './constants'; -import { FirebaseApp } from '@firebase/app-exp'; +import { FirebaseApp } from '@firebase/app'; import { ERROR_FACTORY, AppCheckError } from './errors'; import { Provider } from '@firebase/component'; import { AppCheckTokenInternal } from './types'; diff --git a/packages/app-check/src/factory.ts b/packages/app-check/src/factory.ts index 771fa70e965..8ec0cf528f1 100644 --- a/packages/app-check/src/factory.ts +++ b/packages/app-check/src/factory.ts @@ -16,7 +16,7 @@ */ import { AppCheck } from './public-types'; -import { FirebaseApp, _FirebaseService } from '@firebase/app-exp'; +import { FirebaseApp, _FirebaseService } from '@firebase/app'; import { FirebaseAppCheckInternal, ListenerType } from './types'; import { getToken, diff --git a/packages/app-check/src/index.ts b/packages/app-check/src/index.ts index debae46b29d..8272f8fbece 100644 --- a/packages/app-check/src/index.ts +++ b/packages/app-check/src/index.ts @@ -20,7 +20,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { registerVersion, _registerComponent } from '@firebase/app-exp'; +import { registerVersion, _registerComponent } from '@firebase/app'; import { Component, ComponentType, @@ -38,7 +38,7 @@ export { _AppCheckInternalComponentName }; export * from './api'; export * from './public-types'; -const APP_CHECK_NAME: _AppCheckComponentName = 'app-check-exp'; +const APP_CHECK_NAME: _AppCheckComponentName = 'app-check'; const APP_CHECK_NAME_INTERNAL: _AppCheckInternalComponentName = 'app-check-internal'; function registerAppCheck(): void { @@ -48,7 +48,7 @@ function registerAppCheck(): void { APP_CHECK_NAME, container => { // getImmediate for FirebaseApp will always succeed - const app = container.getProvider('app-exp').getImmediate(); + const app = container.getProvider('app').getImmediate(); const platformLoggerProvider = container.getProvider('platform-logger'); return factory(app, platformLoggerProvider); }, @@ -71,7 +71,7 @@ function registerAppCheck(): void { new Component( APP_CHECK_NAME_INTERNAL, container => { - const appCheck = container.getProvider('app-check-exp').getImmediate(); + const appCheck = container.getProvider('app-check').getImmediate(); return internalFactory(appCheck); }, ComponentType.PUBLIC diff --git a/packages/app-check/src/indexeddb.ts b/packages/app-check/src/indexeddb.ts index 144f1656c3d..7c27437e934 100644 --- a/packages/app-check/src/indexeddb.ts +++ b/packages/app-check/src/indexeddb.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { FirebaseApp } from '@firebase/app-exp'; +import { FirebaseApp } from '@firebase/app'; import { ERROR_FACTORY, AppCheckError } from './errors'; import { AppCheckTokenInternal } from './types'; const DB_NAME = 'firebase-app-check-database'; diff --git a/packages/app-check/src/internal-api.test.ts b/packages/app-check/src/internal-api.test.ts index de110851cab..81953c0e022 100644 --- a/packages/app-check/src/internal-api.test.ts +++ b/packages/app-check/src/internal-api.test.ts @@ -18,7 +18,7 @@ import '../test/setup'; import { expect } from 'chai'; import { SinonStub, spy, stub, useFakeTimers } from 'sinon'; -import { deleteApp, FirebaseApp } from '@firebase/app-exp'; +import { deleteApp, FirebaseApp } from '@firebase/app'; import { FAKE_SITE_KEY, getFullApp, diff --git a/packages/app-check/src/internal-api.ts b/packages/app-check/src/internal-api.ts index 2ee5c58053b..fee45d72b12 100644 --- a/packages/app-check/src/internal-api.ts +++ b/packages/app-check/src/internal-api.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { FirebaseApp } from '@firebase/app-exp'; +import { FirebaseApp } from '@firebase/app'; import { AppCheckTokenResult, AppCheckTokenInternal, diff --git a/packages/app-check/src/providers.ts b/packages/app-check/src/providers.ts index b04afc8b9af..6c694f5cd89 100644 --- a/packages/app-check/src/providers.ts +++ b/packages/app-check/src/providers.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { FirebaseApp, _getProvider } from '@firebase/app-exp'; +import { FirebaseApp, _getProvider } from '@firebase/app'; import { Provider } from '@firebase/component'; import { issuedAtTime } from '@firebase/util'; import { exchangeToken, getExchangeRecaptchaTokenRequest } from './client'; diff --git a/packages/app-check/src/public-types.ts b/packages/app-check/src/public-types.ts index cd735951ff5..ae955c9d8c5 100644 --- a/packages/app-check/src/public-types.ts +++ b/packages/app-check/src/public-types.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { FirebaseApp } from '@firebase/app-exp'; +import { FirebaseApp } from '@firebase/app'; import { CustomProvider, ReCaptchaV3Provider } from './providers'; export { Unsubscribe, PartialObserver } from '@firebase/util'; @@ -46,7 +46,7 @@ export interface AppCheckToken { /** * @internal */ -export type _AppCheckComponentName = 'app-check-exp'; +export type _AppCheckComponentName = 'app-check'; /** * Options for App Check initialization. diff --git a/packages/app-check/src/recaptcha.test.ts b/packages/app-check/src/recaptcha.test.ts index 90a8335bcdb..7edfadaf19f 100644 --- a/packages/app-check/src/recaptcha.test.ts +++ b/packages/app-check/src/recaptcha.test.ts @@ -18,7 +18,7 @@ import '../test/setup'; import { expect } from 'chai'; import { stub } from 'sinon'; -import { deleteApp, FirebaseApp } from '@firebase/app-exp'; +import { deleteApp, FirebaseApp } from '@firebase/app'; import { getFullApp, getFakeGreCAPTCHA, diff --git a/packages/app-check/src/recaptcha.ts b/packages/app-check/src/recaptcha.ts index 3fd1bcfed73..91ea94bfbd2 100644 --- a/packages/app-check/src/recaptcha.ts +++ b/packages/app-check/src/recaptcha.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { FirebaseApp } from '@firebase/app-exp'; +import { FirebaseApp } from '@firebase/app'; import { getState, setState } from './state'; import { Deferred } from '@firebase/util'; import { getRecaptcha, ensureActivated } from './util'; diff --git a/packages/app-check/src/state.ts b/packages/app-check/src/state.ts index 1d33b1889ed..36788d37cc2 100644 --- a/packages/app-check/src/state.ts +++ b/packages/app-check/src/state.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { FirebaseApp } from '@firebase/app-exp'; +import { FirebaseApp } from '@firebase/app'; import { AppCheckProvider, AppCheckTokenInternal, diff --git a/packages/app-check/src/storage.ts b/packages/app-check/src/storage.ts index ae2b39c5195..c83a32fbb43 100644 --- a/packages/app-check/src/storage.ts +++ b/packages/app-check/src/storage.ts @@ -16,7 +16,7 @@ */ import { uuidv4 } from './util'; -import { FirebaseApp } from '@firebase/app-exp'; +import { FirebaseApp } from '@firebase/app'; import { isIndexedDBAvailable } from '@firebase/util'; import { readDebugTokenFromIndexedDB, diff --git a/packages/app-check/src/types.ts b/packages/app-check/src/types.ts index 52cf2269e4d..77907bf2132 100644 --- a/packages/app-check/src/types.ts +++ b/packages/app-check/src/types.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { FirebaseApp } from '@firebase/app-exp'; +import { FirebaseApp } from '@firebase/app'; import { PartialObserver } from '@firebase/util'; import { AppCheckToken, AppCheckTokenListener } from './public-types'; diff --git a/packages/app-check/src/util.ts b/packages/app-check/src/util.ts index 26aa784ad56..9102d335eb2 100644 --- a/packages/app-check/src/util.ts +++ b/packages/app-check/src/util.ts @@ -18,7 +18,7 @@ import { GreCAPTCHA } from './recaptcha'; import { getState } from './state'; import { ERROR_FACTORY, AppCheckError } from './errors'; -import { FirebaseApp } from '@firebase/app-exp'; +import { FirebaseApp } from '@firebase/app'; export function getRecaptcha(): GreCAPTCHA | undefined { return self.grecaptcha; diff --git a/packages/app-check/test/util.ts b/packages/app-check/test/util.ts index 5018ba8f4d6..c69df323b9e 100644 --- a/packages/app-check/test/util.ts +++ b/packages/app-check/test/util.ts @@ -19,7 +19,7 @@ import { FirebaseApp, initializeApp, _registerComponent -} from '@firebase/app-exp'; +} from '@firebase/app'; import { GreCAPTCHA, RECAPTCHA_URL } from '../src/recaptcha'; import { Provider, @@ -27,7 +27,6 @@ import { Component, ComponentType } from '@firebase/component'; -import { PlatformLoggerService } from '@firebase/app-exp/dist/packages-exp/app-exp/src/types'; import { AppCheckService } from '../src/factory'; import { AppCheck, CustomProvider } from '../src'; @@ -65,14 +64,14 @@ export function getFullApp(): FirebaseApp { new Component( 'platform-logger', () => { - return {} as PlatformLoggerService; + return {} as any; }, ComponentType.PUBLIC ) ); _registerComponent( new Component( - 'app-check-exp', + 'app-check', () => { return {} as AppCheckService; }, From ab3e92b2d726058cccb989247056d6dcfc6475f4 Mon Sep 17 00:00:00 2001 From: Feiyang1 Date: Wed, 18 Aug 2021 16:36:06 -0700 Subject: [PATCH 06/38] migrate auth --- .../{auth-exp.api.md => auth.api.md} | 1652 ++++++++--------- packages/auth-compat/README.md | 2 +- packages/auth-compat/demo/README.md | 10 +- packages/auth-compat/demo/package.json | 8 +- packages/auth-compat/demo/rollup.config.js | 6 +- packages/auth-compat/index.node.ts | 2 +- packages/auth-compat/index.ts | 4 +- packages/auth-compat/package.json | 17 +- packages/auth-compat/rollup.config.js | 132 +- packages/auth-compat/rollup.config.release.js | 26 - packages/auth-compat/rollup.config.shared.js | 153 -- .../auth-compat/scripts/run_node_tests.ts | 4 +- packages/auth-compat/src/auth.test.ts | 8 +- packages/auth-compat/src/auth.ts | 4 +- packages/auth-compat/src/persistence.ts | 2 +- .../auth-compat/src/phone_auth_provider.ts | 2 +- packages/auth-compat/src/platform.ts | 2 +- .../auth-compat/src/popup_redirect.test.ts | 2 +- packages/auth-compat/src/popup_redirect.ts | 2 +- .../auth-compat/src/recaptcha_verifier.ts | 2 +- packages/auth-compat/src/user.ts | 2 +- packages/auth-compat/src/user_credential.ts | 2 +- packages/auth-compat/test/helpers/helpers.ts | 6 +- .../test/integration/flows/oob.test.ts | 2 +- .../test/integration/flows/phone.test.ts | 2 +- .../webdriver/static/rollup.config.js | 2 +- packages/auth-types/index.d.ts | 2 +- packages/auth/CHANGELOG.md | 109 ++ packages/auth/README.md | 2 +- packages/auth/cordova/demo/package.json | 6 +- packages/auth/cordova/demo/src/index.js | 4 +- packages/auth/cordova/package.json | 2 +- packages/auth/demo/README.md | 8 +- packages/auth/demo/package.json | 10 +- packages/auth/demo/src/index.js | 4 +- .../auth/demo/src/worker/service-worker.ts | 4 +- packages/auth/demo/src/worker/web-worker.ts | 4 +- packages/auth/index.cordova.ts | 4 +- packages/auth/index.node.ts | 4 +- packages/auth/index.rn.ts | 4 +- packages/auth/index.ts | 4 +- packages/auth/index.webworker.ts | 2 +- packages/auth/internal/index.ts | 2 +- packages/auth/internal/package.json | 2 +- packages/auth/package.json | 22 +- packages/auth/react-native/package.json | 2 +- packages/auth/rollup.config.js | 140 +- packages/auth/rollup.config.release.js | 20 - packages/auth/rollup.config.shared.js | 187 -- .../auth/src/api/authentication/token.test.ts | 2 +- packages/auth/src/api/index.test.ts | 2 +- packages/auth/src/core/auth/auth_impl.test.ts | 2 +- packages/auth/src/core/auth/auth_impl.ts | 2 +- .../auth/src/core/auth/initialize.test.ts | 2 +- packages/auth/src/core/auth/initialize.ts | 4 +- packages/auth/src/core/auth/register.ts | 6 +- packages/auth/src/core/util/handler.ts | 2 +- packages/auth/src/core/util/log.ts | 4 +- packages/auth/src/core/util/version.test.ts | 2 +- packages/auth/src/core/util/version.ts | 2 +- packages/auth/src/model/public_types.ts | 2 +- .../auth/src/platform_browser/auth.test.ts | 2 +- .../platform_browser/iframe/iframe.test.ts | 2 +- .../src/platform_browser/iframe/iframe.ts | 2 +- .../platform_browser/popup_redirect.test.ts | 2 +- .../auth/test/helpers/integration/helpers.ts | 2 +- .../auth/test/helpers/integration/settings.ts | 2 +- packages/auth/test/helpers/mock_auth.ts | 2 +- .../test/integration/flows/anonymous.test.ts | 2 +- .../integration/flows/custom.local.test.ts | 2 +- .../auth/test/integration/flows/email.test.ts | 2 +- .../test/integration/flows/idp.local.test.ts | 2 +- .../test/integration/flows/oob.local.test.ts | 2 +- .../auth/test/integration/flows/phone.test.ts | 2 +- .../integration/webdriver/anonymous.test.ts | 2 +- .../integration/webdriver/persistence.test.ts | 2 +- .../test/integration/webdriver/popup.test.ts | 2 +- .../integration/webdriver/redirect.test.ts | 2 +- .../integration/webdriver/static/anonymous.js | 2 +- .../integration/webdriver/static/email.js | 2 +- .../integration/webdriver/static/index.js | 4 +- .../webdriver/static/persistence.js | 2 +- .../integration/webdriver/static/popup.js | 2 +- .../integration/webdriver/static/redirect.js | 2 +- .../webdriver/static/rollup.config.js | 2 +- .../integration/webdriver/util/auth_driver.ts | 2 +- .../integration/webdriver/util/test_server.ts | 2 +- 87 files changed, 1336 insertions(+), 1354 deletions(-) rename common/api-review/{auth-exp.api.md => auth.api.md} (96%) delete mode 100644 packages/auth-compat/rollup.config.release.js delete mode 100644 packages/auth-compat/rollup.config.shared.js create mode 100644 packages/auth/CHANGELOG.md delete mode 100644 packages/auth/rollup.config.release.js delete mode 100644 packages/auth/rollup.config.shared.js diff --git a/common/api-review/auth-exp.api.md b/common/api-review/auth.api.md similarity index 96% rename from common/api-review/auth-exp.api.md rename to common/api-review/auth.api.md index dd101d24fb7..87ce191c1b2 100644 --- a/common/api-review/auth-exp.api.md +++ b/common/api-review/auth.api.md @@ -1,826 +1,826 @@ -## API Report File for "@firebase/auth-exp" - -> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). - -```ts - -import { CompleteFn } from '@firebase/util'; -import { ErrorFactory } from '@firebase/util'; -import { ErrorFn } from '@firebase/util'; -import { FirebaseApp } from '@firebase/app-exp'; -import { FirebaseError } from '@firebase/util'; -import { NextFn } from '@firebase/util'; -import { Observer } from '@firebase/util'; -import { Unsubscribe } from '@firebase/util'; - -// @public -export interface ActionCodeInfo { - data: { - email?: string | null; - multiFactorInfo?: MultiFactorInfo | null; - previousEmail?: string | null; - }; - operation: typeof ActionCodeOperation[keyof typeof ActionCodeOperation]; -} - -// @public -export const ActionCodeOperation: { - readonly EMAIL_SIGNIN: "EMAIL_SIGNIN"; - readonly PASSWORD_RESET: "PASSWORD_RESET"; - readonly RECOVER_EMAIL: "RECOVER_EMAIL"; - readonly REVERT_SECOND_FACTOR_ADDITION: "REVERT_SECOND_FACTOR_ADDITION"; - readonly VERIFY_AND_CHANGE_EMAIL: "VERIFY_AND_CHANGE_EMAIL"; - readonly VERIFY_EMAIL: "VERIFY_EMAIL"; -}; - -// @public -export interface ActionCodeSettings { - android?: { - installApp?: boolean; - minimumVersion?: string; - packageName: string; - }; - dynamicLinkDomain?: string; - handleCodeInApp?: boolean; - iOS?: { - bundleId: string; - }; - url: string; -} - -// @public -export class ActionCodeURL { - // @internal - constructor(actionLink: string); - readonly apiKey: string; - readonly code: string; - readonly continueUrl: string | null; - readonly languageCode: string | null; - readonly operation: string; - static parseLink(link: string): ActionCodeURL | null; - readonly tenantId: string | null; -} - -// @public -export interface AdditionalUserInfo { - readonly isNewUser: boolean; - readonly profile: Record | null; - readonly providerId: string | null; - readonly username?: string | null; -} - -// @public -export interface ApplicationVerifier { - readonly type: string; - verify(): Promise; -} - -// @public -export function applyActionCode(auth: Auth, oobCode: string): Promise; - -// @public -export interface Auth { - readonly config: Config; - readonly currentUser: User | null; - readonly emulatorConfig: EmulatorConfig | null; - languageCode: string | null; - readonly name: string; - onAuthStateChanged(nextOrObserver: NextOrObserver, error?: ErrorFn, completed?: CompleteFn): Unsubscribe; - onIdTokenChanged(nextOrObserver: NextOrObserver, error?: ErrorFn, completed?: CompleteFn): Unsubscribe; - setPersistence(persistence: Persistence): Promise; - readonly settings: AuthSettings; - signOut(): Promise; - tenantId: string | null; - updateCurrentUser(user: User | null): Promise; - useDeviceLanguage(): void; -} - -// @public -export class AuthCredential { - // @internal - protected constructor( - providerId: string, - signInMethod: string); - // Warning: (ae-forgotten-export) The symbol "AuthInternal" needs to be exported by the entry point index.doc.d.ts - // Warning: (ae-forgotten-export) The symbol "PhoneOrOauthTokenResponse" needs to be exported by the entry point index.doc.d.ts - // - // @internal (undocumented) - _getIdTokenResponse(_auth: AuthInternal): Promise; - // @internal (undocumented) - _getReauthenticationResolver(_auth: AuthInternal): Promise; - // Warning: (ae-forgotten-export) The symbol "IdTokenResponse" needs to be exported by the entry point index.doc.d.ts - // - // @internal (undocumented) - _linkToIdToken(_auth: AuthInternal, _idToken: string): Promise; - readonly providerId: string; - readonly signInMethod: string; - toJSON(): object; -} - -// @public -export interface AuthError extends FirebaseError { - readonly appName: string; - readonly email?: string; - readonly phoneNumber?: string; - readonly tenantid?: string; -} - -// @public -export const AuthErrorCodes: { - readonly ADMIN_ONLY_OPERATION: "auth/admin-restricted-operation"; - readonly ARGUMENT_ERROR: "auth/argument-error"; - readonly APP_NOT_AUTHORIZED: "auth/app-not-authorized"; - readonly APP_NOT_INSTALLED: "auth/app-not-installed"; - readonly CAPTCHA_CHECK_FAILED: "auth/captcha-check-failed"; - readonly CODE_EXPIRED: "auth/code-expired"; - readonly CORDOVA_NOT_READY: "auth/cordova-not-ready"; - readonly CORS_UNSUPPORTED: "auth/cors-unsupported"; - readonly CREDENTIAL_ALREADY_IN_USE: "auth/credential-already-in-use"; - readonly CREDENTIAL_MISMATCH: "auth/custom-token-mismatch"; - readonly CREDENTIAL_TOO_OLD_LOGIN_AGAIN: "auth/requires-recent-login"; - readonly DEPENDENT_SDK_INIT_BEFORE_AUTH: "auth/dependent-sdk-initialized-before-auth"; - readonly DYNAMIC_LINK_NOT_ACTIVATED: "auth/dynamic-link-not-activated"; - readonly EMAIL_CHANGE_NEEDS_VERIFICATION: "auth/email-change-needs-verification"; - readonly EMAIL_EXISTS: "auth/email-already-in-use"; - readonly EMULATOR_CONFIG_FAILED: "auth/emulator-config-failed"; - readonly EXPIRED_OOB_CODE: "auth/expired-action-code"; - readonly EXPIRED_POPUP_REQUEST: "auth/cancelled-popup-request"; - readonly INTERNAL_ERROR: "auth/internal-error"; - readonly INVALID_API_KEY: "auth/invalid-api-key"; - readonly INVALID_APP_CREDENTIAL: "auth/invalid-app-credential"; - readonly INVALID_APP_ID: "auth/invalid-app-id"; - readonly INVALID_AUTH: "auth/invalid-user-token"; - readonly INVALID_AUTH_EVENT: "auth/invalid-auth-event"; - readonly INVALID_CERT_HASH: "auth/invalid-cert-hash"; - readonly INVALID_CODE: "auth/invalid-verification-code"; - readonly INVALID_CONTINUE_URI: "auth/invalid-continue-uri"; - readonly INVALID_CORDOVA_CONFIGURATION: "auth/invalid-cordova-configuration"; - readonly INVALID_CUSTOM_TOKEN: "auth/invalid-custom-token"; - readonly INVALID_DYNAMIC_LINK_DOMAIN: "auth/invalid-dynamic-link-domain"; - readonly INVALID_EMAIL: "auth/invalid-email"; - readonly INVALID_EMULATOR_SCHEME: "auth/invalid-emulator-scheme"; - readonly INVALID_IDP_RESPONSE: "auth/invalid-credential"; - readonly INVALID_MESSAGE_PAYLOAD: "auth/invalid-message-payload"; - readonly INVALID_MFA_SESSION: "auth/invalid-multi-factor-session"; - readonly INVALID_OAUTH_CLIENT_ID: "auth/invalid-oauth-client-id"; - readonly INVALID_OAUTH_PROVIDER: "auth/invalid-oauth-provider"; - readonly INVALID_OOB_CODE: "auth/invalid-action-code"; - readonly INVALID_ORIGIN: "auth/unauthorized-domain"; - readonly INVALID_PASSWORD: "auth/wrong-password"; - readonly INVALID_PERSISTENCE: "auth/invalid-persistence-type"; - readonly INVALID_PHONE_NUMBER: "auth/invalid-phone-number"; - readonly INVALID_PROVIDER_ID: "auth/invalid-provider-id"; - readonly INVALID_RECIPIENT_EMAIL: "auth/invalid-recipient-email"; - readonly INVALID_SENDER: "auth/invalid-sender"; - readonly INVALID_SESSION_INFO: "auth/invalid-verification-id"; - readonly INVALID_TENANT_ID: "auth/invalid-tenant-id"; - readonly MFA_INFO_NOT_FOUND: "auth/multi-factor-info-not-found"; - readonly MFA_REQUIRED: "auth/multi-factor-auth-required"; - readonly MISSING_ANDROID_PACKAGE_NAME: "auth/missing-android-pkg-name"; - readonly MISSING_APP_CREDENTIAL: "auth/missing-app-credential"; - readonly MISSING_AUTH_DOMAIN: "auth/auth-domain-config-required"; - readonly MISSING_CODE: "auth/missing-verification-code"; - readonly MISSING_CONTINUE_URI: "auth/missing-continue-uri"; - readonly MISSING_IFRAME_START: "auth/missing-iframe-start"; - readonly MISSING_IOS_BUNDLE_ID: "auth/missing-ios-bundle-id"; - readonly MISSING_OR_INVALID_NONCE: "auth/missing-or-invalid-nonce"; - readonly MISSING_MFA_INFO: "auth/missing-multi-factor-info"; - readonly MISSING_MFA_SESSION: "auth/missing-multi-factor-session"; - readonly MISSING_PHONE_NUMBER: "auth/missing-phone-number"; - readonly MISSING_SESSION_INFO: "auth/missing-verification-id"; - readonly MODULE_DESTROYED: "auth/app-deleted"; - readonly NEED_CONFIRMATION: "auth/account-exists-with-different-credential"; - readonly NETWORK_REQUEST_FAILED: "auth/network-request-failed"; - readonly NULL_USER: "auth/null-user"; - readonly NO_AUTH_EVENT: "auth/no-auth-event"; - readonly NO_SUCH_PROVIDER: "auth/no-such-provider"; - readonly OPERATION_NOT_ALLOWED: "auth/operation-not-allowed"; - readonly OPERATION_NOT_SUPPORTED: "auth/operation-not-supported-in-this-environment"; - readonly POPUP_BLOCKED: "auth/popup-blocked"; - readonly POPUP_CLOSED_BY_USER: "auth/popup-closed-by-user"; - readonly PROVIDER_ALREADY_LINKED: "auth/provider-already-linked"; - readonly QUOTA_EXCEEDED: "auth/quota-exceeded"; - readonly REDIRECT_CANCELLED_BY_USER: "auth/redirect-cancelled-by-user"; - readonly REDIRECT_OPERATION_PENDING: "auth/redirect-operation-pending"; - readonly REJECTED_CREDENTIAL: "auth/rejected-credential"; - readonly SECOND_FACTOR_ALREADY_ENROLLED: "auth/second-factor-already-in-use"; - readonly SECOND_FACTOR_LIMIT_EXCEEDED: "auth/maximum-second-factor-count-exceeded"; - readonly TENANT_ID_MISMATCH: "auth/tenant-id-mismatch"; - readonly TIMEOUT: "auth/timeout"; - readonly TOKEN_EXPIRED: "auth/user-token-expired"; - readonly TOO_MANY_ATTEMPTS_TRY_LATER: "auth/too-many-requests"; - readonly UNAUTHORIZED_DOMAIN: "auth/unauthorized-continue-uri"; - readonly UNSUPPORTED_FIRST_FACTOR: "auth/unsupported-first-factor"; - readonly UNSUPPORTED_PERSISTENCE: "auth/unsupported-persistence-type"; - readonly UNSUPPORTED_TENANT_OPERATION: "auth/unsupported-tenant-operation"; - readonly UNVERIFIED_EMAIL: "auth/unverified-email"; - readonly USER_CANCELLED: "auth/user-cancelled"; - readonly USER_DELETED: "auth/user-not-found"; - readonly USER_DISABLED: "auth/user-disabled"; - readonly USER_MISMATCH: "auth/user-mismatch"; - readonly USER_SIGNED_OUT: "auth/user-signed-out"; - readonly WEAK_PASSWORD: "auth/weak-password"; - readonly WEB_STORAGE_UNSUPPORTED: "auth/web-storage-unsupported"; - readonly ALREADY_INITIALIZED: "auth/already-initialized"; -}; - -// @public -export interface AuthErrorMap { -} - -// @public -export interface AuthProvider { - readonly providerId: string; -} - -// @public -export interface AuthSettings { - appVerificationDisabledForTesting: boolean; -} - -// @public -export const browserLocalPersistence: Persistence; - -// @public -export const browserPopupRedirectResolver: PopupRedirectResolver; - -// @public -export const browserSessionPersistence: Persistence; - -// @public -export function checkActionCode(auth: Auth, oobCode: string): Promise; - -export { CompleteFn } - -// @public -export interface Config { - apiHost: string; - apiKey: string; - apiScheme: string; - authDomain?: string; - sdkClientVersion: string; - tokenApiHost: string; -} - -// @public -export interface ConfirmationResult { - confirm(verificationCode: string): Promise; - readonly verificationId: string; -} - -// @public -export function confirmPasswordReset(auth: Auth, oobCode: string, newPassword: string): Promise; - -// @public -export function connectAuthEmulator(auth: Auth, url: string, options?: { - disableWarnings: boolean; -}): void; - -// @public -export const cordovaPopupRedirectResolver: PopupRedirectResolver; - -// @public -export function createUserWithEmailAndPassword(auth: Auth, email: string, password: string): Promise; - -// @public -export type CustomParameters = Record; - -// @public -export const debugErrorMap: AuthErrorMap; - -// @public -export function deleteUser(user: User): Promise; - -// @public -export interface Dependencies { - errorMap?: AuthErrorMap; - persistence?: Persistence | Persistence[]; - popupRedirectResolver?: PopupRedirectResolver; -} - -// @public -export class EmailAuthCredential extends AuthCredential { - // @internal (undocumented) - readonly _email: string; - // @internal (undocumented) - static _fromEmailAndCode(email: string, oobCode: string, tenantId?: string | null): EmailAuthCredential; - // @internal (undocumented) - static _fromEmailAndPassword(email: string, password: string): EmailAuthCredential; - static fromJSON(json: object | string): EmailAuthCredential | null; - // @internal (undocumented) - _getIdTokenResponse(auth: AuthInternal): Promise; - // @internal (undocumented) - _getReauthenticationResolver(auth: AuthInternal): Promise; - // @internal (undocumented) - _linkToIdToken(auth: AuthInternal, idToken: string): Promise; - // @internal (undocumented) - readonly _password: string; - // @internal (undocumented) - readonly _tenantId: string | null; - toJSON(): object; -} - -// @public -export class EmailAuthProvider implements AuthProvider { - static credential(email: string, password: string): EmailAuthCredential; - static credentialWithLink(email: string, emailLink: string): EmailAuthCredential; - static readonly EMAIL_LINK_SIGN_IN_METHOD: 'emailLink'; - static readonly EMAIL_PASSWORD_SIGN_IN_METHOD: 'password'; - static readonly PROVIDER_ID: 'password'; - readonly providerId: "password"; -} - -// @public -export interface EmulatorConfig { - readonly host: string; - readonly options: { - readonly disableWarnings: boolean; - }; - readonly port: number | null; - readonly protocol: string; -} - -export { ErrorFn } - -// Warning: (ae-forgotten-export) The symbol "BaseOAuthProvider" needs to be exported by the entry point index.doc.d.ts -// -// @public -export class FacebookAuthProvider extends BaseOAuthProvider { - constructor(); - static credential(accessToken: string): OAuthCredential; - static credentialFromError(error: FirebaseError): OAuthCredential | null; - static credentialFromResult(userCredential: UserCredential): OAuthCredential | null; - static readonly FACEBOOK_SIGN_IN_METHOD: 'facebook.com'; - static readonly PROVIDER_ID: 'facebook.com'; -} - -// @public -export const FactorId: { - readonly PHONE: "phone"; -}; - -// @public -export function fetchSignInMethodsForEmail(auth: Auth, email: string): Promise; - -// @public -export function getAdditionalUserInfo(userCredential: UserCredential): AdditionalUserInfo | null; - -// @public -export function getAuth(app?: FirebaseApp): Auth; - -// @public -export function getIdToken(user: User, forceRefresh?: boolean): Promise; - -// @public -export function getIdTokenResult(user: User, forceRefresh?: boolean): Promise; - -// @public -export function getMultiFactorResolver(auth: Auth, error: MultiFactorError): MultiFactorResolver; - -// @public -export function getRedirectResult(auth: Auth, resolver?: PopupRedirectResolver): Promise; - -// @public -export class GithubAuthProvider extends BaseOAuthProvider { - constructor(); - static credential(accessToken: string): OAuthCredential; - static credentialFromError(error: FirebaseError): OAuthCredential | null; - static credentialFromResult(userCredential: UserCredential): OAuthCredential | null; - static readonly GITHUB_SIGN_IN_METHOD: 'github.com'; - static readonly PROVIDER_ID: 'github.com'; -} - -// @public -export class GoogleAuthProvider extends BaseOAuthProvider { - constructor(); - static credential(idToken?: string | null, accessToken?: string | null): OAuthCredential; - static credentialFromError(error: FirebaseError): OAuthCredential | null; - static credentialFromResult(userCredential: UserCredential): OAuthCredential | null; - static readonly GOOGLE_SIGN_IN_METHOD: 'google.com'; - static readonly PROVIDER_ID: 'google.com'; -} - -// @public -export interface IdTokenResult { - authTime: string; - claims: ParsedToken; - expirationTime: string; - issuedAtTime: string; - signInProvider: string | null; - signInSecondFactor: string | null; - token: string; -} - -// @public -export const indexedDBLocalPersistence: Persistence; - -// @public -export function initializeAuth(app: FirebaseApp, deps?: Dependencies): Auth; - -// @public -export const inMemoryPersistence: Persistence; - -// @public -export function isSignInWithEmailLink(auth: Auth, emailLink: string): boolean; - -// @public -export function linkWithCredential(user: User, credential: AuthCredential): Promise; - -// @public -export function linkWithPhoneNumber(user: User, phoneNumber: string, appVerifier: ApplicationVerifier): Promise; - -// @public -export function linkWithPopup(user: User, provider: AuthProvider, resolver?: PopupRedirectResolver): Promise; - -// @public -export function linkWithRedirect(user: User, provider: AuthProvider, resolver?: PopupRedirectResolver): Promise; - -// @public -export function multiFactor(user: User): MultiFactorUser; - -// @public -export interface MultiFactorAssertion { - readonly factorId: typeof FactorId[keyof typeof FactorId]; -} - -// @public -export interface MultiFactorError extends AuthError { - readonly operationType: typeof OperationType[keyof typeof OperationType]; -} - -// @public -export interface MultiFactorInfo { - readonly displayName?: string | null; - readonly enrollmentTime: string; - readonly factorId: typeof FactorId[keyof typeof FactorId]; - readonly uid: string; -} - -// @public -export interface MultiFactorResolver { - readonly hints: MultiFactorInfo[]; - resolveSignIn(assertion: MultiFactorAssertion): Promise; - readonly session: MultiFactorSession; -} - -// @public -export interface MultiFactorSession { -} - -// @public -export interface MultiFactorUser { - enroll(assertion: MultiFactorAssertion, displayName?: string | null): Promise; - readonly enrolledFactors: MultiFactorInfo[]; - getSession(): Promise; - unenroll(option: MultiFactorInfo | string): Promise; -} - -export { NextFn } - -// @public -export type NextOrObserver = NextFn | Observer; - -// @public -export class OAuthCredential extends AuthCredential { - accessToken?: string; - static fromJSON(json: string | object): OAuthCredential | null; - // Warning: (ae-forgotten-export) The symbol "OAuthCredentialParams" needs to be exported by the entry point index.doc.d.ts - // - // @internal (undocumented) - static _fromParams(params: OAuthCredentialParams): OAuthCredential; - // @internal (undocumented) - _getIdTokenResponse(auth: AuthInternal): Promise; - // @internal (undocumented) - _getReauthenticationResolver(auth: AuthInternal): Promise; - idToken?: string; - // @internal (undocumented) - _linkToIdToken(auth: AuthInternal, idToken: string): Promise; - // @internal (undocumented) - nonce?: string; - secret?: string; - toJSON(): object; -} - -// @public -export interface OAuthCredentialOptions { - accessToken?: string; - idToken?: string; - rawNonce?: string; -} - -// @public -export class OAuthProvider extends BaseOAuthProvider { - credential(params: OAuthCredentialOptions): OAuthCredential; - static credentialFromError(error: FirebaseError): OAuthCredential | null; - static credentialFromJSON(json: object | string): OAuthCredential; - static credentialFromResult(userCredential: UserCredential): OAuthCredential | null; - } - -// @public -export function onAuthStateChanged(auth: Auth, nextOrObserver: NextOrObserver, error?: ErrorFn, completed?: CompleteFn): Unsubscribe; - -// @public -export function onIdTokenChanged(auth: Auth, nextOrObserver: NextOrObserver, error?: ErrorFn, completed?: CompleteFn): Unsubscribe; - -// @public -export const OperationType: { - readonly LINK: "link"; - readonly REAUTHENTICATE: "reauthenticate"; - readonly SIGN_IN: "signIn"; -}; - -// @public -export function parseActionCodeURL(link: string): ActionCodeURL | null; - -// @public -export interface ParsedToken { - [key: string]: string | object | undefined; - 'auth_time'?: string; - 'exp'?: string; - 'firebase'?: { - 'sign_in_provider'?: string; - 'sign_in_second_factor'?: string; - }; - 'iat'?: string; - 'sub'?: string; -} - -// @public -export interface Persistence { - readonly type: 'SESSION' | 'LOCAL' | 'NONE'; -} - -// @public -export class PhoneAuthCredential extends AuthCredential { - static fromJSON(json: object | string): PhoneAuthCredential | null; - // @internal (undocumented) - static _fromTokenResponse(phoneNumber: string, temporaryProof: string): PhoneAuthCredential; - // @internal (undocumented) - static _fromVerification(verificationId: string, verificationCode: string): PhoneAuthCredential; - // @internal (undocumented) - _getIdTokenResponse(auth: AuthInternal): Promise; - // @internal (undocumented) - _getReauthenticationResolver(auth: AuthInternal): Promise; - // @internal (undocumented) - _linkToIdToken(auth: AuthInternal, idToken: string): Promise; - // Warning: (ae-forgotten-export) The symbol "SignInWithPhoneNumberRequest" needs to be exported by the entry point index.doc.d.ts - // - // @internal (undocumented) - _makeVerificationRequest(): SignInWithPhoneNumberRequest; - toJSON(): object; -} - -// @public -export class PhoneAuthProvider { - constructor(auth: Auth); - static credential(verificationId: string, verificationCode: string): PhoneAuthCredential; - static credentialFromError(error: FirebaseError): AuthCredential | null; - static credentialFromResult(userCredential: UserCredential): AuthCredential | null; - static readonly PHONE_SIGN_IN_METHOD: 'phone'; - static readonly PROVIDER_ID: 'phone'; - readonly providerId: "phone"; - verifyPhoneNumber(phoneOptions: PhoneInfoOptions | string, applicationVerifier: ApplicationVerifier): Promise; -} - -// @public -export type PhoneInfoOptions = PhoneSingleFactorInfoOptions | PhoneMultiFactorEnrollInfoOptions | PhoneMultiFactorSignInInfoOptions; - -// @public -export interface PhoneMultiFactorAssertion extends MultiFactorAssertion { -} - -// @public -export interface PhoneMultiFactorEnrollInfoOptions { - phoneNumber: string; - session: MultiFactorSession; -} - -// @public -export class PhoneMultiFactorGenerator { - static assertion(credential: PhoneAuthCredential): PhoneMultiFactorAssertion; -} - -// @public -export interface PhoneMultiFactorSignInInfoOptions { - multiFactorHint?: MultiFactorInfo; - multiFactorUid?: string; - session: MultiFactorSession; -} - -// @public -export interface PhoneSingleFactorInfoOptions { - phoneNumber: string; -} - -// @public -export interface PopupRedirectResolver { -} - -// @public -export const prodErrorMap: AuthErrorMap; - -// @public -export const ProviderId: { - readonly FACEBOOK: "facebook.com"; - readonly GITHUB: "github.com"; - readonly GOOGLE: "google.com"; - readonly PASSWORD: "password"; - readonly PHONE: "phone"; - readonly TWITTER: "twitter.com"; -}; - -// @public -export interface ReactNativeAsyncStorage { - getItem(key: string): Promise; - removeItem(key: string): Promise; - setItem(key: string, value: string): Promise; -} - -// @public -export const reactNativeLocalPersistence: Persistence; - -// @public -export function reauthenticateWithCredential(user: User, credential: AuthCredential): Promise; - -// @public -export function reauthenticateWithPhoneNumber(user: User, phoneNumber: string, appVerifier: ApplicationVerifier): Promise; - -// @public -export function reauthenticateWithPopup(user: User, provider: AuthProvider, resolver?: PopupRedirectResolver): Promise; - -// @public -export function reauthenticateWithRedirect(user: User, provider: AuthProvider, resolver?: PopupRedirectResolver): Promise; - -// @public -export interface RecaptchaParameters { - // (undocumented) - [key: string]: any; -} - -// Warning: (ae-forgotten-export) The symbol "ApplicationVerifierInternal" needs to be exported by the entry point index.doc.d.ts -// -// @public -export class RecaptchaVerifier implements ApplicationVerifierInternal { - constructor(containerOrId: HTMLElement | string, parameters: RecaptchaParameters, authExtern: Auth); - clear(): void; - // Warning: (ae-forgotten-export) The symbol "ReCaptchaLoader" needs to be exported by the entry point index.doc.d.ts - // - // @internal (undocumented) - readonly _recaptchaLoader: ReCaptchaLoader; - render(): Promise; - // @internal (undocumented) - _reset(): void; - readonly type = "recaptcha"; - verify(): Promise; - } - -// @public -export function reload(user: User): Promise; - -// Warning: (ae-forgotten-export) The symbol "FederatedAuthProvider" needs to be exported by the entry point index.doc.d.ts -// -// @public -export class SAMLAuthProvider extends FederatedAuthProvider { - constructor(providerId: string); - static credentialFromError(error: FirebaseError): AuthCredential | null; - static credentialFromJSON(json: string | object): AuthCredential; - static credentialFromResult(userCredential: UserCredential): AuthCredential | null; - } - -// @public -export function sendEmailVerification(user: User, actionCodeSettings?: ActionCodeSettings | null): Promise; - -// @public -export function sendPasswordResetEmail(auth: Auth, email: string, actionCodeSettings?: ActionCodeSettings): Promise; - -// @public -export function sendSignInLinkToEmail(auth: Auth, email: string, actionCodeSettings: ActionCodeSettings): Promise; - -// @public -export function setPersistence(auth: Auth, persistence: Persistence): Promise; - -// @public -export function signInAnonymously(auth: Auth): Promise; - -// @public -export const SignInMethod: { - readonly EMAIL_LINK: "emailLink"; - readonly EMAIL_PASSWORD: "password"; - readonly FACEBOOK: "facebook.com"; - readonly GITHUB: "github.com"; - readonly GOOGLE: "google.com"; - readonly PHONE: "phone"; - readonly TWITTER: "twitter.com"; -}; - -// @public -export function signInWithCredential(auth: Auth, credential: AuthCredential): Promise; - -// @public -export function signInWithCustomToken(auth: Auth, customToken: string): Promise; - -// @public -export function signInWithEmailAndPassword(auth: Auth, email: string, password: string): Promise; - -// @public -export function signInWithEmailLink(auth: Auth, email: string, emailLink?: string): Promise; - -// @public -export function signInWithPhoneNumber(auth: Auth, phoneNumber: string, appVerifier: ApplicationVerifier): Promise; - -// @public -export function signInWithPopup(auth: Auth, provider: AuthProvider, resolver?: PopupRedirectResolver): Promise; - -// @public -export function signInWithRedirect(auth: Auth, provider: AuthProvider, resolver?: PopupRedirectResolver): Promise; - -// @public -export function signOut(auth: Auth): Promise; - -// @public -export class TwitterAuthProvider extends BaseOAuthProvider { - constructor(); - static credential(token: string, secret: string): OAuthCredential; - static credentialFromError(error: FirebaseError): OAuthCredential | null; - static credentialFromResult(userCredential: UserCredential): OAuthCredential | null; - static readonly PROVIDER_ID: 'twitter.com'; - static readonly TWITTER_SIGN_IN_METHOD: 'twitter.com'; -} - -// @public -export function unlink(user: User, providerId: string): Promise; - -export { Unsubscribe } - -// @public -export function updateCurrentUser(auth: Auth, user: User | null): Promise; - -// @public -export function updateEmail(user: User, newEmail: string): Promise; - -// @public -export function updatePassword(user: User, newPassword: string): Promise; - -// @public -export function updatePhoneNumber(user: User, credential: PhoneAuthCredential): Promise; - -// @public -export function updateProfile(user: User, { displayName, photoURL: photoUrl }: { - displayName?: string | null; - photoURL?: string | null; -}): Promise; - -// @public -export function useDeviceLanguage(auth: Auth): void; - -// @public -export interface User extends UserInfo { - delete(): Promise; - readonly emailVerified: boolean; - getIdToken(forceRefresh?: boolean): Promise; - getIdTokenResult(forceRefresh?: boolean): Promise; - readonly isAnonymous: boolean; - readonly metadata: UserMetadata; - readonly providerData: UserInfo[]; - readonly refreshToken: string; - reload(): Promise; - readonly tenantId: string | null; - toJSON(): object; -} - -// @public -export interface UserCredential { - operationType: typeof OperationType[keyof typeof OperationType]; - providerId: string | null; - user: User; -} - -// @public -export interface UserInfo { - readonly displayName: string | null; - readonly email: string | null; - readonly phoneNumber: string | null; - readonly photoURL: string | null; - readonly providerId: string; - readonly uid: string; -} - -// @public -export interface UserMetadata { - readonly creationTime?: string; - readonly lastSignInTime?: string; -} - -// @public -export type UserProfile = Record; - -// @public -export function verifyBeforeUpdateEmail(user: User, newEmail: string, actionCodeSettings?: ActionCodeSettings | null): Promise; - -// @public -export function verifyPasswordResetCode(auth: Auth, code: string): Promise; - - -// (No @packageDocumentation comment for this package) - -``` +## API Report File for "@firebase/auth" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts + +import { CompleteFn } from '@firebase/util'; +import { ErrorFactory } from '@firebase/util'; +import { ErrorFn } from '@firebase/util'; +import { FirebaseApp } from '@firebase/app'; +import { FirebaseError } from '@firebase/util'; +import { NextFn } from '@firebase/util'; +import { Observer } from '@firebase/util'; +import { Unsubscribe } from '@firebase/util'; + +// @public +export interface ActionCodeInfo { + data: { + email?: string | null; + multiFactorInfo?: MultiFactorInfo | null; + previousEmail?: string | null; + }; + operation: typeof ActionCodeOperation[keyof typeof ActionCodeOperation]; +} + +// @public +export const ActionCodeOperation: { + readonly EMAIL_SIGNIN: "EMAIL_SIGNIN"; + readonly PASSWORD_RESET: "PASSWORD_RESET"; + readonly RECOVER_EMAIL: "RECOVER_EMAIL"; + readonly REVERT_SECOND_FACTOR_ADDITION: "REVERT_SECOND_FACTOR_ADDITION"; + readonly VERIFY_AND_CHANGE_EMAIL: "VERIFY_AND_CHANGE_EMAIL"; + readonly VERIFY_EMAIL: "VERIFY_EMAIL"; +}; + +// @public +export interface ActionCodeSettings { + android?: { + installApp?: boolean; + minimumVersion?: string; + packageName: string; + }; + dynamicLinkDomain?: string; + handleCodeInApp?: boolean; + iOS?: { + bundleId: string; + }; + url: string; +} + +// @public +export class ActionCodeURL { + // @internal + constructor(actionLink: string); + readonly apiKey: string; + readonly code: string; + readonly continueUrl: string | null; + readonly languageCode: string | null; + readonly operation: string; + static parseLink(link: string): ActionCodeURL | null; + readonly tenantId: string | null; +} + +// @public +export interface AdditionalUserInfo { + readonly isNewUser: boolean; + readonly profile: Record | null; + readonly providerId: string | null; + readonly username?: string | null; +} + +// @public +export interface ApplicationVerifier { + readonly type: string; + verify(): Promise; +} + +// @public +export function applyActionCode(auth: Auth, oobCode: string): Promise; + +// @public +export interface Auth { + readonly config: Config; + readonly currentUser: User | null; + readonly emulatorConfig: EmulatorConfig | null; + languageCode: string | null; + readonly name: string; + onAuthStateChanged(nextOrObserver: NextOrObserver, error?: ErrorFn, completed?: CompleteFn): Unsubscribe; + onIdTokenChanged(nextOrObserver: NextOrObserver, error?: ErrorFn, completed?: CompleteFn): Unsubscribe; + setPersistence(persistence: Persistence): Promise; + readonly settings: AuthSettings; + signOut(): Promise; + tenantId: string | null; + updateCurrentUser(user: User | null): Promise; + useDeviceLanguage(): void; +} + +// @public +export class AuthCredential { + // @internal + protected constructor( + providerId: string, + signInMethod: string); + // Warning: (ae-forgotten-export) The symbol "AuthInternal" needs to be exported by the entry point index.doc.d.ts + // Warning: (ae-forgotten-export) The symbol "PhoneOrOauthTokenResponse" needs to be exported by the entry point index.doc.d.ts + // + // @internal (undocumented) + _getIdTokenResponse(_auth: AuthInternal): Promise; + // @internal (undocumented) + _getReauthenticationResolver(_auth: AuthInternal): Promise; + // Warning: (ae-forgotten-export) The symbol "IdTokenResponse" needs to be exported by the entry point index.doc.d.ts + // + // @internal (undocumented) + _linkToIdToken(_auth: AuthInternal, _idToken: string): Promise; + readonly providerId: string; + readonly signInMethod: string; + toJSON(): object; +} + +// @public +export interface AuthError extends FirebaseError { + readonly appName: string; + readonly email?: string; + readonly phoneNumber?: string; + readonly tenantid?: string; +} + +// @public +export const AuthErrorCodes: { + readonly ADMIN_ONLY_OPERATION: "auth/admin-restricted-operation"; + readonly ARGUMENT_ERROR: "auth/argument-error"; + readonly APP_NOT_AUTHORIZED: "auth/app-not-authorized"; + readonly APP_NOT_INSTALLED: "auth/app-not-installed"; + readonly CAPTCHA_CHECK_FAILED: "auth/captcha-check-failed"; + readonly CODE_EXPIRED: "auth/code-expired"; + readonly CORDOVA_NOT_READY: "auth/cordova-not-ready"; + readonly CORS_UNSUPPORTED: "auth/cors-unsupported"; + readonly CREDENTIAL_ALREADY_IN_USE: "auth/credential-already-in-use"; + readonly CREDENTIAL_MISMATCH: "auth/custom-token-mismatch"; + readonly CREDENTIAL_TOO_OLD_LOGIN_AGAIN: "auth/requires-recent-login"; + readonly DEPENDENT_SDK_INIT_BEFORE_AUTH: "auth/dependent-sdk-initialized-before-auth"; + readonly DYNAMIC_LINK_NOT_ACTIVATED: "auth/dynamic-link-not-activated"; + readonly EMAIL_CHANGE_NEEDS_VERIFICATION: "auth/email-change-needs-verification"; + readonly EMAIL_EXISTS: "auth/email-already-in-use"; + readonly EMULATOR_CONFIG_FAILED: "auth/emulator-config-failed"; + readonly EXPIRED_OOB_CODE: "auth/expired-action-code"; + readonly EXPIRED_POPUP_REQUEST: "auth/cancelled-popup-request"; + readonly INTERNAL_ERROR: "auth/internal-error"; + readonly INVALID_API_KEY: "auth/invalid-api-key"; + readonly INVALID_APP_CREDENTIAL: "auth/invalid-app-credential"; + readonly INVALID_APP_ID: "auth/invalid-app-id"; + readonly INVALID_AUTH: "auth/invalid-user-token"; + readonly INVALID_AUTH_EVENT: "auth/invalid-auth-event"; + readonly INVALID_CERT_HASH: "auth/invalid-cert-hash"; + readonly INVALID_CODE: "auth/invalid-verification-code"; + readonly INVALID_CONTINUE_URI: "auth/invalid-continue-uri"; + readonly INVALID_CORDOVA_CONFIGURATION: "auth/invalid-cordova-configuration"; + readonly INVALID_CUSTOM_TOKEN: "auth/invalid-custom-token"; + readonly INVALID_DYNAMIC_LINK_DOMAIN: "auth/invalid-dynamic-link-domain"; + readonly INVALID_EMAIL: "auth/invalid-email"; + readonly INVALID_EMULATOR_SCHEME: "auth/invalid-emulator-scheme"; + readonly INVALID_IDP_RESPONSE: "auth/invalid-credential"; + readonly INVALID_MESSAGE_PAYLOAD: "auth/invalid-message-payload"; + readonly INVALID_MFA_SESSION: "auth/invalid-multi-factor-session"; + readonly INVALID_OAUTH_CLIENT_ID: "auth/invalid-oauth-client-id"; + readonly INVALID_OAUTH_PROVIDER: "auth/invalid-oauth-provider"; + readonly INVALID_OOB_CODE: "auth/invalid-action-code"; + readonly INVALID_ORIGIN: "auth/unauthorized-domain"; + readonly INVALID_PASSWORD: "auth/wrong-password"; + readonly INVALID_PERSISTENCE: "auth/invalid-persistence-type"; + readonly INVALID_PHONE_NUMBER: "auth/invalid-phone-number"; + readonly INVALID_PROVIDER_ID: "auth/invalid-provider-id"; + readonly INVALID_RECIPIENT_EMAIL: "auth/invalid-recipient-email"; + readonly INVALID_SENDER: "auth/invalid-sender"; + readonly INVALID_SESSION_INFO: "auth/invalid-verification-id"; + readonly INVALID_TENANT_ID: "auth/invalid-tenant-id"; + readonly MFA_INFO_NOT_FOUND: "auth/multi-factor-info-not-found"; + readonly MFA_REQUIRED: "auth/multi-factor-auth-required"; + readonly MISSING_ANDROID_PACKAGE_NAME: "auth/missing-android-pkg-name"; + readonly MISSING_APP_CREDENTIAL: "auth/missing-app-credential"; + readonly MISSING_AUTH_DOMAIN: "auth/auth-domain-config-required"; + readonly MISSING_CODE: "auth/missing-verification-code"; + readonly MISSING_CONTINUE_URI: "auth/missing-continue-uri"; + readonly MISSING_IFRAME_START: "auth/missing-iframe-start"; + readonly MISSING_IOS_BUNDLE_ID: "auth/missing-ios-bundle-id"; + readonly MISSING_OR_INVALID_NONCE: "auth/missing-or-invalid-nonce"; + readonly MISSING_MFA_INFO: "auth/missing-multi-factor-info"; + readonly MISSING_MFA_SESSION: "auth/missing-multi-factor-session"; + readonly MISSING_PHONE_NUMBER: "auth/missing-phone-number"; + readonly MISSING_SESSION_INFO: "auth/missing-verification-id"; + readonly MODULE_DESTROYED: "auth/app-deleted"; + readonly NEED_CONFIRMATION: "auth/account-exists-with-different-credential"; + readonly NETWORK_REQUEST_FAILED: "auth/network-request-failed"; + readonly NULL_USER: "auth/null-user"; + readonly NO_AUTH_EVENT: "auth/no-auth-event"; + readonly NO_SUCH_PROVIDER: "auth/no-such-provider"; + readonly OPERATION_NOT_ALLOWED: "auth/operation-not-allowed"; + readonly OPERATION_NOT_SUPPORTED: "auth/operation-not-supported-in-this-environment"; + readonly POPUP_BLOCKED: "auth/popup-blocked"; + readonly POPUP_CLOSED_BY_USER: "auth/popup-closed-by-user"; + readonly PROVIDER_ALREADY_LINKED: "auth/provider-already-linked"; + readonly QUOTA_EXCEEDED: "auth/quota-exceeded"; + readonly REDIRECT_CANCELLED_BY_USER: "auth/redirect-cancelled-by-user"; + readonly REDIRECT_OPERATION_PENDING: "auth/redirect-operation-pending"; + readonly REJECTED_CREDENTIAL: "auth/rejected-credential"; + readonly SECOND_FACTOR_ALREADY_ENROLLED: "auth/second-factor-already-in-use"; + readonly SECOND_FACTOR_LIMIT_EXCEEDED: "auth/maximum-second-factor-count-exceeded"; + readonly TENANT_ID_MISMATCH: "auth/tenant-id-mismatch"; + readonly TIMEOUT: "auth/timeout"; + readonly TOKEN_EXPIRED: "auth/user-token-expired"; + readonly TOO_MANY_ATTEMPTS_TRY_LATER: "auth/too-many-requests"; + readonly UNAUTHORIZED_DOMAIN: "auth/unauthorized-continue-uri"; + readonly UNSUPPORTED_FIRST_FACTOR: "auth/unsupported-first-factor"; + readonly UNSUPPORTED_PERSISTENCE: "auth/unsupported-persistence-type"; + readonly UNSUPPORTED_TENANT_OPERATION: "auth/unsupported-tenant-operation"; + readonly UNVERIFIED_EMAIL: "auth/unverified-email"; + readonly USER_CANCELLED: "auth/user-cancelled"; + readonly USER_DELETED: "auth/user-not-found"; + readonly USER_DISABLED: "auth/user-disabled"; + readonly USER_MISMATCH: "auth/user-mismatch"; + readonly USER_SIGNED_OUT: "auth/user-signed-out"; + readonly WEAK_PASSWORD: "auth/weak-password"; + readonly WEB_STORAGE_UNSUPPORTED: "auth/web-storage-unsupported"; + readonly ALREADY_INITIALIZED: "auth/already-initialized"; +}; + +// @public +export interface AuthErrorMap { +} + +// @public +export interface AuthProvider { + readonly providerId: string; +} + +// @public +export interface AuthSettings { + appVerificationDisabledForTesting: boolean; +} + +// @public +export const browserLocalPersistence: Persistence; + +// @public +export const browserPopupRedirectResolver: PopupRedirectResolver; + +// @public +export const browserSessionPersistence: Persistence; + +// @public +export function checkActionCode(auth: Auth, oobCode: string): Promise; + +export { CompleteFn } + +// @public +export interface Config { + apiHost: string; + apiKey: string; + apiScheme: string; + authDomain?: string; + sdkClientVersion: string; + tokenApiHost: string; +} + +// @public +export interface ConfirmationResult { + confirm(verificationCode: string): Promise; + readonly verificationId: string; +} + +// @public +export function confirmPasswordReset(auth: Auth, oobCode: string, newPassword: string): Promise; + +// @public +export function connectAuthEmulator(auth: Auth, url: string, options?: { + disableWarnings: boolean; +}): void; + +// @public +export const cordovaPopupRedirectResolver: PopupRedirectResolver; + +// @public +export function createUserWithEmailAndPassword(auth: Auth, email: string, password: string): Promise; + +// @public +export type CustomParameters = Record; + +// @public +export const debugErrorMap: AuthErrorMap; + +// @public +export function deleteUser(user: User): Promise; + +// @public +export interface Dependencies { + errorMap?: AuthErrorMap; + persistence?: Persistence | Persistence[]; + popupRedirectResolver?: PopupRedirectResolver; +} + +// @public +export class EmailAuthCredential extends AuthCredential { + // @internal (undocumented) + readonly _email: string; + // @internal (undocumented) + static _fromEmailAndCode(email: string, oobCode: string, tenantId?: string | null): EmailAuthCredential; + // @internal (undocumented) + static _fromEmailAndPassword(email: string, password: string): EmailAuthCredential; + static fromJSON(json: object | string): EmailAuthCredential | null; + // @internal (undocumented) + _getIdTokenResponse(auth: AuthInternal): Promise; + // @internal (undocumented) + _getReauthenticationResolver(auth: AuthInternal): Promise; + // @internal (undocumented) + _linkToIdToken(auth: AuthInternal, idToken: string): Promise; + // @internal (undocumented) + readonly _password: string; + // @internal (undocumented) + readonly _tenantId: string | null; + toJSON(): object; +} + +// @public +export class EmailAuthProvider implements AuthProvider { + static credential(email: string, password: string): EmailAuthCredential; + static credentialWithLink(email: string, emailLink: string): EmailAuthCredential; + static readonly EMAIL_LINK_SIGN_IN_METHOD: 'emailLink'; + static readonly EMAIL_PASSWORD_SIGN_IN_METHOD: 'password'; + static readonly PROVIDER_ID: 'password'; + readonly providerId: "password"; +} + +// @public +export interface EmulatorConfig { + readonly host: string; + readonly options: { + readonly disableWarnings: boolean; + }; + readonly port: number | null; + readonly protocol: string; +} + +export { ErrorFn } + +// Warning: (ae-forgotten-export) The symbol "BaseOAuthProvider" needs to be exported by the entry point index.doc.d.ts +// +// @public +export class FacebookAuthProvider extends BaseOAuthProvider { + constructor(); + static credential(accessToken: string): OAuthCredential; + static credentialFromError(error: FirebaseError): OAuthCredential | null; + static credentialFromResult(userCredential: UserCredential): OAuthCredential | null; + static readonly FACEBOOK_SIGN_IN_METHOD: 'facebook.com'; + static readonly PROVIDER_ID: 'facebook.com'; +} + +// @public +export const FactorId: { + readonly PHONE: "phone"; +}; + +// @public +export function fetchSignInMethodsForEmail(auth: Auth, email: string): Promise; + +// @public +export function getAdditionalUserInfo(userCredential: UserCredential): AdditionalUserInfo | null; + +// @public +export function getAuth(app?: FirebaseApp): Auth; + +// @public +export function getIdToken(user: User, forceRefresh?: boolean): Promise; + +// @public +export function getIdTokenResult(user: User, forceRefresh?: boolean): Promise; + +// @public +export function getMultiFactorResolver(auth: Auth, error: MultiFactorError): MultiFactorResolver; + +// @public +export function getRedirectResult(auth: Auth, resolver?: PopupRedirectResolver): Promise; + +// @public +export class GithubAuthProvider extends BaseOAuthProvider { + constructor(); + static credential(accessToken: string): OAuthCredential; + static credentialFromError(error: FirebaseError): OAuthCredential | null; + static credentialFromResult(userCredential: UserCredential): OAuthCredential | null; + static readonly GITHUB_SIGN_IN_METHOD: 'github.com'; + static readonly PROVIDER_ID: 'github.com'; +} + +// @public +export class GoogleAuthProvider extends BaseOAuthProvider { + constructor(); + static credential(idToken?: string | null, accessToken?: string | null): OAuthCredential; + static credentialFromError(error: FirebaseError): OAuthCredential | null; + static credentialFromResult(userCredential: UserCredential): OAuthCredential | null; + static readonly GOOGLE_SIGN_IN_METHOD: 'google.com'; + static readonly PROVIDER_ID: 'google.com'; +} + +// @public +export interface IdTokenResult { + authTime: string; + claims: ParsedToken; + expirationTime: string; + issuedAtTime: string; + signInProvider: string | null; + signInSecondFactor: string | null; + token: string; +} + +// @public +export const indexedDBLocalPersistence: Persistence; + +// @public +export function initializeAuth(app: FirebaseApp, deps?: Dependencies): Auth; + +// @public +export const inMemoryPersistence: Persistence; + +// @public +export function isSignInWithEmailLink(auth: Auth, emailLink: string): boolean; + +// @public +export function linkWithCredential(user: User, credential: AuthCredential): Promise; + +// @public +export function linkWithPhoneNumber(user: User, phoneNumber: string, appVerifier: ApplicationVerifier): Promise; + +// @public +export function linkWithPopup(user: User, provider: AuthProvider, resolver?: PopupRedirectResolver): Promise; + +// @public +export function linkWithRedirect(user: User, provider: AuthProvider, resolver?: PopupRedirectResolver): Promise; + +// @public +export function multiFactor(user: User): MultiFactorUser; + +// @public +export interface MultiFactorAssertion { + readonly factorId: typeof FactorId[keyof typeof FactorId]; +} + +// @public +export interface MultiFactorError extends AuthError { + readonly operationType: typeof OperationType[keyof typeof OperationType]; +} + +// @public +export interface MultiFactorInfo { + readonly displayName?: string | null; + readonly enrollmentTime: string; + readonly factorId: typeof FactorId[keyof typeof FactorId]; + readonly uid: string; +} + +// @public +export interface MultiFactorResolver { + readonly hints: MultiFactorInfo[]; + resolveSignIn(assertion: MultiFactorAssertion): Promise; + readonly session: MultiFactorSession; +} + +// @public +export interface MultiFactorSession { +} + +// @public +export interface MultiFactorUser { + enroll(assertion: MultiFactorAssertion, displayName?: string | null): Promise; + readonly enrolledFactors: MultiFactorInfo[]; + getSession(): Promise; + unenroll(option: MultiFactorInfo | string): Promise; +} + +export { NextFn } + +// @public +export type NextOrObserver = NextFn | Observer; + +// @public +export class OAuthCredential extends AuthCredential { + accessToken?: string; + static fromJSON(json: string | object): OAuthCredential | null; + // Warning: (ae-forgotten-export) The symbol "OAuthCredentialParams" needs to be exported by the entry point index.doc.d.ts + // + // @internal (undocumented) + static _fromParams(params: OAuthCredentialParams): OAuthCredential; + // @internal (undocumented) + _getIdTokenResponse(auth: AuthInternal): Promise; + // @internal (undocumented) + _getReauthenticationResolver(auth: AuthInternal): Promise; + idToken?: string; + // @internal (undocumented) + _linkToIdToken(auth: AuthInternal, idToken: string): Promise; + // @internal (undocumented) + nonce?: string; + secret?: string; + toJSON(): object; +} + +// @public +export interface OAuthCredentialOptions { + accessToken?: string; + idToken?: string; + rawNonce?: string; +} + +// @public +export class OAuthProvider extends BaseOAuthProvider { + credential(params: OAuthCredentialOptions): OAuthCredential; + static credentialFromError(error: FirebaseError): OAuthCredential | null; + static credentialFromJSON(json: object | string): OAuthCredential; + static credentialFromResult(userCredential: UserCredential): OAuthCredential | null; + } + +// @public +export function onAuthStateChanged(auth: Auth, nextOrObserver: NextOrObserver, error?: ErrorFn, completed?: CompleteFn): Unsubscribe; + +// @public +export function onIdTokenChanged(auth: Auth, nextOrObserver: NextOrObserver, error?: ErrorFn, completed?: CompleteFn): Unsubscribe; + +// @public +export const OperationType: { + readonly LINK: "link"; + readonly REAUTHENTICATE: "reauthenticate"; + readonly SIGN_IN: "signIn"; +}; + +// @public +export function parseActionCodeURL(link: string): ActionCodeURL | null; + +// @public +export interface ParsedToken { + [key: string]: string | object | undefined; + 'auth_time'?: string; + 'exp'?: string; + 'firebase'?: { + 'sign_in_provider'?: string; + 'sign_in_second_factor'?: string; + }; + 'iat'?: string; + 'sub'?: string; +} + +// @public +export interface Persistence { + readonly type: 'SESSION' | 'LOCAL' | 'NONE'; +} + +// @public +export class PhoneAuthCredential extends AuthCredential { + static fromJSON(json: object | string): PhoneAuthCredential | null; + // @internal (undocumented) + static _fromTokenResponse(phoneNumber: string, temporaryProof: string): PhoneAuthCredential; + // @internal (undocumented) + static _fromVerification(verificationId: string, verificationCode: string): PhoneAuthCredential; + // @internal (undocumented) + _getIdTokenResponse(auth: AuthInternal): Promise; + // @internal (undocumented) + _getReauthenticationResolver(auth: AuthInternal): Promise; + // @internal (undocumented) + _linkToIdToken(auth: AuthInternal, idToken: string): Promise; + // Warning: (ae-forgotten-export) The symbol "SignInWithPhoneNumberRequest" needs to be exported by the entry point index.doc.d.ts + // + // @internal (undocumented) + _makeVerificationRequest(): SignInWithPhoneNumberRequest; + toJSON(): object; +} + +// @public +export class PhoneAuthProvider { + constructor(auth: Auth); + static credential(verificationId: string, verificationCode: string): PhoneAuthCredential; + static credentialFromError(error: FirebaseError): AuthCredential | null; + static credentialFromResult(userCredential: UserCredential): AuthCredential | null; + static readonly PHONE_SIGN_IN_METHOD: 'phone'; + static readonly PROVIDER_ID: 'phone'; + readonly providerId: "phone"; + verifyPhoneNumber(phoneOptions: PhoneInfoOptions | string, applicationVerifier: ApplicationVerifier): Promise; +} + +// @public +export type PhoneInfoOptions = PhoneSingleFactorInfoOptions | PhoneMultiFactorEnrollInfoOptions | PhoneMultiFactorSignInInfoOptions; + +// @public +export interface PhoneMultiFactorAssertion extends MultiFactorAssertion { +} + +// @public +export interface PhoneMultiFactorEnrollInfoOptions { + phoneNumber: string; + session: MultiFactorSession; +} + +// @public +export class PhoneMultiFactorGenerator { + static assertion(credential: PhoneAuthCredential): PhoneMultiFactorAssertion; +} + +// @public +export interface PhoneMultiFactorSignInInfoOptions { + multiFactorHint?: MultiFactorInfo; + multiFactorUid?: string; + session: MultiFactorSession; +} + +// @public +export interface PhoneSingleFactorInfoOptions { + phoneNumber: string; +} + +// @public +export interface PopupRedirectResolver { +} + +// @public +export const prodErrorMap: AuthErrorMap; + +// @public +export const ProviderId: { + readonly FACEBOOK: "facebook.com"; + readonly GITHUB: "github.com"; + readonly GOOGLE: "google.com"; + readonly PASSWORD: "password"; + readonly PHONE: "phone"; + readonly TWITTER: "twitter.com"; +}; + +// @public +export interface ReactNativeAsyncStorage { + getItem(key: string): Promise; + removeItem(key: string): Promise; + setItem(key: string, value: string): Promise; +} + +// @public +export const reactNativeLocalPersistence: Persistence; + +// @public +export function reauthenticateWithCredential(user: User, credential: AuthCredential): Promise; + +// @public +export function reauthenticateWithPhoneNumber(user: User, phoneNumber: string, appVerifier: ApplicationVerifier): Promise; + +// @public +export function reauthenticateWithPopup(user: User, provider: AuthProvider, resolver?: PopupRedirectResolver): Promise; + +// @public +export function reauthenticateWithRedirect(user: User, provider: AuthProvider, resolver?: PopupRedirectResolver): Promise; + +// @public +export interface RecaptchaParameters { + // (undocumented) + [key: string]: any; +} + +// Warning: (ae-forgotten-export) The symbol "ApplicationVerifierInternal" needs to be exported by the entry point index.doc.d.ts +// +// @public +export class RecaptchaVerifier implements ApplicationVerifierInternal { + constructor(containerOrId: HTMLElement | string, parameters: RecaptchaParameters, authExtern: Auth); + clear(): void; + // Warning: (ae-forgotten-export) The symbol "ReCaptchaLoader" needs to be exported by the entry point index.doc.d.ts + // + // @internal (undocumented) + readonly _recaptchaLoader: ReCaptchaLoader; + render(): Promise; + // @internal (undocumented) + _reset(): void; + readonly type = "recaptcha"; + verify(): Promise; + } + +// @public +export function reload(user: User): Promise; + +// Warning: (ae-forgotten-export) The symbol "FederatedAuthProvider" needs to be exported by the entry point index.doc.d.ts +// +// @public +export class SAMLAuthProvider extends FederatedAuthProvider { + constructor(providerId: string); + static credentialFromError(error: FirebaseError): AuthCredential | null; + static credentialFromJSON(json: string | object): AuthCredential; + static credentialFromResult(userCredential: UserCredential): AuthCredential | null; + } + +// @public +export function sendEmailVerification(user: User, actionCodeSettings?: ActionCodeSettings | null): Promise; + +// @public +export function sendPasswordResetEmail(auth: Auth, email: string, actionCodeSettings?: ActionCodeSettings): Promise; + +// @public +export function sendSignInLinkToEmail(auth: Auth, email: string, actionCodeSettings: ActionCodeSettings): Promise; + +// @public +export function setPersistence(auth: Auth, persistence: Persistence): Promise; + +// @public +export function signInAnonymously(auth: Auth): Promise; + +// @public +export const SignInMethod: { + readonly EMAIL_LINK: "emailLink"; + readonly EMAIL_PASSWORD: "password"; + readonly FACEBOOK: "facebook.com"; + readonly GITHUB: "github.com"; + readonly GOOGLE: "google.com"; + readonly PHONE: "phone"; + readonly TWITTER: "twitter.com"; +}; + +// @public +export function signInWithCredential(auth: Auth, credential: AuthCredential): Promise; + +// @public +export function signInWithCustomToken(auth: Auth, customToken: string): Promise; + +// @public +export function signInWithEmailAndPassword(auth: Auth, email: string, password: string): Promise; + +// @public +export function signInWithEmailLink(auth: Auth, email: string, emailLink?: string): Promise; + +// @public +export function signInWithPhoneNumber(auth: Auth, phoneNumber: string, appVerifier: ApplicationVerifier): Promise; + +// @public +export function signInWithPopup(auth: Auth, provider: AuthProvider, resolver?: PopupRedirectResolver): Promise; + +// @public +export function signInWithRedirect(auth: Auth, provider: AuthProvider, resolver?: PopupRedirectResolver): Promise; + +// @public +export function signOut(auth: Auth): Promise; + +// @public +export class TwitterAuthProvider extends BaseOAuthProvider { + constructor(); + static credential(token: string, secret: string): OAuthCredential; + static credentialFromError(error: FirebaseError): OAuthCredential | null; + static credentialFromResult(userCredential: UserCredential): OAuthCredential | null; + static readonly PROVIDER_ID: 'twitter.com'; + static readonly TWITTER_SIGN_IN_METHOD: 'twitter.com'; +} + +// @public +export function unlink(user: User, providerId: string): Promise; + +export { Unsubscribe } + +// @public +export function updateCurrentUser(auth: Auth, user: User | null): Promise; + +// @public +export function updateEmail(user: User, newEmail: string): Promise; + +// @public +export function updatePassword(user: User, newPassword: string): Promise; + +// @public +export function updatePhoneNumber(user: User, credential: PhoneAuthCredential): Promise; + +// @public +export function updateProfile(user: User, { displayName, photoURL: photoUrl }: { + displayName?: string | null; + photoURL?: string | null; +}): Promise; + +// @public +export function useDeviceLanguage(auth: Auth): void; + +// @public +export interface User extends UserInfo { + delete(): Promise; + readonly emailVerified: boolean; + getIdToken(forceRefresh?: boolean): Promise; + getIdTokenResult(forceRefresh?: boolean): Promise; + readonly isAnonymous: boolean; + readonly metadata: UserMetadata; + readonly providerData: UserInfo[]; + readonly refreshToken: string; + reload(): Promise; + readonly tenantId: string | null; + toJSON(): object; +} + +// @public +export interface UserCredential { + operationType: typeof OperationType[keyof typeof OperationType]; + providerId: string | null; + user: User; +} + +// @public +export interface UserInfo { + readonly displayName: string | null; + readonly email: string | null; + readonly phoneNumber: string | null; + readonly photoURL: string | null; + readonly providerId: string; + readonly uid: string; +} + +// @public +export interface UserMetadata { + readonly creationTime?: string; + readonly lastSignInTime?: string; +} + +// @public +export type UserProfile = Record; + +// @public +export function verifyBeforeUpdateEmail(user: User, newEmail: string, actionCodeSettings?: ActionCodeSettings | null): Promise; + +// @public +export function verifyPasswordResetCode(auth: Auth, code: string): Promise; + + +// (No @packageDocumentation comment for this package) + +``` diff --git a/packages/auth-compat/README.md b/packages/auth-compat/README.md index ed7faf71ab8..35140795a4f 100644 --- a/packages/auth-compat/README.md +++ b/packages/auth-compat/README.md @@ -1,4 +1,4 @@ -# @firebase/auth-compat-exp +# @firebase/auth-compat This is a compatability layer to for the Firebase Authentication SDK diff --git a/packages/auth-compat/demo/README.md b/packages/auth-compat/demo/README.md index 8d19e0a1af2..49817e3ca61 100644 --- a/packages/auth-compat/demo/README.md +++ b/packages/auth-compat/demo/README.md @@ -15,7 +15,7 @@ Run: ```bash git clone https://github.com/firebase/firebase-js-sdk.git -cd firebase-js-sdk/packages-exp/auth-compat-exp/demo +cd firebase-js-sdk/packages/auth-compat/demo ``` This will clone the repository in the current directory. @@ -49,20 +49,20 @@ yarn install ## Deploy -Before deploying, you may need to build the auth-exp package: +Before deploying, you may need to build the auth package: ```bash yarn build:deps ``` -You'll also need to build a fully resolved firebase-app.js and firebase-auth.js from auth-compat-exp: +You'll also need to build a fully resolved firebase-app.js and firebase-auth.js from auth-compat: ```bash yarn build ``` -This can take some time, and you only need to do it if you've modified the auth-exp or auth-compta-exp packages. +This can take some time, and you only need to do it if you've modified the auth or auth-compta packages. -To run the app locally, simply issue the following command in the `auth-compat-exp/demo` directory: +To run the app locally, simply issue the following command in the `auth-compat/demo` directory: ```bash yarn run demo diff --git a/packages/auth-compat/demo/package.json b/packages/auth-compat/demo/package.json index b27277860e7..b89727d1d07 100644 --- a/packages/auth-compat/demo/package.json +++ b/packages/auth-compat/demo/package.json @@ -1,5 +1,5 @@ { - "name": "@firebase/auth-compat-exp-demo", + "name": "@firebase/auth-compat-demo", "version": "0.1.0", "private": true, "description": "Demo for Auth SDK Compatibility Layer", @@ -10,13 +10,13 @@ "lint:fix": "eslint --fix -c .eslintrc.js '**/*.ts' --ignore-path '../../../.gitignore'", "demo": "rollup -c && firebase serve", "build": "rollup -c", - "build:deps": "lerna run --scope @firebase/'{app-compat,app-exp,auth-compat-exp}' --include-dependencies build", + "build:deps": "lerna run --scope @firebase/'{app-compat,app,auth-compat}' --include-dependencies build", "dev": "rollup -c -w" }, "peerDependencies": { "@firebase/app-compat": "0.x", "@firebase/auth-types": "0.x", - "@firebase/auth-exp": "0.x" + "@firebase/auth": "0.x" }, "dependencies": { "@firebase/logger": "^0.2.2", @@ -38,7 +38,7 @@ "typescript": "4.2.2" }, "repository": { - "directory": "packages-exp/auth-compat-exp/demo", + "directory": "packages/auth-compat/demo", "type": "git", "url": "https://github.com/firebase/firebase-js-sdk.git" }, diff --git a/packages/auth-compat/demo/rollup.config.js b/packages/auth-compat/demo/rollup.config.js index c36eea785f0..08b52dfe26b 100644 --- a/packages/auth-compat/demo/rollup.config.js +++ b/packages/auth-compat/demo/rollup.config.js @@ -39,7 +39,7 @@ const umdBuilds = [ * App UMD Builds */ { - input: '../../firebase-exp/compat/app/index.ts', + input: '../../firebase/compat/app/index.ts', output: { file: 'public/dist/firebase-app.js', sourcemap: true, @@ -58,7 +58,7 @@ const umdBuilds = [ name: 'firebase', globals: { '@firebase/app-compat': 'firebase', - '@firebase/app-exp': 'firebase.INTERNAL.modularAPIs' + '@firebase/app': 'firebase.INTERNAL.modularAPIs' }, /** * use iife to avoid below error in the old Safari browser @@ -80,7 +80,7 @@ const umdBuilds = [ }` }, plugins: [...plugins], - external: ['@firebase/app-compat', '@firebase/app-exp'] + external: ['@firebase/app-compat', '@firebase/app'] } ]; diff --git a/packages/auth-compat/index.node.ts b/packages/auth-compat/index.node.ts index c780f3bd8aa..35ae139dd36 100644 --- a/packages/auth-compat/index.node.ts +++ b/packages/auth-compat/index.node.ts @@ -22,7 +22,7 @@ * just use index.ts */ export * from './index'; -import { FetchProvider } from '@firebase/auth-exp/internal'; +import { FetchProvider } from '@firebase/auth/internal'; import * as fetchImpl from 'node-fetch'; import './index'; diff --git a/packages/auth-compat/index.ts b/packages/auth-compat/index.ts index 082b6ae38f0..1aecc67ce27 100644 --- a/packages/auth-compat/index.ts +++ b/packages/auth-compat/index.ts @@ -18,7 +18,7 @@ /* eslint-disable camelcase */ import firebase, { _FirebaseNamespace } from '@firebase/app-compat'; -import * as impl from '@firebase/auth-exp/internal'; +import * as impl from '@firebase/auth/internal'; import { Component, ComponentType, @@ -78,7 +78,7 @@ function registerAuthCompat(instance: _FirebaseNamespace): void { container => { // getImmediate for FirebaseApp will always succeed const app = container.getProvider('app-compat').getImmediate(); - const authProvider = container.getProvider('auth-exp'); + const authProvider = container.getProvider('auth'); return new Auth(app, authProvider); }, ComponentType.PUBLIC diff --git a/packages/auth-compat/package.json b/packages/auth-compat/package.json index 74e61d147e3..ff7d14507f7 100644 --- a/packages/auth-compat/package.json +++ b/packages/auth-compat/package.json @@ -1,8 +1,7 @@ { "name": "@firebase/auth-compat", - "version": "0.0.900", - "private": true, - "description": "FirebaseAuth compatibility package that uses API style compatible with Firebase@7 and prior versions", + "version": "0.1.0", + "description": "FirebaseAuth compatibility package that uses API style compatible with Firebase@8 and prior versions", "author": "Firebase (https://firebase.google.com/)", "main": "dist/index.node.cjs.js", "browser": "dist/index.esm2017.js", @@ -15,7 +14,7 @@ "lint:fix": "eslint --fix -c .eslintrc.js '**/*.ts' --ignore-path '../../.gitignore'", "build": "rollup -c", "build:deps": "lerna run --scope @firebase/auth-compat --include-dependencies build", - "build:release": "rollup -c rollup.config.release.js && yarn add-compat-overloads", + "build:release": "yarn build && yarn add-compat-overloads", "dev": "rollup -c -w", "test": "run-p lint test:all", "test:all": "run-p test:browser test:node test:integration", @@ -26,13 +25,13 @@ "test:node:integration": "ts-node -O '{\"module\": \"commonjs\", \"target\": \"es6\"}' scripts/run_node_tests.ts --integration", "test:webdriver": "rollup -c test/integration/webdriver/static/rollup.config.js && ts-node -O '{\"module\": \"commonjs\", \"target\": \"es6\"}' scripts/run_node_tests.ts --webdriver", "test:integration": "firebase emulators:exec --project demo-emulatedproject --only auth \"run-s test:browser:integration test:node:integration test:webdriver\"", - "add-compat-overloads": "ts-node-script ../../scripts/exp/create-overloads.ts -i ../auth-exp/dist/auth-exp-public.d.ts -o dist/auth-compat-exp/index.d.ts -a -r Auth:types.FirebaseAuth -r User:types.User -r FirebaseApp:FirebaseAppCompat --moduleToEnhance @firebase/auth" + "add-compat-overloads": "ts-node-script ../../scripts/exp/create-overloads.ts -i ../auth/dist/auth-public.d.ts -o dist/auth-compat/index.d.ts -a -r Auth:types.FirebaseAuth -r User:types.User -r FirebaseApp:FirebaseAppCompat --moduleToEnhance @firebase/auth" }, "peerDependencies": { "@firebase/app-compat": "0.x" }, "dependencies": { - "@firebase/auth-exp": "0.0.900", + "@firebase/auth": "0.16.8", "@firebase/auth-types": "0.10.3", "@firebase/component": "0.5.5", "@firebase/util": "1.2.0", @@ -42,7 +41,7 @@ }, "license": "Apache-2.0", "devDependencies": { - "@firebase/app-compat": "0.x", + "@firebase/app-compat": "0.1.0", "@rollup/plugin-json": "4.1.0", "rollup": "2.52.2", "rollup-plugin-replace": "2.2.0", @@ -50,14 +49,14 @@ "typescript": "4.2.2" }, "repository": { - "directory": "packages-exp/auth-compat-exp", + "directory": "packages/auth-compat", "type": "git", "url": "https://github.com/firebase/firebase-js-sdk.git" }, "bugs": { "url": "https://github.com/firebase/firebase-js-sdk/issues" }, - "typings": "dist/auth-compat-exp/index.d.ts", + "typings": "dist/auth-compat/index.d.ts", "nyc": { "extension": [ ".ts" diff --git a/packages/auth-compat/rollup.config.js b/packages/auth-compat/rollup.config.js index 06596518856..5705905f2cb 100644 --- a/packages/auth-compat/rollup.config.js +++ b/packages/auth-compat/rollup.config.js @@ -15,7 +15,133 @@ * limitations under the License. */ -import { getAllBuilds } from './rollup.config.shared'; -// eslint-disable-next-line import/no-default-export -export default getAllBuilds({}); +import json from '@rollup/plugin-json'; +import resolve from '@rollup/plugin-node-resolve'; +import { uglify } from 'rollup-plugin-uglify'; +import typescriptPlugin from 'rollup-plugin-typescript2'; +import typescript from 'typescript'; +import pkg from './package.json'; + +const deps = Object.keys( + Object.assign({}, pkg.peerDependencies, pkg.dependencies) +); + +/** + * Common plugins for all builds + */ +const commonPlugins = [json(), resolve()]; + +/** + * ES5 Builds + */ +const es5BuildPlugins = [ + ...commonPlugins, + typescriptPlugin({ + typescript + }) +]; + +const es5Builds = [ + /** + * Browser Builds + */ + { + input: 'index.ts', + output: [{ file: pkg.esm5, format: 'esm', sourcemap: true }], + plugins: es5BuildPlugins, + external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)), + treeshake: { + moduleSideEffects: false + } + }, + /** + * Node.js Build + */ + { + input: 'index.node.ts', + output: [{ file: pkg.main, format: 'cjs', sourcemap: true }], + plugins: es5BuildPlugins, + external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)), + treeshake: { + moduleSideEffects: true + } + }, + /** + * UMD build + */ + { + input: `./index.ts`, + output: { + compact: true, + file: `dist/firebase-auth.js`, + format: 'umd', + sourcemap: true, + extend: true, + name: 'firebase', + globals: { + '@firebase/app-compat': 'firebase', + '@firebase/app': 'firebase.INTERNAL.modularAPIs' + }, + /** + * use iife to avoid below error in the old Safari browser + * SyntaxError: Functions cannot be declared in a nested block in strict mode + * https://github.com/firebase/firebase-js-sdk/issues/1228 + * + */ + intro: ` + try { + (function() {`, + outro: ` + }).apply(this, arguments); + } catch(err) { + console.error(err); + throw new Error( + 'Cannot instantiate firebase-auth.js - ' + + 'be sure to load firebase-app.js first.' + ); + }` + }, + plugins: [...es5BuildPlugins, uglify()], + external: ['@firebase/app-compat', '@firebase/app'] + } +]; + +/** + * ES2017 Builds + */ +const es2017BuildPlugins = [ + ...commonPlugins, + typescriptPlugin({ + typescript, + tsconfigOverride: { + compilerOptions: { + target: 'es2017' + } + } + }) +]; +const es2017Builds = [ + /** + * Browser Builds + */ + { + input: 'index.ts', + output: { + file: pkg.browser, + format: 'es', + sourcemap: true + }, + plugins: es2017BuildPlugins, + external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)), + treeshake: { + moduleSideEffects: false + } + } +]; + +export default [ + ...es5Builds, + ...es2017Builds +]; + diff --git a/packages/auth-compat/rollup.config.release.js b/packages/auth-compat/rollup.config.release.js deleted file mode 100644 index 03fbdc6434d..00000000000 --- a/packages/auth-compat/rollup.config.release.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * @license - * Copyright 2020 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { importPathTransformer } from '../../scripts/exp/ts-transform-import-path'; -import { getAllBuilds } from './rollup.config.shared'; - -// eslint-disable-next-line import/no-default-export -export default getAllBuilds({ - clean: true, - abortOnError: false, - transformers: [importPathTransformer] -}); diff --git a/packages/auth-compat/rollup.config.shared.js b/packages/auth-compat/rollup.config.shared.js deleted file mode 100644 index 4374ef33122..00000000000 --- a/packages/auth-compat/rollup.config.shared.js +++ /dev/null @@ -1,153 +0,0 @@ -/** - * @license - * Copyright 2020 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import json from '@rollup/plugin-json'; -import resolve from '@rollup/plugin-node-resolve'; -import { uglify } from 'rollup-plugin-uglify'; -import typescriptPlugin from 'rollup-plugin-typescript2'; -import typescript from 'typescript'; -import pkg from './package.json'; - -const deps = Object.keys( - Object.assign({}, pkg.peerDependencies, pkg.dependencies) -); - -/** - * Common plugins for all builds - */ -const commonPlugins = [json(), resolve()]; - -/** - * ES5 Builds - */ -export function getEs5Builds(additionalTypescriptPlugins = {}) { - const es5BuildPlugins = [ - ...commonPlugins, - typescriptPlugin({ - typescript, - ...additionalTypescriptPlugins - }) - ]; - - return [ - /** - * Browser Builds - */ - { - input: 'index.ts', - output: [{ file: pkg.esm5, format: 'esm', sourcemap: true }], - plugins: es5BuildPlugins, - external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)), - treeshake: { - moduleSideEffects: false - } - }, - /** - * Node.js Build - */ - { - input: 'index.node.ts', - output: [{ file: pkg.main, format: 'cjs', sourcemap: true }], - plugins: es5BuildPlugins, - external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)), - treeshake: { - moduleSideEffects: true - } - }, - /** - * UMD build - */ - { - input: `./index.ts`, - output: { - compact: true, - file: `dist/firebase-auth.js`, - format: 'umd', - sourcemap: true, - extend: true, - name: 'firebase', - globals: { - '@firebase/app-compat': 'firebase', - '@firebase/app': 'firebase.INTERNAL.modularAPIs' - }, - /** - * use iife to avoid below error in the old Safari browser - * SyntaxError: Functions cannot be declared in a nested block in strict mode - * https://github.com/firebase/firebase-js-sdk/issues/1228 - * - */ - intro: ` - try { - (function() {`, - outro: ` - }).apply(this, arguments); - } catch(err) { - console.error(err); - throw new Error( - 'Cannot instantiate firebase-auth.js - ' + - 'be sure to load firebase-app.js first.' - ); - }` - }, - plugins: [...es5BuildPlugins, uglify()], - external: ['@firebase/app-compat', '@firebase/app'] - } - ]; -} - -/** - * ES2017 Builds - */ -export function getEs2017Builds(additionalTypescriptPlugins = {}) { - const es2017BuildPlugins = [ - ...commonPlugins, - typescriptPlugin({ - typescript, - tsconfigOverride: { - compilerOptions: { - target: 'es2017' - } - }, - ...additionalTypescriptPlugins - }) - ]; - return [ - /** - * Browser Builds - */ - { - input: 'index.ts', - output: { - file: pkg.browser, - format: 'es', - sourcemap: true - }, - plugins: es2017BuildPlugins, - external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)), - treeshake: { - moduleSideEffects: false - } - } - ]; -} - -export function getAllBuilds(additionalTypescriptPlugins = {}) { - return [ - ...getEs5Builds(additionalTypescriptPlugins), - ...getEs2017Builds(additionalTypescriptPlugins) - ]; -} diff --git a/packages/auth-compat/scripts/run_node_tests.ts b/packages/auth-compat/scripts/run_node_tests.ts index 5369aa1a764..a06901ded4e 100644 --- a/packages/auth-compat/scripts/run_node_tests.ts +++ b/packages/auth-compat/scripts/run_node_tests.ts @@ -41,7 +41,7 @@ if (argv.integration) { testConfig = ['test/integration/flows/**.test.ts']; } else if (argv.webdriver) { testConfig = [ - '../auth-exp/test/integration/webdriver/**/*.test.ts', + '../auth/test/integration/webdriver/**/*.test.ts', '--delay' ]; } @@ -52,7 +52,7 @@ let args = [ mocha, ...testConfig, '--file', - '../auth-exp/src/platform_browser/iframe/gapi.iframes.ts', + '../auth/src/platform_browser/iframe/gapi.iframes.ts', '--config', '../../config/mocharc.node.js' ]; diff --git a/packages/auth-compat/src/auth.test.ts b/packages/auth-compat/src/auth.test.ts index 877cac58eca..0de0bc42e44 100644 --- a/packages/auth-compat/src/auth.test.ts +++ b/packages/auth-compat/src/auth.test.ts @@ -16,7 +16,7 @@ */ import { FirebaseApp } from '@firebase/app-compat'; -import * as exp from '@firebase/auth-exp/internal'; +import * as exp from '@firebase/auth/internal'; import { Provider } from '@firebase/component'; import { expect, use } from 'chai'; import * as sinon from 'sinon'; @@ -32,7 +32,7 @@ describe('auth compat', () => { context('redirect persistence key storage', () => { let underlyingAuth: exp.AuthImpl; let app: FirebaseApp; - let providerStub: sinon.SinonStubbedInstance>; + let providerStub: sinon.SinonStubbedInstance>; beforeEach(() => { app = { options: { apiKey: 'api-key' } } as FirebaseApp; @@ -65,7 +65,7 @@ describe('auth compat', () => { providerStub.getImmediate.returns(underlyingAuth); const authCompat = new Auth( app, - providerStub as unknown as Provider<'auth-exp'> + providerStub as unknown as Provider<'auth'> ); // eslint-disable-next-line @typescript-eslint/no-floating-promises await authCompat.signInWithRedirect(new exp.GoogleAuthProvider()); @@ -83,7 +83,7 @@ describe('auth compat', () => { ); providerStub.isInitialized.returns(false); providerStub.initialize.returns(underlyingAuth); - new Auth(app, providerStub as unknown as Provider<'auth-exp'>); + new Auth(app, providerStub as unknown as Provider<'auth'>); // eslint-disable-next-line @typescript-eslint/no-floating-promises expect(providerStub.initialize).to.have.been.calledWith({ options: { diff --git a/packages/auth-compat/src/auth.ts b/packages/auth-compat/src/auth.ts index 50074d0e690..648adc0a5b7 100644 --- a/packages/auth-compat/src/auth.ts +++ b/packages/auth-compat/src/auth.ts @@ -16,7 +16,7 @@ */ import { FirebaseApp, _FirebaseService } from '@firebase/app-compat'; -import * as exp from '@firebase/auth-exp/internal'; +import * as exp from '@firebase/auth/internal'; import * as compat from '@firebase/auth-types'; import { Provider } from '@firebase/component'; import { ErrorFn, Observer, Unsubscribe } from '@firebase/util'; @@ -43,7 +43,7 @@ export class Auth { readonly _delegate: exp.AuthImpl; - constructor(readonly app: FirebaseApp, provider: Provider<'auth-exp'>) { + constructor(readonly app: FirebaseApp, provider: Provider<'auth'>) { if (provider.isInitialized()) { this._delegate = provider.getImmediate() as exp.AuthImpl; this.linkUnderlyingAuth(); diff --git a/packages/auth-compat/src/persistence.ts b/packages/auth-compat/src/persistence.ts index 93ba4fe6c8f..b8e945da0df 100644 --- a/packages/auth-compat/src/persistence.ts +++ b/packages/auth-compat/src/persistence.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import * as exp from '@firebase/auth-exp/internal'; +import * as exp from '@firebase/auth/internal'; import { isIndexedDBAvailable, isNode, isReactNative } from '@firebase/util'; import { _isWebStorageSupported, _isWorker } from './platform'; diff --git a/packages/auth-compat/src/phone_auth_provider.ts b/packages/auth-compat/src/phone_auth_provider.ts index a0c99ea23a0..41e1a859ffa 100644 --- a/packages/auth-compat/src/phone_auth_provider.ts +++ b/packages/auth-compat/src/phone_auth_provider.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import * as exp from '@firebase/auth-exp/internal'; +import * as exp from '@firebase/auth/internal'; import * as compat from '@firebase/auth-types'; import firebase from '@firebase/app-compat'; import { Compat } from '@firebase/util'; diff --git a/packages/auth-compat/src/platform.ts b/packages/auth-compat/src/platform.ts index b380c4b01fe..f98deb7310a 100644 --- a/packages/auth-compat/src/platform.ts +++ b/packages/auth-compat/src/platform.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import * as impl from '@firebase/auth-exp/internal'; +import * as impl from '@firebase/auth/internal'; import { getUA, isBrowserExtension, diff --git a/packages/auth-compat/src/popup_redirect.test.ts b/packages/auth-compat/src/popup_redirect.test.ts index 049310e2a5d..4a8961d21f2 100644 --- a/packages/auth-compat/src/popup_redirect.test.ts +++ b/packages/auth-compat/src/popup_redirect.test.ts @@ -18,7 +18,7 @@ import { expect, use } from 'chai'; import * as sinonChai from 'sinon-chai'; import * as sinon from 'sinon'; -import * as exp from '@firebase/auth-exp/internal'; +import * as exp from '@firebase/auth/internal'; import * as platform from './platform'; import { CompatPopupRedirectResolver } from './popup_redirect'; import { FirebaseApp } from '@firebase/app-compat'; diff --git a/packages/auth-compat/src/popup_redirect.ts b/packages/auth-compat/src/popup_redirect.ts index af980503f78..f5c38f19f00 100644 --- a/packages/auth-compat/src/popup_redirect.ts +++ b/packages/auth-compat/src/popup_redirect.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import * as exp from '@firebase/auth-exp/internal'; +import * as exp from '@firebase/auth/internal'; import { _isCordova, _isLikelyCordova } from './platform'; const _assert: typeof exp._assert = exp._assert; diff --git a/packages/auth-compat/src/recaptcha_verifier.ts b/packages/auth-compat/src/recaptcha_verifier.ts index 9cde304ba6b..26ab1ab42b5 100644 --- a/packages/auth-compat/src/recaptcha_verifier.ts +++ b/packages/auth-compat/src/recaptcha_verifier.ts @@ -16,7 +16,7 @@ */ import firebase, { FirebaseApp } from '@firebase/app-compat'; -import * as exp from '@firebase/auth-exp/internal'; +import * as exp from '@firebase/auth/internal'; import * as compat from '@firebase/auth-types'; import { Compat } from '@firebase/util'; diff --git a/packages/auth-compat/src/user.ts b/packages/auth-compat/src/user.ts index 8d47d726d56..baea997ef96 100644 --- a/packages/auth-compat/src/user.ts +++ b/packages/auth-compat/src/user.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import * as exp from '@firebase/auth-exp/internal'; +import * as exp from '@firebase/auth/internal'; import * as compat from '@firebase/auth-types'; import { Compat } from '@firebase/util'; import { _savePersistenceForRedirect } from './persistence'; diff --git a/packages/auth-compat/src/user_credential.ts b/packages/auth-compat/src/user_credential.ts index db33e8464ab..98a2159df8d 100644 --- a/packages/auth-compat/src/user_credential.ts +++ b/packages/auth-compat/src/user_credential.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import * as exp from '@firebase/auth-exp/internal'; +import * as exp from '@firebase/auth/internal'; import * as compat from '@firebase/auth-types'; import { FirebaseError } from '@firebase/util'; import { Auth } from './auth'; diff --git a/packages/auth-compat/test/helpers/helpers.ts b/packages/auth-compat/test/helpers/helpers.ts index e58089f0029..005f8efa61a 100644 --- a/packages/auth-compat/test/helpers/helpers.ts +++ b/packages/auth-compat/test/helpers/helpers.ts @@ -19,12 +19,12 @@ import * as sinon from 'sinon'; import firebase from '@firebase/app-compat'; import '../..'; -import * as exp from '@firebase/auth-exp/internal'; +import * as exp from '@firebase/auth/internal'; import { getAppConfig, getEmulatorUrl -} from '../../../auth-exp/test/helpers/integration/settings'; -import { resetEmulator } from '../../../auth-exp/test/helpers/integration/emulator_rest_helpers'; +} from '../../../auth/test/helpers/integration/settings'; +import { resetEmulator } from '../../../auth/test/helpers/integration/emulator_rest_helpers'; export function initializeTestInstance(): void { firebase.initializeApp(getAppConfig()); diff --git a/packages/auth-compat/test/integration/flows/oob.test.ts b/packages/auth-compat/test/integration/flows/oob.test.ts index 10be14f97ef..a36cb78db63 100644 --- a/packages/auth-compat/test/integration/flows/oob.test.ts +++ b/packages/auth-compat/test/integration/flows/oob.test.ts @@ -22,7 +22,7 @@ import firebase from '@firebase/app-compat'; import { getOobCodes, OobCodeSession -} from '../../../../auth-exp/test/helpers/integration/emulator_rest_helpers'; +} from '../../../../auth/test/helpers/integration/emulator_rest_helpers'; import { cleanUpTestInstance, initializeTestInstance, diff --git a/packages/auth-compat/test/integration/flows/phone.test.ts b/packages/auth-compat/test/integration/flows/phone.test.ts index df54ae778e3..fe50494d633 100644 --- a/packages/auth-compat/test/integration/flows/phone.test.ts +++ b/packages/auth-compat/test/integration/flows/phone.test.ts @@ -23,7 +23,7 @@ import { cleanUpTestInstance, initializeTestInstance } from '../../helpers/helpers'; -import { getPhoneVerificationCodes } from '../../../../auth-exp/test/helpers/integration/emulator_rest_helpers'; +import { getPhoneVerificationCodes } from '../../../../auth/test/helpers/integration/emulator_rest_helpers'; import { ConfirmationResult, RecaptchaVerifier, diff --git a/packages/auth-compat/test/integration/webdriver/static/rollup.config.js b/packages/auth-compat/test/integration/webdriver/static/rollup.config.js index d48a1208ff1..90adada6615 100644 --- a/packages/auth-compat/test/integration/webdriver/static/rollup.config.js +++ b/packages/auth-compat/test/integration/webdriver/static/rollup.config.js @@ -17,7 +17,7 @@ import { nodeResolve } from '@rollup/plugin-node-resolve'; -// This is run from the auth-exp package.json +// This is run from the auth package.json export default { input: ['test/integration/webdriver/static/index.js'], output: { diff --git a/packages/auth-types/index.d.ts b/packages/auth-types/index.d.ts index b7fc5dd6f9b..bebf4e5b18a 100644 --- a/packages/auth-types/index.d.ts +++ b/packages/auth-types/index.d.ts @@ -500,6 +500,6 @@ declare module '@firebase/app-types' { declare module '@firebase/component' { interface NameServiceMapping { - 'auth': FirebaseAuth; + 'auth-compat': FirebaseAuth; } } diff --git a/packages/auth/CHANGELOG.md b/packages/auth/CHANGELOG.md new file mode 100644 index 00000000000..393d7368268 --- /dev/null +++ b/packages/auth/CHANGELOG.md @@ -0,0 +1,109 @@ +# @firebase/auth + +## 0.16.8 + +### Patch Changes + +- [`56a6a9d4a`](https://github.com/firebase/firebase-js-sdk/commit/56a6a9d4af2766154584a0f66d3c4d8024d74ba5) [#5071](https://github.com/firebase/firebase-js-sdk/pull/5071) (fixes [#4932](https://github.com/firebase/firebase-js-sdk/issues/4932)) - Auto initialize `auth-internal` after `auth` has been initialized. + +## 0.16.7 + +### Patch Changes + +- [`c81cf82fa`](https://github.com/firebase/firebase-js-sdk/commit/c81cf82fac14cbfaebc0e440235c3fb38af22d38) [#4966](https://github.com/firebase/firebase-js-sdk/pull/4966) (fixes [#4879](https://github.com/firebase/firebase-js-sdk/issues/4879)) - Fix bug where `linkWithPopup`, `linkWithRedirect`, `reauthenticateWithPopup`, and `reauthenticateWithRedirect` weren't correctly picking up the emulator configuration. + +## 0.16.6 + +### Patch Changes + +- [`de68cdca2`](https://github.com/firebase/firebase-js-sdk/commit/de68cdca21c6ba5a890807857b529c2187e4adba) [#4868](https://github.com/firebase/firebase-js-sdk/pull/4868) (fixes [#4867](https://github.com/firebase/firebase-js-sdk/issues/4867)) - Ensure emulator warning text is accessible. + +## 0.16.5 + +### Patch Changes + +- Updated dependencies [[`3f370215a`](https://github.com/firebase/firebase-js-sdk/commit/3f370215aa571db6b41b92a7d8a9aaad2ea0ecd0)]: + - @firebase/auth-types@0.10.3 + +## 0.16.4 + +### Patch Changes + +- Updated dependencies [[`4ab5a9ce5`](https://github.com/firebase/firebase-js-sdk/commit/4ab5a9ce5b6256a95d745f6dc40a5e5ddd2301f2)]: + - @firebase/auth-types@0.10.2 + +## 0.16.3 + +### Patch Changes + +- [`73bb561e1`](https://github.com/firebase/firebase-js-sdk/commit/73bb561e18ea42286a54d28648636bf1ac7fcfe0) [#4357](https://github.com/firebase/firebase-js-sdk/pull/4357) (fixes [#4174](https://github.com/firebase/firebase-js-sdk/issues/4174)) - Decode UTF-8 in ID Token. Fix #4174. + +## 0.16.2 + +### Patch Changes + +- [`92a7f4345`](https://github.com/firebase/firebase-js-sdk/commit/92a7f434536051bedd00bc1be7e774174378aa7d) [#4280](https://github.com/firebase/firebase-js-sdk/pull/4280) - Add the `useEmulator()` function and `emulatorConfig` to the `firebase` package externs + +## 0.16.1 + +### Patch Changes + +- [`9fd3f5233`](https://github.com/firebase/firebase-js-sdk/commit/9fd3f5233077b45c5101789c427db51835484ce0) [#4210](https://github.com/firebase/firebase-js-sdk/pull/4210) - Update auth token logic to rely on device clock time instead of server time. This fixes an issue seen when a device's clock is skewed by a lot: https://github.com/firebase/firebase-js-sdk/issues/3222 + +## 0.16.0 + +### Minor Changes + +- [`c9f379cf7`](https://github.com/firebase/firebase-js-sdk/commit/c9f379cf7ef2c5938512a45b63008bbb135926ed) [#4112](https://github.com/firebase/firebase-js-sdk/pull/4112) - Add option to hide banner in auth when using the emulator + +## 0.15.3 + +### Patch Changes + +- [`11563b227`](https://github.com/firebase/firebase-js-sdk/commit/11563b227f30c9282c45e4a8128d5679954dcfd1) [#4146](https://github.com/firebase/firebase-js-sdk/pull/4146) - Fix issue with IndexedDB retry logic causing uncaught errors + +## 0.15.2 + +### Patch Changes + +- [`c2b215c19`](https://github.com/firebase/firebase-js-sdk/commit/c2b215c1950b2f75abb6a8dd58544a79bda968f6) [#4059](https://github.com/firebase/firebase-js-sdk/pull/4059) (fixes [#1926](https://github.com/firebase/firebase-js-sdk/issues/1926)) - Retry IndexedDB errors a fixed number of times to handle connection issues in mobile webkit. + +## 0.15.1 + +### Patch Changes + +- [`a5768b0aa`](https://github.com/firebase/firebase-js-sdk/commit/a5768b0aa7d7ce732279931aa436e988c9f36487) [#3932](https://github.com/firebase/firebase-js-sdk/pull/3932) - Point browser field to esm build. Now you need to use default import instead of namespace import to import firebase. + + Before this change + + ``` + import * as firebase from 'firebase/app'; + ``` + + After this change + + ``` + import firebase from 'firebase/app'; + ``` + +## 0.15.0 + +### Minor Changes + +- [`eeb1dfa4f`](https://github.com/firebase/firebase-js-sdk/commit/eeb1dfa4f629dc5cf328e4b4a224369c0670c312) [#3810](https://github.com/firebase/firebase-js-sdk/pull/3810) - Add ability to configure the SDK to communicate with the Firebase Auth emulator. + +### Patch Changes + +- [`916770f3c`](https://github.com/firebase/firebase-js-sdk/commit/916770f3cfc0ca9eae92fbf33558b7175cf2cf78) [#3934](https://github.com/firebase/firebase-js-sdk/pull/3934) - Add a validation for useEmulator URL. + +## 0.14.9 + +### Patch Changes + +- [`b6145466`](https://github.com/firebase/firebase-js-sdk/commit/b6145466835e22495b94d2bcfc45813e81496085) [#3401](https://github.com/firebase/firebase-js-sdk/pull/3401) Thanks [@Feiyang1](https://github.com/Feiyang1)! - Add browser field in package.json + +## 0.14.8 + +### Patch Changes + +- [`a754645e`](https://github.com/firebase/firebase-js-sdk/commit/a754645ec2be1b8c205f25f510196eee298b0d6e) [#3297](https://github.com/firebase/firebase-js-sdk/pull/3297) Thanks [@renovate](https://github.com/apps/renovate)! - Update dependency typescript to v3.9.5 diff --git a/packages/auth/README.md b/packages/auth/README.md index 6d4cb154b94..0592fa595a7 100644 --- a/packages/auth/README.md +++ b/packages/auth/README.md @@ -1,4 +1,4 @@ -# @firebase/auth-exp +# @firebase/auth This is the Firebase Authentication component of the Firebase JS SDK. diff --git a/packages/auth/cordova/demo/package.json b/packages/auth/cordova/demo/package.json index 02984d192f8..0c896d895f8 100644 --- a/packages/auth/cordova/demo/package.json +++ b/packages/auth/cordova/demo/package.json @@ -4,7 +4,7 @@ "version": "1.0.0", "scripts": { "build:js": "rollup -c", - "build:deps": "lerna run --scope @firebase/'{app-exp,auth-exp/cordova}' --include-dependencies build" + "build:deps": "lerna run --scope @firebase/'{app,auth/cordova}' --include-dependencies build" }, "keywords": [ "ecosystem:cordova" @@ -36,8 +36,8 @@ ] }, "dependencies": { - "@firebase/app-exp": "0.0.900", - "@firebase/auth-exp": "0.0.900", + "@firebase/app": "0.0.900", + "@firebase/auth": "0.0.900", "@firebase/logger": "0.2.6", "@firebase/util": "1.1.0", "cordova-plugin-browsertab": "0.2.0", diff --git a/packages/auth/cordova/demo/src/index.js b/packages/auth/cordova/demo/src/index.js index c8bc760c31d..42014cbf7e4 100644 --- a/packages/auth/cordova/demo/src/index.js +++ b/packages/auth/cordova/demo/src/index.js @@ -22,7 +22,7 @@ * package. */ -import { initializeApp } from '@firebase/app-exp'; +import { initializeApp } from '@firebase/app'; import { applyActionCode, browserLocalPersistence, @@ -62,7 +62,7 @@ import { reauthenticateWithRedirect, getRedirectResult, cordovaPopupRedirectResolver -} from '@firebase/auth-exp/dist/cordova'; +} from '@firebase/auth/dist/cordova'; import { config } from './config'; import { diff --git a/packages/auth/cordova/package.json b/packages/auth/cordova/package.json index 64d433f737e..a3d980280d8 100644 --- a/packages/auth/cordova/package.json +++ b/packages/auth/cordova/package.json @@ -1,5 +1,5 @@ { - "name": "@firebase/auth-exp/cordova", + "name": "@firebase/auth/cordova", "description": "A Cordova-specific build of the Firebase Auth JS SDK", "browser": "../dist/cordova/index.js", "typings": "../dist/cordova/index.cordova.d.ts" diff --git a/packages/auth/demo/README.md b/packages/auth/demo/README.md index 6e62f12fa01..a4d31ba955a 100644 --- a/packages/auth/demo/README.md +++ b/packages/auth/demo/README.md @@ -15,7 +15,7 @@ Run: ```bash git clone https://github.com/firebase/firebase-js-sdk.git -cd firebase-js-sdk/packages-exp/auth-exp/demo +cd firebase-js-sdk/packages/auth/demo ``` This will clone the repository in the current directory. @@ -42,14 +42,14 @@ in the `config.js` file. ## Deploy -Before deploying, you may need to build the auth-exp package: +Before deploying, you may need to build the auth package: ```bash yarn build:deps ``` -This can take some time, and you only need to do it if you've modified the auth-exp package. +This can take some time, and you only need to do it if you've modified the auth package. -To run the app locally, simply issue the following command in the `auth-exp/demo` directory: +To run the app locally, simply issue the following command in the `auth/demo` directory: ```bash yarn run demo diff --git a/packages/auth/demo/package.json b/packages/auth/demo/package.json index 60b249ec504..6901760b74e 100644 --- a/packages/auth/demo/package.json +++ b/packages/auth/demo/package.json @@ -1,5 +1,5 @@ { - "name": "@firebase/auth-exp-demo", + "name": "@firebase/auth-demo", "version": "0.1.0", "private": true, "description": "Demo for Auth TS SDK", @@ -12,12 +12,12 @@ "lint:fix": "eslint --fix -c .eslintrc.js '**/*.ts' --ignore-path '../../../.gitignore'", "demo": "rollup -c && firebase serve", "build": "rollup -c", - "build:deps": "lerna run --scope @firebase/'{app-exp,auth-exp}' --include-dependencies build", + "build:deps": "lerna run --scope @firebase/'{app,auth}' --include-dependencies build", "dev": "rollup -c -w" }, "dependencies": { - "@firebase/app-exp": "0.0.900", - "@firebase/auth-exp": "0.0.900", + "@firebase/app": "0.0.900", + "@firebase/auth": "0.0.900", "@firebase/logger": "0.2.6", "@firebase/util": "1.1.0", "tslib": "^2.1.0" @@ -35,7 +35,7 @@ "lerna": "4.0.0" }, "repository": { - "directory": "packages-exp/auth-exp/demo", + "directory": "packages/auth/demo", "type": "git", "url": "https://github.com/firebase/firebase-js-sdk.git" }, diff --git a/packages/auth/demo/src/index.js b/packages/auth/demo/src/index.js index 9ae38f876a9..44ec1b9206a 100644 --- a/packages/auth/demo/src/index.js +++ b/packages/auth/demo/src/index.js @@ -22,7 +22,7 @@ * package. */ -import { initializeApp } from '@firebase/app-exp'; +import { initializeApp } from '@firebase/app'; import { applyActionCode, browserLocalPersistence, @@ -68,7 +68,7 @@ import { reauthenticateWithRedirect, getRedirectResult, browserPopupRedirectResolver -} from '@firebase/auth-exp'; +} from '@firebase/auth'; import { config } from './config'; import { diff --git a/packages/auth/demo/src/worker/service-worker.ts b/packages/auth/demo/src/worker/service-worker.ts index d6316465619..924fd20f560 100644 --- a/packages/auth/demo/src/worker/service-worker.ts +++ b/packages/auth/demo/src/worker/service-worker.ts @@ -20,8 +20,8 @@ * service worker caches all content and only serves cached content in offline * mode. */ -import { initializeApp } from '@firebase/app-exp'; -import { getAuth, User } from '@firebase/auth-exp'; +import { initializeApp } from '@firebase/app'; +import { getAuth, User } from '@firebase/auth'; import { config } from '../config'; diff --git a/packages/auth/demo/src/worker/web-worker.ts b/packages/auth/demo/src/worker/web-worker.ts index 39a089e7d56..79800907f7b 100644 --- a/packages/auth/demo/src/worker/web-worker.ts +++ b/packages/auth/demo/src/worker/web-worker.ts @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { initializeApp } from '@firebase/app-exp'; +import { initializeApp } from '@firebase/app'; import { createUserWithEmailAndPassword, fetchSignInMethodsForEmail, @@ -25,7 +25,7 @@ import { signInWithEmailAndPassword, updateProfile, User -} from '@firebase/auth-exp'; +} from '@firebase/auth'; import { config } from '../config'; diff --git a/packages/auth/index.cordova.ts b/packages/auth/index.cordova.ts index e4306beb226..c2228ad133f 100644 --- a/packages/auth/index.cordova.ts +++ b/packages/auth/index.cordova.ts @@ -22,7 +22,7 @@ * just use index.ts */ -import { FirebaseApp, getApp, _getProvider } from '@firebase/app-exp'; +import { FirebaseApp, getApp, _getProvider } from '@firebase/app'; import { Auth } from './src/model/public_types'; import { indexedDBLocalPersistence } from './src/platform_browser/persistence/indexed_db'; @@ -49,7 +49,7 @@ export { import { cordovaPopupRedirectResolver } from './src/platform_cordova/popup_redirect/popup_redirect'; export function getAuth(app: FirebaseApp = getApp()): Auth { - const provider = _getProvider(app, 'auth-exp'); + const provider = _getProvider(app, 'auth'); if (provider.isInitialized()) { return provider.getImmediate(); diff --git a/packages/auth/index.node.ts b/packages/auth/index.node.ts index 33056956354..693f30e9fc3 100644 --- a/packages/auth/index.node.ts +++ b/packages/auth/index.node.ts @@ -24,7 +24,7 @@ import * as fetchImpl from 'node-fetch'; -import { FirebaseApp, getApp, _getProvider } from '@firebase/app-exp'; +import { FirebaseApp, getApp, _getProvider } from '@firebase/app'; import { Auth } from './src/model/public_types'; import { initializeAuth } from './src'; @@ -50,7 +50,7 @@ export { } from './src/model/enum_maps'; export function getAuth(app: FirebaseApp = getApp()): Auth { - const provider = _getProvider(app, 'auth-exp'); + const provider = _getProvider(app, 'auth'); if (provider.isInitialized()) { return provider.getImmediate(); diff --git a/packages/auth/index.rn.ts b/packages/auth/index.rn.ts index a54d8e0a1ae..a2958741cf9 100644 --- a/packages/auth/index.rn.ts +++ b/packages/auth/index.rn.ts @@ -24,7 +24,7 @@ import { AsyncStorage } from 'react-native'; -import { FirebaseApp, getApp, _getProvider } from '@firebase/app-exp'; +import { FirebaseApp, getApp, _getProvider } from '@firebase/app'; import { Auth, Persistence } from './src/model/public_types'; import { initializeAuth } from './src'; @@ -45,7 +45,7 @@ export const reactNativeLocalPersistence: Persistence = getReactNativePersistence(AsyncStorage); export function getAuth(app: FirebaseApp = getApp()): Auth { - const provider = _getProvider(app, 'auth-exp'); + const provider = _getProvider(app, 'auth'); if (provider.isInitialized()) { return provider.getImmediate(); diff --git a/packages/auth/index.ts b/packages/auth/index.ts index 2fcf1161e55..1ff3caae9c5 100644 --- a/packages/auth/index.ts +++ b/packages/auth/index.ts @@ -21,7 +21,7 @@ * limitations under the License. */ -import { FirebaseApp, getApp, _getProvider } from '@firebase/app-exp'; +import { FirebaseApp, getApp, _getProvider } from '@firebase/app'; import { initializeAuth } from './src'; import { registerAuth } from './src/core/auth/register'; @@ -91,7 +91,7 @@ export { PhoneMultiFactorGenerator } from './src/platform_browser/mfa/assertions * @public */ export function getAuth(app: FirebaseApp = getApp()): Auth { - const provider = _getProvider(app, 'auth-exp'); + const provider = _getProvider(app, 'auth'); if (provider.isInitialized()) { return provider.getImmediate(); diff --git a/packages/auth/index.webworker.ts b/packages/auth/index.webworker.ts index 2c746bbd7bc..41686449572 100644 --- a/packages/auth/index.webworker.ts +++ b/packages/auth/index.webworker.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { _getProvider, FirebaseApp, getApp } from '@firebase/app-exp'; +import { _getProvider, FirebaseApp, getApp } from '@firebase/app'; import { Auth } from './src/model/public_types'; import { AuthImpl } from './src/core/auth/auth_impl'; diff --git a/packages/auth/internal/index.ts b/packages/auth/internal/index.ts index d8da272c895..aeaf0833e27 100644 --- a/packages/auth/internal/index.ts +++ b/packages/auth/internal/index.ts @@ -19,7 +19,7 @@ import { _castAuth } from '../src/core/auth/auth_impl'; import { Auth } from '../src/model/public_types'; /** - * This interface is intended only for use by @firebase/auth-compat-exp, do not use directly + * This interface is intended only for use by @firebase/auth-compat, do not use directly */ export * from '../index'; diff --git a/packages/auth/internal/package.json b/packages/auth/internal/package.json index 4c6482ee076..8dd06ec9378 100644 --- a/packages/auth/internal/package.json +++ b/packages/auth/internal/package.json @@ -1,5 +1,5 @@ { - "name": "@firebase/auth-exp/internal", + "name": "@firebase/auth/internal", "description": "An internal version of the Auth SDK for use in the compatibility layer", "main": "../dist/node/internal.js", "module": "../dist/esm2017/internal.js", diff --git a/packages/auth/package.json b/packages/auth/package.json index 8e35b8d928f..1e9e9737d82 100644 --- a/packages/auth/package.json +++ b/packages/auth/package.json @@ -1,7 +1,6 @@ { - "name": "@firebase/auth-exp", - "version": "0.0.900", - "private": true, + "name": "@firebase/auth", + "version": "0.16.8", "description": "The Firebase Authenticaton component of the Firebase JS SDK.", "author": "Firebase (https://firebase.google.com/)", "main": "dist/node/index.js", @@ -20,8 +19,8 @@ "lint": "eslint -c .eslintrc.js '**/*.ts' --ignore-path '../../.gitignore'", "lint:fix": "eslint --fix -c .eslintrc.js '**/*.ts' --ignore-path '../../.gitignore'", "build": "rollup -c && yarn api-report", - "build:deps": "lerna run --scope @firebase/auth-exp --include-dependencies build", - "build:release": "rollup -c rollup.config.release.js && yarn api-report && yarn typings:public", + "build:deps": "lerna run --scope @firebase/auth --include-dependencies build", + "build:release": "yarn build && yarn typings:public", "build:scripts": "tsc -moduleResolution node --module commonjs scripts/*.ts && ls scripts/*.js | xargs -I % sh -c 'terser % -o %'", "dev": "rollup -c -w", "test": "run-p lint test:all", @@ -42,14 +41,13 @@ "test:node:integration": "node ./scripts/run-node-tests.js --integration", "test:node:integration:local": "node ./scripts/run-node-tests.js --integration --local", "test:webdriver": "rollup -c test/integration/webdriver/static/rollup.config.js && node ./scripts/run-node-tests.js --webdriver", - "api-report": "api-extractor run --local --verbose && ts-node-script ../../repo-scripts/prune-dts/prune-dts.ts --input dist/auth-exp-public.d.ts --output dist/auth-exp-public.d.ts", - "predoc": "node ../../scripts/exp/remove-exp.js temp", + "api-report": "api-extractor run --local --verbose && ts-node-script ../../repo-scripts/prune-dts/prune-dts.ts --input dist/auth-public.d.ts --output dist/auth-public.d.ts", "doc": "api-documenter markdown --input temp --output docs", "build:doc": "yarn build && yarn doc", - "typings:public": "node ../../scripts/exp/use_typings.js ./dist/auth-exp-public.d.ts" + "typings:public": "node ../../scripts/exp/use_typings.js ./dist/auth-public.d.ts" }, "peerDependencies": { - "@firebase/app-exp": "0.x" + "@firebase/app": "0.x" }, "dependencies": { "@firebase/component": "0.5.5", @@ -61,7 +59,7 @@ }, "license": "Apache-2.0", "devDependencies": { - "@firebase/app-exp": "0.0.900", + "@firebase/app": "0.6.30", "@rollup/plugin-json": "4.1.0", "rollup": "2.52.2", "rollup-plugin-sourcemaps": "0.6.3", @@ -70,14 +68,14 @@ "typescript": "4.2.2" }, "repository": { - "directory": "packages-exp/auth-exp", + "directory": "packages/auth", "type": "git", "url": "https://github.com/firebase/firebase-js-sdk.git" }, "bugs": { "url": "https://github.com/firebase/firebase-js-sdk/issues" }, - "typings": "dist/auth-exp.d.ts", + "typings": "dist/auth.d.ts", "nyc": { "extension": [ ".ts" diff --git a/packages/auth/react-native/package.json b/packages/auth/react-native/package.json index f820f9bfc32..96b59c3f8f3 100644 --- a/packages/auth/react-native/package.json +++ b/packages/auth/react-native/package.json @@ -1,5 +1,5 @@ { - "name": "@firebase/auth-exp/react-native", + "name": "@firebase/auth/react-native", "description": "A React Native-specific build of the Firebase Auth JS SDK", "browser": "../dist/rn/index.js", "typings": "../dist/rn/index.rn.d.ts" diff --git a/packages/auth/rollup.config.js b/packages/auth/rollup.config.js index 09b91aecf0c..bdf095cdef0 100644 --- a/packages/auth/rollup.config.js +++ b/packages/auth/rollup.config.js @@ -15,6 +15,142 @@ * limitations under the License. */ -import { getConfig } from './rollup.config.shared'; +import strip from '@rollup/plugin-strip'; +import typescriptPlugin from 'rollup-plugin-typescript2'; +import json from '@rollup/plugin-json'; +import typescript from 'typescript'; +import pkg from './package.json'; -export default getConfig({ isReleaseBuild: false }); +const deps = Object.keys(Object.assign({}, pkg.peerDependencies, pkg.dependencies)); +/** + * ES5 Builds + */ +const es5BuildPlugins = [ + json(), + strip({ + functions: ['debugAssert.*'] + }), + typescriptPlugin({ + typescript + }) +]; + +const es5Builds = [ + /** + * Browser Builds + */ + { + input: { + index: 'index.ts', + internal: 'internal/index.ts' + }, + output: [{ dir: 'dist/esm5', format: 'esm', sourcemap: true }], + plugins: es5BuildPlugins, + external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)) + }, + /** + * Web Worker Build (compiled without DOM) + */ + { + input: 'index.webworker.ts', + output: [{ file: pkg.webworker, format: 'es', sourcemap: true }], + plugins: [ + json(), + strip({ + functions: ['debugAssert.*'] + }), + typescriptPlugin({ + typescript, + compilerOptions: { + lib: [ + // Remove dom after we figure out why navigator stuff doesn't exist + 'dom', + 'es2015', + 'webworker' + ] + } + + }) + ], + external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)) + }, + /** + * Node.js Build + */ + { + input: { + index: 'index.node.ts', + internal: 'internal/index.ts' + }, + output: [{ dir: 'dist/node', format: 'cjs', sourcemap: true }], + plugins: es5BuildPlugins, + external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)) + }, + /** + * Cordova Builds + */ + { + input: { + index: 'index.cordova.ts', + internal: 'internal/index.ts' + }, + output: [{ dir: 'dist/cordova', format: 'es', sourcemap: true }], + plugins: es5BuildPlugins, + external: id => + [...deps, 'cordova'].some(dep => id === dep || id.startsWith(`${dep}/`)) + }, + /** + * React Native Builds + */ + { + input: { + index: 'index.rn.ts', + internal: 'internal/index.ts' + }, + output: [{ dir: 'dist/rn', format: 'cjs', sourcemap: true }], + plugins: es5BuildPlugins, + external: id => + [...deps, 'react-native'].some( + dep => id === dep || id.startsWith(`${dep}/`) + ) + } +]; + +/** + * ES2017 Builds + */ +const es2017BuildPlugins = [ + json(), + strip({ + functions: ['debugAssert.*'] + }), + typescriptPlugin({ + typescript, + tsconfigOverride: { + compilerOptions: { + target: 'es2017' + } + } + }) +]; + +const es2017Builds = [ + /** + * Browser Builds + */ + { + input: { + index: 'index.ts', + internal: 'internal/index.ts' + }, + output: { + dir: 'dist/esm2017', + format: 'es', + sourcemap: true + }, + plugins: es2017BuildPlugins, + external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)) + } +]; + +export default [...es5Builds, ...es2017Builds]; diff --git a/packages/auth/rollup.config.release.js b/packages/auth/rollup.config.release.js deleted file mode 100644 index 23c611a5b21..00000000000 --- a/packages/auth/rollup.config.release.js +++ /dev/null @@ -1,20 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { getConfig } from './rollup.config.shared'; - -export default getConfig({ isReleaseBuild: true }); diff --git a/packages/auth/rollup.config.shared.js b/packages/auth/rollup.config.shared.js deleted file mode 100644 index eb127bb0e0f..00000000000 --- a/packages/auth/rollup.config.shared.js +++ /dev/null @@ -1,187 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import strip from '@rollup/plugin-strip'; -import typescriptPlugin from 'rollup-plugin-typescript2'; -import json from '@rollup/plugin-json'; -import typescript from 'typescript'; -import pkg from './package.json'; -import { importPathTransformer } from '../../scripts/exp/ts-transform-import-path'; - -const deps = [ - ...Object.keys(Object.assign({}, pkg.peerDependencies, pkg.dependencies)), - '@firebase/app' -]; - -/** - * Common plugins for all builds - */ -const commonPlugins = [ - json(), - strip({ - functions: ['debugAssert.*'] - }) -]; - -export function getConfig({ isReleaseBuild }) { - /** - * ES5 Builds - */ - const es5BuildPlugins = [ - ...commonPlugins, - getTypesScriptPlugin({ isReleaseBuild }) - ]; - - const es5Builds = [ - /** - * Browser Builds - */ - { - input: { - index: 'index.ts', - internal: 'internal/index.ts' - }, - output: [{ dir: 'dist/esm5', format: 'esm', sourcemap: true }], - plugins: es5BuildPlugins, - external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)) - }, - /** - * Web Worker Build (compiled without DOM) - */ - { - input: 'index.webworker.ts', - output: [{ file: pkg.webworker, format: 'es', sourcemap: true }], - plugins: [ - ...commonPlugins, - getTypesScriptPlugin({ - isReleaseBuild, - compilerOptions: { - lib: [ - // Remove dom after we figure out why navigator stuff doesn't exist - 'dom', - 'es2015', - 'webworker' - ] - } - }) - ], - external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)) - }, - /** - * Node.js Build - */ - { - input: { - index: 'index.node.ts', - internal: 'internal/index.ts' - }, - output: [{ dir: 'dist/node', format: 'cjs', sourcemap: true }], - plugins: es5BuildPlugins, - external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)) - }, - /** - * Cordova Builds - */ - { - input: { - index: 'index.cordova.ts', - internal: 'internal/index.ts' - }, - output: [{ dir: 'dist/cordova', format: 'es', sourcemap: true }], - plugins: es5BuildPlugins, - external: id => - [...deps, 'cordova'].some(dep => id === dep || id.startsWith(`${dep}/`)) - }, - /** - * React Native Builds - */ - { - input: { - index: 'index.rn.ts', - internal: 'internal/index.ts' - }, - output: [{ dir: 'dist/rn', format: 'cjs', sourcemap: true }], - plugins: es5BuildPlugins, - external: id => - [...deps, 'react-native'].some( - dep => id === dep || id.startsWith(`${dep}/`) - ) - } - ]; - - /** - * ES2017 Builds - */ - const es2017BuildPlugins = [ - ...commonPlugins, - getTypesScriptPlugin({ - isReleaseBuild, - compilerOptions: { target: 'es2017' } - }) - ]; - - const es2017Builds = [ - /** - * Browser Builds - */ - { - input: { - index: 'index.ts', - internal: 'internal/index.ts' - }, - output: { - dir: 'dist/esm2017', - format: 'es', - sourcemap: true - }, - plugins: es2017BuildPlugins, - external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)) - } - ]; - - const allBuilds = [...es5Builds, ...es2017Builds]; - - if (isReleaseBuild) { - for (const build of allBuilds) { - build.treeshake = { - moduleSideEffects: false - }; - } - } - - return allBuilds; -} - -function getTypesScriptPlugin({ compilerOptions, isReleaseBuild }) { - let options = { - typescript, - tsconfigOverride: { - compilerOptions - } - }; - - if (isReleaseBuild) { - options = { - ...options, - clean: true, - abortOnError: false, - transformers: [importPathTransformer] - }; - } - - return typescriptPlugin(options); -} diff --git a/packages/auth/src/api/authentication/token.test.ts b/packages/auth/src/api/authentication/token.test.ts index 6cb58abe9d8..af0ef19d762 100644 --- a/packages/auth/src/api/authentication/token.test.ts +++ b/packages/auth/src/api/authentication/token.test.ts @@ -25,7 +25,7 @@ import { testAuth, TestAuth } from '../../../test/helpers/mock_auth'; import * as fetch from '../../../test/helpers/mock_fetch'; import { ServerError } from '../errors'; import { Endpoint, requestStsToken } from './token'; -import { SDK_VERSION } from '@firebase/app-exp'; +import { SDK_VERSION } from '@firebase/app'; import { _getBrowserName } from '../../core/util/browser'; use(chaiAsPromised); diff --git a/packages/auth/src/api/index.test.ts b/packages/auth/src/api/index.test.ts index 7bbb5dd8314..990cde7cbb0 100644 --- a/packages/auth/src/api/index.test.ts +++ b/packages/auth/src/api/index.test.ts @@ -38,7 +38,7 @@ import { _addTidIfNecessary } from './'; import { ServerError } from './errors'; -import { SDK_VERSION } from '@firebase/app-exp'; +import { SDK_VERSION } from '@firebase/app'; import { _getBrowserName } from '../core/util/browser'; use(sinonChai); diff --git a/packages/auth/src/core/auth/auth_impl.test.ts b/packages/auth/src/core/auth/auth_impl.test.ts index 2799bf62719..d8b8e088381 100644 --- a/packages/auth/src/core/auth/auth_impl.test.ts +++ b/packages/auth/src/core/auth/auth_impl.test.ts @@ -20,7 +20,7 @@ import * as chaiAsPromised from 'chai-as-promised'; import * as sinon from 'sinon'; import * as sinonChai from 'sinon-chai'; -import { FirebaseApp } from '@firebase/app-exp'; +import { FirebaseApp } from '@firebase/app'; import { FirebaseError } from '@firebase/util'; import { testAuth, testUser } from '../../../test/helpers/mock_auth'; diff --git a/packages/auth/src/core/auth/auth_impl.ts b/packages/auth/src/core/auth/auth_impl.ts index b6eeedcc456..af3258a8433 100644 --- a/packages/auth/src/core/auth/auth_impl.ts +++ b/packages/auth/src/core/auth/auth_impl.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { _FirebaseService, FirebaseApp } from '@firebase/app-exp'; +import { _FirebaseService, FirebaseApp } from '@firebase/app'; import { Auth, AuthErrorMap, diff --git a/packages/auth/src/core/auth/initialize.test.ts b/packages/auth/src/core/auth/initialize.test.ts index 7226d5b5374..e1c2a6255b9 100644 --- a/packages/auth/src/core/auth/initialize.test.ts +++ b/packages/auth/src/core/auth/initialize.test.ts @@ -20,7 +20,7 @@ import { initializeApp, FirebaseApp, _FirebaseService -} from '@firebase/app-exp'; +} from '@firebase/app'; import { Auth, AuthProvider, diff --git a/packages/auth/src/core/auth/initialize.ts b/packages/auth/src/core/auth/initialize.ts index 7ac8323d9b3..c6218953508 100644 --- a/packages/auth/src/core/auth/initialize.ts +++ b/packages/auth/src/core/auth/initialize.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { _getProvider, FirebaseApp } from '@firebase/app-exp'; +import { _getProvider, FirebaseApp } from '@firebase/app'; import { deepEqual } from '@firebase/util'; import { Auth, Dependencies } from '../../model/public_types'; @@ -51,7 +51,7 @@ import { AuthImpl } from './auth_impl'; * @public */ export function initializeAuth(app: FirebaseApp, deps?: Dependencies): Auth { - const provider = _getProvider(app, 'auth-exp'); + const provider = _getProvider(app, 'auth'); if (provider.isInitialized()) { const auth = provider.getImmediate() as AuthImpl; diff --git a/packages/auth/src/core/auth/register.ts b/packages/auth/src/core/auth/register.ts index 7d7664d2181..dcd3f9f420c 100644 --- a/packages/auth/src/core/auth/register.ts +++ b/packages/auth/src/core/auth/register.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { _registerComponent, registerVersion } from '@firebase/app-exp'; +import { _registerComponent, registerVersion } from '@firebase/app'; import { Component, ComponentType, @@ -33,7 +33,7 @@ import { Dependencies } from '../../model/public_types'; import { _initializeAuthInstance } from './initialize'; export const enum _ComponentName { - AUTH = 'auth-exp', + AUTH = 'auth', AUTH_INTERNAL = 'auth-internal' } @@ -60,7 +60,7 @@ export function registerAuth(clientPlatform: ClientPlatform): void { new Component( _ComponentName.AUTH, (container, { options: deps }: { options?: Dependencies }) => { - const app = container.getProvider('app-exp').getImmediate()!; + const app = container.getProvider('app').getImmediate()!; const { apiKey, authDomain } = app.options; return (app => { _assert( diff --git a/packages/auth/src/core/util/handler.ts b/packages/auth/src/core/util/handler.ts index ce8935b0c99..4d21b6cdd7b 100644 --- a/packages/auth/src/core/util/handler.ts +++ b/packages/auth/src/core/util/handler.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { SDK_VERSION } from '@firebase/app-exp'; +import { SDK_VERSION } from '@firebase/app'; import { AuthProvider } from '../../model/public_types'; import { ApiKey, AppName, AuthInternal } from '../../model/auth'; import { AuthEventType } from '../../model/popup_redirect'; diff --git a/packages/auth/src/core/util/log.ts b/packages/auth/src/core/util/log.ts index c0d6d85ef7a..649c35d4317 100644 --- a/packages/auth/src/core/util/log.ts +++ b/packages/auth/src/core/util/log.ts @@ -16,11 +16,11 @@ */ import { Logger, LogLevel } from '@firebase/logger'; -import { SDK_VERSION } from '@firebase/app-exp'; +import { SDK_VERSION } from '@firebase/app'; export { LogLevel }; -const logClient = new Logger('@firebase/auth-exp'); +const logClient = new Logger('@firebase/auth'); // Helper methods are needed because variables can't be exported as read/write export function _getLogLevel(): LogLevel { diff --git a/packages/auth/src/core/util/version.test.ts b/packages/auth/src/core/util/version.test.ts index 58228732844..0dccb5a98b3 100644 --- a/packages/auth/src/core/util/version.test.ts +++ b/packages/auth/src/core/util/version.test.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { SDK_VERSION } from '@firebase/app-exp'; +import { SDK_VERSION } from '@firebase/app'; import { expect } from 'chai'; import { ClientPlatform, _getClientVersion } from './version'; import { isNode } from '@firebase/util'; diff --git a/packages/auth/src/core/util/version.ts b/packages/auth/src/core/util/version.ts index e8aecd48f17..d8345dadc91 100644 --- a/packages/auth/src/core/util/version.ts +++ b/packages/auth/src/core/util/version.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { SDK_VERSION } from '@firebase/app-exp'; +import { SDK_VERSION } from '@firebase/app'; import { _getBrowserName } from './browser'; import { getUA } from '@firebase/util'; diff --git a/packages/auth/src/model/public_types.ts b/packages/auth/src/model/public_types.ts index c7a24f18572..49117bbf859 100644 --- a/packages/auth/src/model/public_types.ts +++ b/packages/auth/src/model/public_types.ts @@ -1095,7 +1095,7 @@ export interface PopupRedirectResolver {} declare module '@firebase/component' { interface NameServiceMapping { - 'auth-exp': Auth; + 'auth': Auth; } } diff --git a/packages/auth/src/platform_browser/auth.test.ts b/packages/auth/src/platform_browser/auth.test.ts index 4492e13bd9a..3b33f357db2 100644 --- a/packages/auth/src/platform_browser/auth.test.ts +++ b/packages/auth/src/platform_browser/auth.test.ts @@ -20,7 +20,7 @@ import * as chaiAsPromised from 'chai-as-promised'; import * as sinon from 'sinon'; import * as sinonChai from 'sinon-chai'; -import { FirebaseApp } from '@firebase/app-exp'; +import { FirebaseApp } from '@firebase/app'; import { Auth, Persistence, diff --git a/packages/auth/src/platform_browser/iframe/iframe.test.ts b/packages/auth/src/platform_browser/iframe/iframe.test.ts index 60a2d296406..e5198e206ca 100644 --- a/packages/auth/src/platform_browser/iframe/iframe.test.ts +++ b/packages/auth/src/platform_browser/iframe/iframe.test.ts @@ -20,7 +20,7 @@ import * as chaiAsPromised from 'chai-as-promised'; import * as sinon from 'sinon'; import * as sinonChai from 'sinon-chai'; -import { SDK_VERSION } from '@firebase/app-exp'; +import { SDK_VERSION } from '@firebase/app'; import { FirebaseError } from '@firebase/util'; import { diff --git a/packages/auth/src/platform_browser/iframe/iframe.ts b/packages/auth/src/platform_browser/iframe/iframe.ts index 9e634519a81..e32615c7ece 100644 --- a/packages/auth/src/platform_browser/iframe/iframe.ts +++ b/packages/auth/src/platform_browser/iframe/iframe.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { SDK_VERSION } from '@firebase/app-exp'; +import { SDK_VERSION } from '@firebase/app'; import { querystring } from '@firebase/util'; import { DefaultConfig } from '../../../internal'; diff --git a/packages/auth/src/platform_browser/popup_redirect.test.ts b/packages/auth/src/platform_browser/popup_redirect.test.ts index 4f394572354..6159bf24052 100644 --- a/packages/auth/src/platform_browser/popup_redirect.test.ts +++ b/packages/auth/src/platform_browser/popup_redirect.test.ts @@ -20,7 +20,7 @@ import * as chaiAsPromised from 'chai-as-promised'; import * as sinon from 'sinon'; import * as sinonChai from 'sinon-chai'; -import { SDK_VERSION } from '@firebase/app-exp'; +import { SDK_VERSION } from '@firebase/app'; import { Config } from '../model/public_types'; import { ProviderId } from '../model/enums'; diff --git a/packages/auth/test/helpers/integration/helpers.ts b/packages/auth/test/helpers/integration/helpers.ts index e84a22b491b..4f9518a6717 100644 --- a/packages/auth/test/helpers/integration/helpers.ts +++ b/packages/auth/test/helpers/integration/helpers.ts @@ -16,7 +16,7 @@ */ import * as sinon from 'sinon'; -import { deleteApp, initializeApp } from '@firebase/app-exp'; +import { deleteApp, initializeApp } from '@firebase/app'; import { Auth, User } from '../../../src/model/public_types'; import { getAuth, connectAuthEmulator } from '../../../'; // Use browser OR node dist entrypoint depending on test env. diff --git a/packages/auth/test/helpers/integration/settings.ts b/packages/auth/test/helpers/integration/settings.ts index 0cbf665efc6..6a797e44a48 100644 --- a/packages/auth/test/helpers/integration/settings.ts +++ b/packages/auth/test/helpers/integration/settings.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { FirebaseOptions } from '@firebase/app-exp'; +import { FirebaseOptions } from '@firebase/app'; // __karma__ is an untyped global // eslint-disable-next-line @typescript-eslint/no-explicit-any diff --git a/packages/auth/test/helpers/mock_auth.ts b/packages/auth/test/helpers/mock_auth.ts index 76c8aee1a49..459621cd77d 100644 --- a/packages/auth/test/helpers/mock_auth.ts +++ b/packages/auth/test/helpers/mock_auth.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { FirebaseApp } from '@firebase/app-exp'; +import { FirebaseApp } from '@firebase/app'; import { PopupRedirectResolver } from '../../src/model/public_types'; import { debugErrorMap } from '../../src'; diff --git a/packages/auth/test/integration/flows/anonymous.test.ts b/packages/auth/test/integration/flows/anonymous.test.ts index 00aaea9d882..1c744b251fc 100644 --- a/packages/auth/test/integration/flows/anonymous.test.ts +++ b/packages/auth/test/integration/flows/anonymous.test.ts @@ -29,7 +29,7 @@ import { updatePassword, Auth, OperationType -} from '@firebase/auth-exp'; +} from '@firebase/auth'; import { FirebaseError } from '@firebase/util'; import { diff --git a/packages/auth/test/integration/flows/custom.local.test.ts b/packages/auth/test/integration/flows/custom.local.test.ts index 949e4f3589d..6ffbb18afc7 100644 --- a/packages/auth/test/integration/flows/custom.local.test.ts +++ b/packages/auth/test/integration/flows/custom.local.test.ts @@ -30,7 +30,7 @@ import { updateEmail, updatePassword, updateProfile -} from '@firebase/auth-exp'; +} from '@firebase/auth'; import { FirebaseError } from '@firebase/util'; import { expect, use } from 'chai'; import * as chaiAsPromised from 'chai-as-promised'; diff --git a/packages/auth/test/integration/flows/email.test.ts b/packages/auth/test/integration/flows/email.test.ts index 88bee795d6b..bb73d95c383 100644 --- a/packages/auth/test/integration/flows/email.test.ts +++ b/packages/auth/test/integration/flows/email.test.ts @@ -30,7 +30,7 @@ import { OperationType, UserCredential, getAdditionalUserInfo -} from '@firebase/auth-exp'; +} from '@firebase/auth'; import { FirebaseError } from '@firebase/util'; import { diff --git a/packages/auth/test/integration/flows/idp.local.test.ts b/packages/auth/test/integration/flows/idp.local.test.ts index 920b2030e35..9262c84c17c 100644 --- a/packages/auth/test/integration/flows/idp.local.test.ts +++ b/packages/auth/test/integration/flows/idp.local.test.ts @@ -32,7 +32,7 @@ import { updateEmail, updatePassword, updateProfile -} from '@firebase/auth-exp'; +} from '@firebase/auth'; import { FirebaseError } from '@firebase/util'; import { expect, use } from 'chai'; import * as chaiAsPromised from 'chai-as-promised'; diff --git a/packages/auth/test/integration/flows/oob.local.test.ts b/packages/auth/test/integration/flows/oob.local.test.ts index 3d3347f9d84..e7fd54a0e8b 100644 --- a/packages/auth/test/integration/flows/oob.local.test.ts +++ b/packages/auth/test/integration/flows/oob.local.test.ts @@ -40,7 +40,7 @@ import { updatePassword, verifyBeforeUpdateEmail, verifyPasswordResetCode -} from '@firebase/auth-exp'; +} from '@firebase/auth'; import { FirebaseError } from '@firebase/util'; import { expect, use } from 'chai'; import * as chaiAsPromised from 'chai-as-promised'; diff --git a/packages/auth/test/integration/flows/phone.test.ts b/packages/auth/test/integration/flows/phone.test.ts index f5095fda81c..c938964f241 100644 --- a/packages/auth/test/integration/flows/phone.test.ts +++ b/packages/auth/test/integration/flows/phone.test.ts @@ -34,7 +34,7 @@ import { UserCredential, signInWithCredential, ConfirmationResult -} from '@firebase/auth-exp'; +} from '@firebase/auth'; import { FirebaseError } from '@firebase/util'; import { diff --git a/packages/auth/test/integration/webdriver/anonymous.test.ts b/packages/auth/test/integration/webdriver/anonymous.test.ts index 8d30329dd43..7afb33533e4 100644 --- a/packages/auth/test/integration/webdriver/anonymous.test.ts +++ b/packages/auth/test/integration/webdriver/anonymous.test.ts @@ -16,7 +16,7 @@ */ // eslint-disable-next-line import/no-extraneous-dependencies -import { OperationType, UserCredential } from '@firebase/auth-exp'; +import { OperationType, UserCredential } from '@firebase/auth'; import { expect } from 'chai'; import { AnonFunction } from './util/functions'; import { browserDescribe } from './util/test_runner'; diff --git a/packages/auth/test/integration/webdriver/persistence.test.ts b/packages/auth/test/integration/webdriver/persistence.test.ts index 4b64b7a8239..3ec3f553281 100644 --- a/packages/auth/test/integration/webdriver/persistence.test.ts +++ b/packages/auth/test/integration/webdriver/persistence.test.ts @@ -16,7 +16,7 @@ */ // eslint-disable-next-line import/no-extraneous-dependencies -import { UserCredential } from '@firebase/auth-exp'; +import { UserCredential } from '@firebase/auth'; import { expect } from 'chai'; import { createAnonAccount } from '../../helpers/integration/emulator_rest_helpers'; import { API_KEY } from '../../helpers/integration/settings'; diff --git a/packages/auth/test/integration/webdriver/popup.test.ts b/packages/auth/test/integration/webdriver/popup.test.ts index 1b3146d7c5a..0ef1f0cb49d 100644 --- a/packages/auth/test/integration/webdriver/popup.test.ts +++ b/packages/auth/test/integration/webdriver/popup.test.ts @@ -21,7 +21,7 @@ import { UserCredential, User, OAuthCredential -} from '@firebase/auth-exp'; +} from '@firebase/auth'; import { expect, use } from 'chai'; import { IdPPage } from './util/idp_page'; import * as chaiAsPromised from 'chai-as-promised'; diff --git a/packages/auth/test/integration/webdriver/redirect.test.ts b/packages/auth/test/integration/webdriver/redirect.test.ts index 26dfea0269f..4124241d630 100644 --- a/packages/auth/test/integration/webdriver/redirect.test.ts +++ b/packages/auth/test/integration/webdriver/redirect.test.ts @@ -21,7 +21,7 @@ import { UserCredential, User, OAuthCredential -} from '@firebase/auth-exp'; +} from '@firebase/auth'; import { expect, use } from 'chai'; import { IdPPage } from './util/idp_page'; import * as chaiAsPromised from 'chai-as-promised'; diff --git a/packages/auth/test/integration/webdriver/static/anonymous.js b/packages/auth/test/integration/webdriver/static/anonymous.js index dbc853b6394..2b01bddbd04 100644 --- a/packages/auth/test/integration/webdriver/static/anonymous.js +++ b/packages/auth/test/integration/webdriver/static/anonymous.js @@ -15,7 +15,7 @@ * limitations under the License. */ -import { signInAnonymously } from '@firebase/auth-exp'; +import { signInAnonymously } from '@firebase/auth'; export async function anonymousSignIn() { const userCred = await signInAnonymously(auth); diff --git a/packages/auth/test/integration/webdriver/static/email.js b/packages/auth/test/integration/webdriver/static/email.js index b13bcb2924d..ab95ef5139f 100644 --- a/packages/auth/test/integration/webdriver/static/email.js +++ b/packages/auth/test/integration/webdriver/static/email.js @@ -15,7 +15,7 @@ * limitations under the License. */ -import { createUserWithEmailAndPassword } from '@firebase/auth-exp'; +import { createUserWithEmailAndPassword } from '@firebase/auth'; const TEST_PASSWORD = 'password'; diff --git a/packages/auth/test/integration/webdriver/static/index.js b/packages/auth/test/integration/webdriver/static/index.js index 92149f0fbd6..86471a6bd31 100644 --- a/packages/auth/test/integration/webdriver/static/index.js +++ b/packages/auth/test/integration/webdriver/static/index.js @@ -21,8 +21,8 @@ import * as core from './core'; import * as popup from './popup'; import * as email from './email'; import * as persistence from './persistence'; -import { initializeApp } from '@firebase/app-exp'; -import { getAuth, connectAuthEmulator } from '@firebase/auth-exp'; +import { initializeApp } from '@firebase/app'; +import { getAuth, connectAuthEmulator } from '@firebase/auth'; window.core = core; window.anonymous = anonymous; diff --git a/packages/auth/test/integration/webdriver/static/persistence.js b/packages/auth/test/integration/webdriver/static/persistence.js index d2bb4fb89b5..a89b48d0b6d 100644 --- a/packages/auth/test/integration/webdriver/static/persistence.js +++ b/packages/auth/test/integration/webdriver/static/persistence.js @@ -19,7 +19,7 @@ import { browserSessionPersistence, indexedDBLocalPersistence, inMemoryPersistence -} from '@firebase/auth-exp'; +} from '@firebase/auth'; const INDEXED_DB_NAME = 'firebaseLocalStorageDb'; diff --git a/packages/auth/test/integration/webdriver/static/popup.js b/packages/auth/test/integration/webdriver/static/popup.js index 8b06048976a..11a439dbf8c 100644 --- a/packages/auth/test/integration/webdriver/static/popup.js +++ b/packages/auth/test/integration/webdriver/static/popup.js @@ -24,7 +24,7 @@ import { reauthenticateWithPopup, signInWithCredential, signInWithPopup -} from '@firebase/auth-exp'; +} from '@firebase/auth'; // These functions are a little funky: WebDriver relies on callbacks to // pass data back to the main Node process. Because of that setup, we can't diff --git a/packages/auth/test/integration/webdriver/static/redirect.js b/packages/auth/test/integration/webdriver/static/redirect.js index 5ef2353f0b4..74ba821550f 100644 --- a/packages/auth/test/integration/webdriver/static/redirect.js +++ b/packages/auth/test/integration/webdriver/static/redirect.js @@ -25,7 +25,7 @@ import { reauthenticateWithRedirect, signInWithCredential, signInWithRedirect -} from '@firebase/auth-exp'; +} from '@firebase/auth'; let redirectCred = null; let errorCred = null; diff --git a/packages/auth/test/integration/webdriver/static/rollup.config.js b/packages/auth/test/integration/webdriver/static/rollup.config.js index d48a1208ff1..90adada6615 100644 --- a/packages/auth/test/integration/webdriver/static/rollup.config.js +++ b/packages/auth/test/integration/webdriver/static/rollup.config.js @@ -17,7 +17,7 @@ import { nodeResolve } from '@rollup/plugin-node-resolve'; -// This is run from the auth-exp package.json +// This is run from the auth package.json export default { input: ['test/integration/webdriver/static/index.js'], output: { diff --git a/packages/auth/test/integration/webdriver/util/auth_driver.ts b/packages/auth/test/integration/webdriver/util/auth_driver.ts index 639514dc4ad..9d57f91c0cf 100644 --- a/packages/auth/test/integration/webdriver/util/auth_driver.ts +++ b/packages/auth/test/integration/webdriver/util/auth_driver.ts @@ -16,7 +16,7 @@ */ // eslint-disable-next-line import/no-extraneous-dependencies -import { Auth, User, Persistence } from '@firebase/auth-exp'; +import { Auth, User, Persistence } from '@firebase/auth'; import { Builder, Condition, WebDriver } from 'selenium-webdriver'; import { resetEmulator } from '../../../helpers/integration/emulator_rest_helpers'; import { diff --git a/packages/auth/test/integration/webdriver/util/test_server.ts b/packages/auth/test/integration/webdriver/util/test_server.ts index 7d7e7ce057f..77a66e0d961 100644 --- a/packages/auth/test/integration/webdriver/util/test_server.ts +++ b/packages/auth/test/integration/webdriver/util/test_server.ts @@ -23,7 +23,7 @@ const PORT_NUMBER = '4100'; const INTEGRATION_TEST_ASSETS = express.static( path.join( - // process.env.PWD == packages-exp/auth-exp + // process.env.PWD == packages-exp/auth process.env.PWD!, 'test/integration/webdriver/static' ) From 49a7669810b6a5c2549d667ebe640010c05e9f55 Mon Sep 17 00:00:00 2001 From: Feiyang1 Date: Wed, 18 Aug 2021 16:54:53 -0700 Subject: [PATCH 07/38] migrate functions --- ...{functions-exp.api.md => functions.api.md} | 98 +++++----- packages/analytics-compat/package.json | 4 +- packages/app-check-compat/package.json | 4 +- packages/app-compat/package.json | 2 +- packages/auth-compat/package.json | 4 +- packages/firebase/package.json | 4 +- packages/firestore-compat/package.json | 45 +++++ packages/functions-compat/package.json | 11 +- .../functions-compat/rollup.config.base.js | 101 ---------- packages/functions-compat/rollup.config.js | 73 +++++++- .../functions-compat/rollup.config.release.js | 25 --- .../functions-compat/src/callable.test.ts | 6 +- packages/functions-compat/src/register.ts | 6 +- packages/functions-compat/src/service.test.ts | 2 +- packages/functions-compat/src/service.ts | 2 +- packages/functions-compat/test/utils.ts | 2 +- packages/functions-types/index.d.ts | 2 +- packages/functions/CHANGELOG.md | 173 ++++++++++++++++++ packages/functions/package.json | 14 +- packages/functions/rollup.config.js | 46 ++++- packages/functions/rollup.config.release.js | 73 -------- packages/functions/rollup.shared.js | 59 ------ packages/functions/src/api.ts | 4 +- packages/functions/src/callable.test.ts | 2 +- packages/functions/src/config.ts | 6 +- packages/functions/src/constants.ts | 2 +- packages/functions/src/index.node.ts | 2 +- packages/functions/src/index.ts | 2 +- packages/functions/src/public-types.ts | 4 +- packages/functions/src/service.ts | 2 +- packages/functions/test/utils.ts | 2 +- packages/installations-compat/package.json | 4 +- packages/messaging-compat/package.json | 2 +- packages/performance-compat/package.json | 2 +- packages/remote-config-compat/package.json | 2 +- 35 files changed, 422 insertions(+), 370 deletions(-) rename common/api-review/{functions-exp.api.md => functions.api.md} (91%) create mode 100644 packages/firestore-compat/package.json delete mode 100644 packages/functions-compat/rollup.config.base.js delete mode 100644 packages/functions-compat/rollup.config.release.js create mode 100644 packages/functions/CHANGELOG.md delete mode 100644 packages/functions/rollup.config.release.js delete mode 100644 packages/functions/rollup.shared.js diff --git a/common/api-review/functions-exp.api.md b/common/api-review/functions.api.md similarity index 91% rename from common/api-review/functions-exp.api.md rename to common/api-review/functions.api.md index c10af4b0f6c..36bacc8f443 100644 --- a/common/api-review/functions-exp.api.md +++ b/common/api-review/functions.api.md @@ -1,49 +1,49 @@ -## API Report File for "@firebase/functions-exp" - -> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). - -```ts - -import { FirebaseApp } from '@firebase/app-exp'; -import { FirebaseError } from '@firebase/util'; - -// @public -export function connectFunctionsEmulator(functionsInstance: Functions, host: string, port: number): void; - -// @public -export interface Functions { - app: FirebaseApp; - customDomain: string | null; - region: string; -} - -// @public -export interface FunctionsError extends FirebaseError { - readonly code: FunctionsErrorCode; - readonly details?: unknown; -} - -// @public -export type FunctionsErrorCode = 'ok' | 'cancelled' | 'unknown' | 'invalid-argument' | 'deadline-exceeded' | 'not-found' | 'already-exists' | 'permission-denied' | 'resource-exhausted' | 'failed-precondition' | 'aborted' | 'out-of-range' | 'unimplemented' | 'internal' | 'unavailable' | 'data-loss' | 'unauthenticated'; - -// @public -export function getFunctions(app?: FirebaseApp, regionOrCustomDomain?: string): Functions; - -// @public -export type HttpsCallable = (data?: RequestData | null) => Promise>; - -// @public -export function httpsCallable(functionsInstance: Functions, name: string, options?: HttpsCallableOptions): HttpsCallable; - -// @public -export interface HttpsCallableOptions { - timeout?: number; -} - -// @public -export interface HttpsCallableResult { - readonly data: ResponseData; -} - - -``` +## API Report File for "@firebase/functions" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts + +import { FirebaseApp } from '@firebase/app'; +import { FirebaseError } from '@firebase/util'; + +// @public +export function connectFunctionsEmulator(functionsInstance: Functions, host: string, port: number): void; + +// @public +export interface Functions { + app: FirebaseApp; + customDomain: string | null; + region: string; +} + +// @public +export interface FunctionsError extends FirebaseError { + readonly code: FunctionsErrorCode; + readonly details?: unknown; +} + +// @public +export type FunctionsErrorCode = 'ok' | 'cancelled' | 'unknown' | 'invalid-argument' | 'deadline-exceeded' | 'not-found' | 'already-exists' | 'permission-denied' | 'resource-exhausted' | 'failed-precondition' | 'aborted' | 'out-of-range' | 'unimplemented' | 'internal' | 'unavailable' | 'data-loss' | 'unauthenticated'; + +// @public +export function getFunctions(app?: FirebaseApp, regionOrCustomDomain?: string): Functions; + +// @public +export type HttpsCallable = (data?: RequestData | null) => Promise>; + +// @public +export function httpsCallable(functionsInstance: Functions, name: string, options?: HttpsCallableOptions): HttpsCallable; + +// @public +export interface HttpsCallableOptions { + timeout?: number; +} + +// @public +export interface HttpsCallableResult { + readonly data: ResponseData; +} + + +``` diff --git a/packages/analytics-compat/package.json b/packages/analytics-compat/package.json index 872bb2cbb1a..8306a530d23 100644 --- a/packages/analytics-compat/package.json +++ b/packages/analytics-compat/package.json @@ -1,6 +1,6 @@ { "name": "@firebase/analytics-compat", - "version": "0.1.0", + "version": "0.0.1", "description": "", "author": "Firebase (https://firebase.google.com/)", "main": "dist/index.cjs.js", @@ -14,7 +14,7 @@ "@firebase/app-compat": "0.x" }, "devDependencies": { - "@firebase/app-compat": "0.1.0", + "@firebase/app-compat": "0.0.1", "rollup": "2.52.2", "@rollup/plugin-json": "4.1.0", "rollup-plugin-typescript2": "0.30.0", diff --git a/packages/app-check-compat/package.json b/packages/app-check-compat/package.json index 868f0517f1c..1acff8de411 100644 --- a/packages/app-check-compat/package.json +++ b/packages/app-check-compat/package.json @@ -1,6 +1,6 @@ { "name": "@firebase/app-check-compat", - "version": "0.1.0", + "version": "0.0.1", "description": "A compat App Check package for new firebase packages", "author": "Firebase (https://firebase.google.com/)", "main": "dist/index.cjs.js", @@ -33,7 +33,7 @@ }, "license": "Apache-2.0", "devDependencies": { - "@firebase/app-compat": "0.1.0", + "@firebase/app-compat": "0.0.1", "rollup": "2.52.2", "@rollup/plugin-commonjs": "17.1.0", "@rollup/plugin-json": "4.1.0", diff --git a/packages/app-compat/package.json b/packages/app-compat/package.json index bc8374486d7..0435167df80 100644 --- a/packages/app-compat/package.json +++ b/packages/app-compat/package.json @@ -1,6 +1,6 @@ { "name": "@firebase/app-compat", - "version": "0.1.0", + "version": "0.0.1", "description": "The primary entrypoint to the Firebase JS SDK", "author": "Firebase (https://firebase.google.com/)", "main": "dist/index.cjs.js", diff --git a/packages/auth-compat/package.json b/packages/auth-compat/package.json index ff7d14507f7..d68d50b5d6d 100644 --- a/packages/auth-compat/package.json +++ b/packages/auth-compat/package.json @@ -1,6 +1,6 @@ { "name": "@firebase/auth-compat", - "version": "0.1.0", + "version": "0.0.1", "description": "FirebaseAuth compatibility package that uses API style compatible with Firebase@8 and prior versions", "author": "Firebase (https://firebase.google.com/)", "main": "dist/index.node.cjs.js", @@ -41,7 +41,7 @@ }, "license": "Apache-2.0", "devDependencies": { - "@firebase/app-compat": "0.1.0", + "@firebase/app-compat": "0.0.1", "@rollup/plugin-json": "4.1.0", "rollup": "2.52.2", "rollup-plugin-replace": "2.2.0", diff --git a/packages/firebase/package.json b/packages/firebase/package.json index 4ed400872fa..0299d18c1d5 100644 --- a/packages/firebase/package.json +++ b/packages/firebase/package.json @@ -222,9 +222,9 @@ }, "dependencies": { "@firebase/analytics": "0.6.18", - "@firebase/analytics-compat": "0.1.0", + "@firebase/analytics-compat": "0.0.1", "@firebase/app": "0.6.30", - "@firebase/app-compat": "0.1.0", + "@firebase/app-compat": "0.0.1", "@firebase/app-check": "0.0.900", "@firebase/app-check-compat": "0.0.900", "@firebase/auth": "0.0.900", diff --git a/packages/firestore-compat/package.json b/packages/firestore-compat/package.json new file mode 100644 index 00000000000..b6c8c921213 --- /dev/null +++ b/packages/firestore-compat/package.json @@ -0,0 +1,45 @@ +{ + "name": "@firebase/firestore-compat", + "version": "0.0.1", + "description": "The Cloud Firestore component of the Firebase JS SDK.", + "author": "Firebase (https://firebase.google.com/)", + "main": "dist/index.node.cjs.js", + "react-native": "dist/index.rn.js", + "browser": "dist/index.esm2017.js", + "module": "dist/index.esm2017.js", + "esm5": "dist/index.esm5.js", + "scripts": { + "lint": "eslint -c .eslintrc.js '**/*.ts' --ignore-path '../../.gitignore'", + "lint:fix": "eslint --fix -c .eslintrc.js '**/*.ts' --ignore-path '../../.gitignore'", + "prettier": "prettier --write '*.js' '*.ts' '@(src|test)/**/*.ts'", + "build": "rollup -c ./rollup.config.js", + "build:console": "node tools/console.build.js", + "build:deps": "lerna run --scope @firebase/firestore-compat --include-dependencies build", + "build:release": "yarn build && yarn add-compat-overloads", + "test": "echo 'tested as part of firestore'", + "add-compat-overloads": "ts-node-script ../../scripts/exp/create-overloads.ts -i ../firestore/dist/index.d.ts -o dist/src/index.d.ts -a -r Firestore:types.FirebaseFirestore -r CollectionReference:types.CollectionReference -r DocumentReference:types.DocumentReference -r Query:types.Query -r FirebaseApp:FirebaseAppCompat --moduleToEnhance @firebase/firestore" + }, + "peerDependencies": { + "@firebase/app-compat": "0.x" + }, + "dependencies": { + "@firebase/component": "0.5.5", + "@firebase/firestore": "2.3.10", + "@firebase/util": "1.2.0", + "@firebase/firestore-types": "2.3.0", + "tslib": "^2.1.0" + }, + "devDependencies": { + "@types/eslint": "7.2.10", + "rollup": "2.52.2", + "rollup-plugin-sourcemaps": "0.6.3", + "rollup-plugin-terser": "7.0.2", + "rollup-plugin-typescript2": "0.30.0", + "@rollup/plugin-node-resolve": "11.2.0", + "ts-node": "9.1.1", + "typescript": "4.2.2" + }, + "license": "Apache-2.0", + "typings": "dist/src/index.d.ts" + } + \ No newline at end of file diff --git a/packages/functions-compat/package.json b/packages/functions-compat/package.json index e1103dccecb..dd25c048851 100644 --- a/packages/functions-compat/package.json +++ b/packages/functions-compat/package.json @@ -1,8 +1,7 @@ { "name": "@firebase/functions-compat", - "version": "0.0.900", + "version": "0.0.1", "description": "", - "private": true, "author": "Firebase (https://firebase.google.com/)", "main": "dist/index.node.cjs.js", "browser": "dist/index.esm2017.js", @@ -15,14 +14,14 @@ "@firebase/app-compat": "0.x" }, "devDependencies": { - "@firebase/app-compat": "0.1.0", + "@firebase/app-compat": "0.0.1", "rollup": "2.52.2", "@rollup/plugin-json": "4.1.0", "rollup-plugin-typescript2": "0.30.0", "typescript": "4.2.2" }, "repository": { - "directory": "packages-exp/functions-compat", + "directory": "packages/functions-compat", "type": "git", "url": "https://github.com/firebase/firebase-js-sdk.git" }, @@ -43,12 +42,12 @@ "test:browser:debug": "karma start --browsers=Chrome --auto-watch", "test:node": "TS_NODE_COMPILER_OPTIONS='{\"module\":\"commonjs\"}' nyc --reporter lcovonly -- mocha 'src/{,!(browser)/**/}*.test.ts' --file src/index.node.ts --config ../../config/mocharc.node.js", "test:emulator": "env FIREBASE_FUNCTIONS_HOST=http://localhost FIREBASE_FUNCTIONS_PORT=5005 run-p test:node", - "add-compat-overloads": "ts-node-script ../../scripts/exp/create-overloads.ts -i ../functions-exp/dist/functions-exp-public.d.ts -o dist/src/index.d.ts -a -r Functions:types.FirebaseFunctions -r FirebaseApp:FirebaseAppCompat --moduleToEnhance @firebase/functions" + "add-compat-overloads": "ts-node-script ../../scripts/exp/create-overloads.ts -i ../functions/dist/functions-public.d.ts -o dist/src/index.d.ts -a -r Functions:types.FirebaseFunctions -r FirebaseApp:FirebaseAppCompat --moduleToEnhance @firebase/functions" }, "typings": "dist/src/index.d.ts", "dependencies": { "@firebase/component": "0.5.5", - "@firebase/functions-exp": "0.0.900", + "@firebase/functions": "0.6.15", "@firebase/functions-types": "0.4.0", "@firebase/messaging-types": "0.5.0", "@firebase/util": "1.2.0", diff --git a/packages/functions-compat/rollup.config.base.js b/packages/functions-compat/rollup.config.base.js deleted file mode 100644 index a8ac2951f69..00000000000 --- a/packages/functions-compat/rollup.config.base.js +++ /dev/null @@ -1,101 +0,0 @@ -/** - * @license - * Copyright 2020 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import json from '@rollup/plugin-json'; -import typescriptPlugin from 'rollup-plugin-typescript2'; -import typescript from 'typescript'; -import pkg from './package.json'; - -const deps = [ - ...Object.keys(Object.assign({}, pkg.peerDependencies, pkg.dependencies)), - '@firebase/functions' -]; - -/** - * ES5 Builds - */ -export function getEs5Builds(additionalTypescriptPlugins = {}) { - const es5BuildPlugins = [ - typescriptPlugin({ - typescript, - abortOnError: false, - ...additionalTypescriptPlugins - }), - json() - ]; - return [ - /** - * Browser Builds - */ - { - input: 'src/index.ts', - output: [{ file: pkg.esm5, format: 'es', sourcemap: true }], - plugins: es5BuildPlugins, - external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)) - }, - /** - * Node.js Build - */ - { - input: 'src/index.node.ts', - output: [{ file: pkg.main, format: 'cjs', sourcemap: true }], - plugins: es5BuildPlugins, - external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)) - } - ]; -} - -/** - * ES2017 Builds - */ -export function getEs2017Builds(additionalTypescriptPlugins = {}) { - const es2017BuildPlugins = [ - typescriptPlugin({ - typescript, - abortOnError: false, - tsconfigOverride: { - compilerOptions: { - target: 'es2017' - } - }, - ...additionalTypescriptPlugins - }), - json({ preferConst: true }) - ]; - return [ - { - /** - * Browser Build - */ - input: 'src/index.ts', - output: { - file: pkg.browser, - format: 'es', - sourcemap: true - }, - plugins: es2017BuildPlugins, - external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)) - } - ]; -} - -export function getAllBuilds(additionalTypescriptPlugins = {}) { - return [ - ...getEs5Builds(additionalTypescriptPlugins), - ...getEs2017Builds(additionalTypescriptPlugins) - ]; -} diff --git a/packages/functions-compat/rollup.config.js b/packages/functions-compat/rollup.config.js index 7746175a9a6..36b263979d5 100644 --- a/packages/functions-compat/rollup.config.js +++ b/packages/functions-compat/rollup.config.js @@ -15,7 +15,74 @@ * limitations under the License. */ -import { getAllBuilds } from './rollup.config.base'; +import json from '@rollup/plugin-json'; +import typescriptPlugin from 'rollup-plugin-typescript2'; +import typescript from 'typescript'; +import pkg from './package.json'; -// eslint-disable-next-line import/no-default-export -export default getAllBuilds({}); +const deps = Object.keys(Object.assign({}, pkg.peerDependencies, pkg.dependencies)); + +/** + * ES5 Builds + */ +const es5BuildPlugins = [ + typescriptPlugin({ + typescript + }), + json() +]; +const es5Builds = [ + /** + * Browser Builds + */ + { + input: 'src/index.ts', + output: [{ file: pkg.esm5, format: 'es', sourcemap: true }], + plugins: es5BuildPlugins, + external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)) + }, + /** + * Node.js Build + */ + { + input: 'src/index.node.ts', + output: [{ file: pkg.main, format: 'cjs', sourcemap: true }], + plugins: es5BuildPlugins, + external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)) + } +]; + +/** + * ES2017 Builds + */ +const es2017BuildPlugins = [ + typescriptPlugin({ + typescript, + tsconfigOverride: { + compilerOptions: { + target: 'es2017' + } + } + }), + json({ preferConst: true }) +]; +const es2017Builds = [ + { + /** + * Browser Build + */ + input: 'src/index.ts', + output: { + file: pkg.browser, + format: 'es', + sourcemap: true + }, + plugins: es2017BuildPlugins, + external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)) + } +]; + +export default [ + ...es5Builds, + ...es2017Builds +]; diff --git a/packages/functions-compat/rollup.config.release.js b/packages/functions-compat/rollup.config.release.js deleted file mode 100644 index d364683678a..00000000000 --- a/packages/functions-compat/rollup.config.release.js +++ /dev/null @@ -1,25 +0,0 @@ -/** - * @license - * Copyright 2020 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { importPathTransformer } from '../../scripts/exp/ts-transform-import-path'; -import { getAllBuilds } from './rollup.config.base'; - -// eslint-disable-next-line import/no-default-export -export default getAllBuilds({ - clean: true, - transformers: [importPathTransformer] -}); diff --git a/packages/functions-compat/src/callable.test.ts b/packages/functions-compat/src/callable.test.ts index 248cae71c3e..bd7f70b9e98 100644 --- a/packages/functions-compat/src/callable.test.ts +++ b/packages/functions-compat/src/callable.test.ts @@ -15,7 +15,7 @@ * limitations under the License. */ import { expect } from 'chai'; -import { FunctionsErrorCode } from '@firebase/functions-exp'; +import { FunctionsErrorCode } from '@firebase/functions'; import { createTestService } from '../test/utils'; import { firebase, FirebaseApp } from '@firebase/app-compat'; @@ -35,8 +35,8 @@ async function expectError( await promise; } catch (e) { failed = true; - // Errors coming from callable functions usually have the functions-exp - // code in the message since it's thrown inside functions-exp. + // Errors coming from callable functions usually have the functions + // code in the message since it's thrown inside functions. expect(e.code).to.match(new RegExp(`functions.*/${code}`)); expect(e.message).to.equal(message); expect(e.details).to.deep.equal(details); diff --git a/packages/functions-compat/src/register.ts b/packages/functions-compat/src/register.ts index 70b3ab63a3c..2e844ee7d9a 100644 --- a/packages/functions-compat/src/register.ts +++ b/packages/functions-compat/src/register.ts @@ -27,7 +27,7 @@ import { ComponentContainer, InstanceFactoryOptions } from '@firebase/component'; -import { Functions as FunctionsServiceExp } from '@firebase/functions-exp'; +import { Functions as FunctionsServiceExp } from '@firebase/functions'; const DEFAULT_REGION = 'us-central1'; @@ -35,7 +35,7 @@ declare module '@firebase/component' { interface NameServiceMapping { 'app-compat': FirebaseApp; 'functions-compat': FunctionsService; - 'functions-exp': FunctionsServiceExp; + 'functions': FunctionsServiceExp; } } @@ -46,7 +46,7 @@ const factory: InstanceFactory<'functions-compat'> = ( // Dependencies const app = container.getProvider('app-compat').getImmediate(); const functionsServiceExp = container - .getProvider('functions-exp') + .getProvider('functions') .getImmediate({ identifier: regionOrCustomDomain ?? DEFAULT_REGION }); diff --git a/packages/functions-compat/src/service.test.ts b/packages/functions-compat/src/service.test.ts index 04c26d6950a..4ff312dd246 100644 --- a/packages/functions-compat/src/service.test.ts +++ b/packages/functions-compat/src/service.test.ts @@ -18,7 +18,7 @@ import { expect, use } from 'chai'; import { createTestService } from '../test/utils'; import { FunctionsService } from './service'; import { firebase, FirebaseApp } from '@firebase/app-compat'; -import * as functionsExp from '@firebase/functions-exp'; +import * as functionsExp from '@firebase/functions'; import { stub, match, SinonStub } from 'sinon'; import * as sinonChai from 'sinon-chai'; diff --git a/packages/functions-compat/src/service.ts b/packages/functions-compat/src/service.ts index 5921dd60e84..b7a5a7d67dc 100644 --- a/packages/functions-compat/src/service.ts +++ b/packages/functions-compat/src/service.ts @@ -21,7 +21,7 @@ import { connectFunctionsEmulator as useFunctionsEmulatorExp, HttpsCallableOptions, Functions as FunctionsServiceExp -} from '@firebase/functions-exp'; +} from '@firebase/functions'; import { FirebaseApp, _FirebaseService } from '@firebase/app-compat'; import { FirebaseError } from '@firebase/util'; diff --git a/packages/functions-compat/test/utils.ts b/packages/functions-compat/test/utils.ts index 8d4bac907c8..212f5204853 100644 --- a/packages/functions-compat/test/utils.ts +++ b/packages/functions-compat/test/utils.ts @@ -17,7 +17,7 @@ import { FirebaseApp } from '@firebase/app-compat'; import { FunctionsService } from '../src/service'; -import { getFunctions } from '@firebase/functions-exp'; +import { getFunctions } from '@firebase/functions'; export function createTestService( app: FirebaseApp, diff --git a/packages/functions-types/index.d.ts b/packages/functions-types/index.d.ts index 073821f8d52..4d1770377d3 100644 --- a/packages/functions-types/index.d.ts +++ b/packages/functions-types/index.d.ts @@ -147,6 +147,6 @@ export interface HttpsError extends Error { declare module '@firebase/component' { interface NameServiceMapping { - 'functions': FirebaseFunctions; + 'functions-compat': FirebaseFunctions; } } diff --git a/packages/functions/CHANGELOG.md b/packages/functions/CHANGELOG.md new file mode 100644 index 00000000000..da04ae394b2 --- /dev/null +++ b/packages/functions/CHANGELOG.md @@ -0,0 +1,173 @@ +# @firebase/functions + +## 0.6.14 + +### Patch Changes + +- Updated dependencies []: + - @firebase/component@0.5.5 + +## 0.6.13 + +### Patch Changes + +- Updated dependencies [[`56a6a9d4a`](https://github.com/firebase/firebase-js-sdk/commit/56a6a9d4af2766154584a0f66d3c4d8024d74ba5)]: + - @firebase/component@0.5.4 + +## 0.6.12 + +### Patch Changes + +- Updated dependencies [[`725ab4684`](https://github.com/firebase/firebase-js-sdk/commit/725ab4684ef0999a12f71e704c204a00fb030e5d)]: + - @firebase/component@0.5.3 + +## 0.6.11 + +### Patch Changes + +- Updated dependencies [[`4c4b6aed9`](https://github.com/firebase/firebase-js-sdk/commit/4c4b6aed9757c9a7e75fb698a15e53274f93880b)]: + - @firebase/component@0.5.2 + +## 0.6.10 + +### Patch Changes + +- [`92e4e8d29`](https://github.com/firebase/firebase-js-sdk/commit/92e4e8d2996c690837a203a868b0d26bf6e3ad84) [#4887](https://github.com/firebase/firebase-js-sdk/pull/4887) (fixes [#683](https://github.com/firebase/firebase-js-sdk/issues/683)) - Fix functions to convert Date objects to an ISO string instead of an empty object. + +- Updated dependencies [[`5fbc5fb01`](https://github.com/firebase/firebase-js-sdk/commit/5fbc5fb0140d7da980fd7ebbfbae810f8c64ae19)]: + - @firebase/component@0.5.1 + +## 0.6.9 + +### Patch Changes + +- [`997040ace`](https://github.com/firebase/firebase-js-sdk/commit/997040ace70de0891c9dea78b6da89e4886163b9) [#4924](https://github.com/firebase/firebase-js-sdk/pull/4924) - Fixed a bug in `httpsCallable()` when used in the same project as Firebase Messaging. + +## 0.6.8 + +### Patch Changes + +- Updated dependencies [[`c34ac7a92`](https://github.com/firebase/firebase-js-sdk/commit/c34ac7a92a616915f38d192654db7770d81747ae)]: + - @firebase/component@0.5.0 + +## 0.6.7 + +### Patch Changes + +- Updated dependencies []: + - @firebase/component@0.4.1 + +## 0.6.6 + +### Patch Changes + +- Updated dependencies [[`f24d8961b`](https://github.com/firebase/firebase-js-sdk/commit/f24d8961b3b87821413297688803fc85113086b3)]: + - @firebase/component@0.4.0 + +## 0.6.5 + +### Patch Changes + +- Updated dependencies []: + - @firebase/component@0.3.1 + +## 0.6.4 + +### Patch Changes + +- [`5c1a83ed7`](https://github.com/firebase/firebase-js-sdk/commit/5c1a83ed70bae979322bd8751c0885d683ce4bf3) [#4595](https://github.com/firebase/firebase-js-sdk/pull/4595) - Component facotry now takes an options object. And added `Provider.initialize()` that can be used to pass an options object to the component factory. + +- Updated dependencies [[`5c1a83ed7`](https://github.com/firebase/firebase-js-sdk/commit/5c1a83ed70bae979322bd8751c0885d683ce4bf3)]: + - @firebase/component@0.3.0 + +## 0.6.3 + +### Patch Changes + +- Updated dependencies []: + - @firebase/component@0.2.1 + +## 0.6.2 + +### Patch Changes + +- Updated dependencies [[`6afe42613`](https://github.com/firebase/firebase-js-sdk/commit/6afe42613ed3d7a842d378dc1a09a795811db2ac)]: + - @firebase/component@0.2.0 + +## 0.6.1 + +### Patch Changes + +- Updated dependencies []: + - @firebase/component@0.1.21 + +## 0.6.0 + +### Minor Changes + +- [`0322c1bda`](https://github.com/firebase/firebase-js-sdk/commit/0322c1bda93b2885b995e3df2b63b48314546961) [#3906](https://github.com/firebase/firebase-js-sdk/pull/3906) - Add a useEmulator(host, port) method to Cloud Functions + +### Patch Changes + +- [`a5768b0aa`](https://github.com/firebase/firebase-js-sdk/commit/a5768b0aa7d7ce732279931aa436e988c9f36487) [#3932](https://github.com/firebase/firebase-js-sdk/pull/3932) - Point browser field to esm build. Now you need to use default import instead of namespace import to import firebase. + + Before this change + + ``` + import * as firebase from 'firebase/app'; + ``` + + After this change + + ``` + import firebase from 'firebase/app'; + ``` + +- Updated dependencies [[`a5768b0aa`](https://github.com/firebase/firebase-js-sdk/commit/a5768b0aa7d7ce732279931aa436e988c9f36487), [`0322c1bda`](https://github.com/firebase/firebase-js-sdk/commit/0322c1bda93b2885b995e3df2b63b48314546961)]: + - @firebase/component@0.1.20 + - @firebase/functions-types@0.4.0 + +## 0.5.1 + +### Patch Changes + +- [`b6b1fd95c`](https://github.com/firebase/firebase-js-sdk/commit/b6b1fd95cbeeabc38daa574ce7cf0b7dd34cf550) - Fixes a bug introduced in #3782 that causes callable functions to throw an error in browser extensions. + +## 0.5.0 + +### Minor Changes + +- [`a6af7c279`](https://github.com/firebase/firebase-js-sdk/commit/a6af7c27925da47fa62ee3b7b0a267a272c52220) [#3825](https://github.com/firebase/firebase-js-sdk/pull/3825) - Allow setting a custom domain for callable Cloud Functions. + +## 0.4.51 + +### Patch Changes + +- Updated dependencies [[`da1c7df79`](https://github.com/firebase/firebase-js-sdk/commit/da1c7df7982b08bbef82fcc8d93255f3e2d23cca)]: + - @firebase/component@0.1.19 + +## 0.4.50 + +### Patch Changes + +- Updated dependencies [[`29327b21`](https://github.com/firebase/firebase-js-sdk/commit/29327b2198391a9f1e545bcd1172a4b3e12a522c)]: + - @firebase/messaging-types@0.5.0 + - @firebase/component@0.1.18 + +## 0.4.49 + +### Patch Changes + +- Updated dependencies []: + - @firebase/component@0.1.17 + +## 0.4.48 + +### Patch Changes + +- [`a754645e`](https://github.com/firebase/firebase-js-sdk/commit/a754645ec2be1b8c205f25f510196eee298b0d6e) [#3297](https://github.com/firebase/firebase-js-sdk/pull/3297) Thanks [@renovate](https://github.com/apps/renovate)! - Update dependency typescript to v3.9.5 + +* [`bb740836`](https://github.com/firebase/firebase-js-sdk/commit/bb7408361519aa9a58c8256ae01914cf2830e118) [#3330](https://github.com/firebase/firebase-js-sdk/pull/3330) Thanks [@Feiyang1](https://github.com/Feiyang1)! - Clear timeout after a successful response or after the request is canceled. Fixes [issue 3289](https://github.com/firebase/firebase-js-sdk/issues/3289). + +* Updated dependencies [[`a754645e`](https://github.com/firebase/firebase-js-sdk/commit/a754645ec2be1b8c205f25f510196eee298b0d6e)]: + - @firebase/component@0.1.16 diff --git a/packages/functions/package.json b/packages/functions/package.json index 4895d7babaa..11e610334b7 100644 --- a/packages/functions/package.json +++ b/packages/functions/package.json @@ -1,8 +1,7 @@ { - "name": "@firebase/functions-exp", - "version": "0.0.900", + "name": "@firebase/functions", + "version": "0.6.15", "description": "", - "private": true, "author": "Firebase (https://firebase.google.com/)", "main": "dist/index.node.cjs.js", "browser": "dist/index.esm2017.js", @@ -14,7 +13,7 @@ "lint": "eslint -c .eslintrc.js '**/*.ts' --ignore-path '../../.gitignore'", "lint:fix": "eslint --fix -c .eslintrc.js '**/*.ts' --ignore-path '../../.gitignore'", "build": "rollup -c && yarn api-report", - "build:deps": "lerna run --scope @firebase/functions-exp --include-dependencies build", + "build:deps": "lerna run --scope @firebase/functions --include-dependencies build", "build:release": "rollup -c rollup.config.release.js && yarn api-report", "dev": "rollup -c -w", "test": "run-p lint test:all", @@ -25,16 +24,15 @@ "test:node": "TS_NODE_COMPILER_OPTIONS='{\"module\":\"commonjs\"}' nyc --reporter lcovonly -- mocha 'src/{,!(browser)/**/}*.test.ts' --file src/index.node.ts --config ../../config/mocharc.node.js", "test:emulator": "env FIREBASE_FUNCTIONS_EMULATOR_ORIGIN=http://localhost:5005 run-p test:node", "api-report": "api-extractor run --local --verbose", - "predoc": "node ../../scripts/exp/remove-exp.js temp", "doc": "api-documenter markdown --input temp --output docs", "build:doc": "yarn build && yarn doc" }, "license": "Apache-2.0", "peerDependencies": { - "@firebase/app-exp": "0.x" + "@firebase/app": "0.x" }, "devDependencies": { - "@firebase/app-exp": "0.0.900", + "@firebase/app": "0.6.30", "rollup": "2.52.2", "@rollup/plugin-json": "4.1.0", "rollup-plugin-typescript2": "0.30.0", @@ -48,7 +46,7 @@ "bugs": { "url": "https://github.com/firebase/firebase-js-sdk/issues" }, - "typings": "dist/functions-exp-public.d.ts", + "typings": "dist/functions-public.d.ts", "dependencies": { "@firebase/component": "0.5.5", "@firebase/messaging-types": "0.5.0", diff --git a/packages/functions/rollup.config.js b/packages/functions/rollup.config.js index 63db899d25f..be5093746ea 100644 --- a/packages/functions/rollup.config.js +++ b/packages/functions/rollup.config.js @@ -18,8 +18,9 @@ import json from '@rollup/plugin-json'; import typescriptPlugin from 'rollup-plugin-typescript2'; import typescript from 'typescript'; -import { es2017BuildsNoPlugin, es5BuildsNoPlugin } from './rollup.shared'; +import pkg from './package.json'; +const deps = Object.keys(Object.assign({}, pkg.peerDependencies, pkg.dependencies)); /** * ES5 Builds */ @@ -30,10 +31,26 @@ const es5BuildPlugins = [ json() ]; -const es5Builds = es5BuildsNoPlugin.map(build => ({ - ...build, - plugins: es5BuildPlugins -})); +const es5Builds = [ + /** + * Browser Builds + */ + { + input: 'src/index.ts', + output: [{ file: pkg.esm5, format: 'es', sourcemap: true }], + external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)), + plugins: es5BuildPlugins + }, + /** + * Node.js Build + */ + { + input: 'src/index.node.ts', + output: [{ file: pkg.main, format: 'cjs', sourcemap: true }], + external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)), + plugins: es5BuildPlugins + } +]; /** * ES2017 Builds @@ -50,9 +67,20 @@ const es2017BuildPlugins = [ json({ preferConst: true }) ]; -const es2017Builds = es2017BuildsNoPlugin.map(build => ({ - ...build, - plugins: es2017BuildPlugins -})); +const es2017Builds = [ + { + /** + * Browser Build + */ + input: 'src/index.ts', + output: { + file: pkg.browser, + format: 'es', + sourcemap: true + }, + external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)), + plugins: es2017BuildPlugins + } +]; export default [...es5Builds, ...es2017Builds]; diff --git a/packages/functions/rollup.config.release.js b/packages/functions/rollup.config.release.js deleted file mode 100644 index 1e3b338e4b5..00000000000 --- a/packages/functions/rollup.config.release.js +++ /dev/null @@ -1,73 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import typescriptPlugin from 'rollup-plugin-typescript2'; -import typescript from 'typescript'; -import json from '@rollup/plugin-json'; -import { importPathTransformer } from '../../scripts/exp/ts-transform-import-path'; -import { es2017BuildsNoPlugin, es5BuildsNoPlugin } from './rollup.shared'; - -/** - * ES5 Builds - */ -const es5BuildPlugins = [ - typescriptPlugin({ - typescript, - clean: true, - abortOnError: false, - transformers: [importPathTransformer] - }), - json() -]; - -const es5Builds = es5BuildsNoPlugin.map(build => ({ - ...build, - plugins: es5BuildPlugins, - treeshake: { - moduleSideEffects: false - } -})); - -/** - * ES2017 Builds - */ -const es2017BuildPlugins = [ - typescriptPlugin({ - typescript, - tsconfigOverride: { - compilerOptions: { - target: 'es2017' - } - }, - abortOnError: false, - clean: true, - transformers: [importPathTransformer] - }), - json({ - preferConst: true - }) -]; - -const es2017Builds = es2017BuildsNoPlugin.map(build => ({ - ...build, - plugins: es2017BuildPlugins, - treeshake: { - moduleSideEffects: false - } -})); - -export default [...es5Builds, ...es2017Builds]; diff --git a/packages/functions/rollup.shared.js b/packages/functions/rollup.shared.js deleted file mode 100644 index 15d16f45300..00000000000 --- a/packages/functions/rollup.shared.js +++ /dev/null @@ -1,59 +0,0 @@ -/** - * @license - * Copyright 2018 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import pkg from './package.json'; - -const deps = [ - ...Object.keys(Object.assign({}, pkg.peerDependencies, pkg.dependencies)), - '@firebase/app' -]; - -export const es5BuildsNoPlugin = [ - /** - * Browser Builds - */ - { - input: 'src/index.ts', - output: [{ file: pkg.esm5, format: 'es', sourcemap: true }], - external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)) - }, - /** - * Node.js Build - */ - { - input: 'src/index.node.ts', - output: [{ file: pkg.main, format: 'cjs', sourcemap: true }], - external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)) - } -]; - -/** - * ES2017 Builds - */ -export const es2017BuildsNoPlugin = [ - { - /** - * Browser Build - */ - input: 'src/index.ts', - output: { - file: pkg.browser, - format: 'es', - sourcemap: true - }, - external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)) - } -]; diff --git a/packages/functions/src/api.ts b/packages/functions/src/api.ts index a1f91b48a7f..008d541b059 100644 --- a/packages/functions/src/api.ts +++ b/packages/functions/src/api.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { _getProvider, FirebaseApp, getApp } from '@firebase/app-exp'; +import { _getProvider, FirebaseApp, getApp } from '@firebase/app'; import { FUNCTIONS_TYPE } from './constants'; import { Provider } from '@firebase/component'; @@ -43,7 +43,7 @@ export function getFunctions( regionOrCustomDomain: string = DEFAULT_REGION ): Functions { // Dependencies - const functionsProvider: Provider<'functions-exp'> = _getProvider( + const functionsProvider: Provider<'functions'> = _getProvider( getModularInstance(app), FUNCTIONS_TYPE ); diff --git a/packages/functions/src/callable.test.ts b/packages/functions/src/callable.test.ts index c1128198470..1ba185dd7f3 100644 --- a/packages/functions/src/callable.test.ts +++ b/packages/functions/src/callable.test.ts @@ -16,7 +16,7 @@ */ import { expect } from 'chai'; import * as sinon from 'sinon'; -import { FirebaseApp } from '@firebase/app-exp'; +import { FirebaseApp } from '@firebase/app'; import { FunctionsErrorCode } from './public-types'; import { Provider, diff --git a/packages/functions/src/config.ts b/packages/functions/src/config.ts index 12a5be4104b..31f607eee93 100644 --- a/packages/functions/src/config.ts +++ b/packages/functions/src/config.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { _registerComponent } from '@firebase/app-exp'; +import { _registerComponent } from '@firebase/app'; import { FunctionsService } from './service'; import { Component, @@ -29,12 +29,12 @@ import { AppCheckInternalComponentName } from '@firebase/app-check-interop-types const APP_CHECK_INTERNAL_NAME: AppCheckInternalComponentName = 'app-check-internal'; export function registerFunctions(fetchImpl: typeof fetch): void { - const factory: InstanceFactory<'functions-exp'> = ( + const factory: InstanceFactory<'functions'> = ( container: ComponentContainer, { instanceIdentifier: regionOrCustomDomain } ) => { // Dependencies - const app = container.getProvider('app-exp').getImmediate(); + const app = container.getProvider('app').getImmediate(); const authProvider = container.getProvider('auth-internal'); const messagingProvider = container.getProvider('messaging'); const appCheckProvider = container.getProvider(APP_CHECK_INTERNAL_NAME); diff --git a/packages/functions/src/constants.ts b/packages/functions/src/constants.ts index 18e029bfd03..bbb08917fe9 100644 --- a/packages/functions/src/constants.ts +++ b/packages/functions/src/constants.ts @@ -18,4 +18,4 @@ /** * Type constant for Firebase Functions. */ -export const FUNCTIONS_TYPE = 'functions-exp'; +export const FUNCTIONS_TYPE = 'functions'; diff --git a/packages/functions/src/index.node.ts b/packages/functions/src/index.node.ts index 5955172f350..1fa51c408d7 100644 --- a/packages/functions/src/index.node.ts +++ b/packages/functions/src/index.node.ts @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { registerVersion } from '@firebase/app-exp'; +import { registerVersion } from '@firebase/app'; import { registerFunctions } from './config'; import nodeFetch from 'node-fetch'; diff --git a/packages/functions/src/index.ts b/packages/functions/src/index.ts index 903974e84a2..73033878485 100644 --- a/packages/functions/src/index.ts +++ b/packages/functions/src/index.ts @@ -20,7 +20,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { registerVersion } from '@firebase/app-exp'; +import { registerVersion } from '@firebase/app'; import { registerFunctions } from './config'; import { name, version } from '../package.json'; diff --git a/packages/functions/src/public-types.ts b/packages/functions/src/public-types.ts index 5fe37052c06..675c0133ddb 100644 --- a/packages/functions/src/public-types.ts +++ b/packages/functions/src/public-types.ts @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { FirebaseApp } from '@firebase/app-exp'; +import { FirebaseApp } from '@firebase/app'; import { FirebaseError } from '@firebase/util'; /** @@ -150,6 +150,6 @@ export interface FunctionsError extends FirebaseError { declare module '@firebase/component' { interface NameServiceMapping { - 'functions-exp': Functions; + 'functions': Functions; } } diff --git a/packages/functions/src/service.ts b/packages/functions/src/service.ts index 980371c35a1..d777d114353 100644 --- a/packages/functions/src/service.ts +++ b/packages/functions/src/service.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { FirebaseApp, _FirebaseService } from '@firebase/app-exp'; +import { FirebaseApp, _FirebaseService } from '@firebase/app'; import { HttpsCallable, HttpsCallableResult, diff --git a/packages/functions/test/utils.ts b/packages/functions/test/utils.ts index 18368efb092..9212c9722d9 100644 --- a/packages/functions/test/utils.ts +++ b/packages/functions/test/utils.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { FirebaseOptions, FirebaseApp } from '@firebase/app-exp'; +import { FirebaseOptions, FirebaseApp } from '@firebase/app'; import { Provider, ComponentContainer } from '@firebase/component'; import { FirebaseAuthInternalName } from '@firebase/auth-interop-types'; import { FirebaseMessagingName } from '@firebase/messaging-types'; diff --git a/packages/installations-compat/package.json b/packages/installations-compat/package.json index 65dde3a48bf..47dd83ef505 100644 --- a/packages/installations-compat/package.json +++ b/packages/installations-compat/package.json @@ -1,6 +1,6 @@ { "name": "@firebase/installations-compat", - "version": "0.1.0", + "version": "0.0.1", "author": "Firebase (https://firebase.google.com/)", "main": "dist/index.cjs.js", "module": "dist/index.esm2017.js", @@ -35,7 +35,7 @@ "url": "https://github.com/firebase/firebase-js-sdk/issues" }, "devDependencies": { - "@firebase/app-compat": "0.1.0", + "@firebase/app-compat": "0.0.1", "rollup": "2.52.2", "@rollup/plugin-commonjs": "17.1.0", "@rollup/plugin-json": "4.1.0", diff --git a/packages/messaging-compat/package.json b/packages/messaging-compat/package.json index 5c5208ecb54..37526696a3d 100644 --- a/packages/messaging-compat/package.json +++ b/packages/messaging-compat/package.json @@ -38,7 +38,7 @@ "tslib": "^2.1.0" }, "devDependencies": { - "@firebase/app-compat": "0.1.0", + "@firebase/app-compat": "0.0.1", "@rollup/plugin-json": "4.1.0", "rollup-plugin-typescript2": "0.30.0", "ts-essentials": "7.0.1", diff --git a/packages/performance-compat/package.json b/packages/performance-compat/package.json index ae4f84d5758..6d3e045e570 100644 --- a/packages/performance-compat/package.json +++ b/packages/performance-compat/package.json @@ -43,7 +43,7 @@ "rollup-plugin-replace": "2.2.0", "rollup-plugin-typescript2": "0.30.0", "typescript": "4.2.2", - "@firebase/app-compat": "0.1.0" + "@firebase/app-compat": "0.0.1" }, "repository": { "directory": "packages-exp/performance-compat", diff --git a/packages/remote-config-compat/package.json b/packages/remote-config-compat/package.json index 114dcb1333d..17bbacd193d 100644 --- a/packages/remote-config-compat/package.json +++ b/packages/remote-config-compat/package.json @@ -42,7 +42,7 @@ "rollup-plugin-replace": "2.2.0", "rollup-plugin-typescript2": "0.30.0", "typescript": "4.2.2", - "@firebase/app-compat": "0.1.0" + "@firebase/app-compat": "0.0.1" }, "repository": { "directory": "packages-exp/remote-config-compat", From 0ab9ddc4c58ef586db76d548e762c19c701d7263 Mon Sep 17 00:00:00 2001 From: Feiyang1 Date: Wed, 18 Aug 2021 17:17:00 -0700 Subject: [PATCH 08/38] migrate messaging --- ...ging-exp.sw.api.md => messaging-sw.api.md} | 24 ++- ...{messaging-exp.api.md => messaging.api.md} | 4 +- packages/analytics-compat/package.json | 4 +- packages/app-check-compat/package.json | 4 +- packages/app-compat/package.json | 2 +- packages/auth-compat/package.json | 4 +- packages/firebase/package.json | 4 +- packages/functions-compat/package.json | 4 +- packages/installations-compat/package.json | 4 +- packages/messaging-compat/package.json | 10 +- .../messaging-compat/rollup.config.release.js | 91 --------- .../messaging-compat/src/messaging-compat.ts | 4 +- .../src/registerMessagingCompat.ts | 4 +- packages/messaging-compat/test/fakes.ts | 2 +- .../test/messaging-compat.test.ts | 4 +- packages/messaging-types/index.d.ts | 2 +- packages/messaging/CHANGELOG.md | 179 ++++++++++++++++++ packages/messaging/package.json | 19 +- packages/messaging/rollup.config.release.js | 102 ---------- packages/messaging/src/api.ts | 6 +- .../src/helpers/extract-app-config.test.ts | 2 +- .../src/helpers/extract-app-config.ts | 2 +- packages/messaging/src/helpers/register.ts | 18 +- packages/messaging/src/index.sw.ts | 5 +- packages/messaging/src/index.ts | 4 +- .../src/interfaces/internal-dependencies.ts | 4 +- .../messaging/src/interfaces/public-types.ts | 2 +- packages/messaging/src/messaging-service.ts | 4 +- .../testing/fakes/firebase-dependencies.ts | 4 +- packages/messaging/sw/package.json | 2 +- packages/performance-compat/package.json | 2 +- packages/remote-config-compat/package.json | 4 +- 32 files changed, 264 insertions(+), 266 deletions(-) rename common/api-review/{messaging-exp.sw.api.md => messaging-sw.api.md} (55%) rename common/api-review/{messaging-exp.api.md => messaging.api.md} (93%) delete mode 100644 packages/messaging-compat/rollup.config.release.js create mode 100644 packages/messaging/CHANGELOG.md delete mode 100644 packages/messaging/rollup.config.release.js diff --git a/common/api-review/messaging-exp.sw.api.md b/common/api-review/messaging-sw.api.md similarity index 55% rename from common/api-review/messaging-exp.sw.api.md rename to common/api-review/messaging-sw.api.md index a0e2f9e8a8b..30c02c096da 100644 --- a/common/api-review/messaging-exp.sw.api.md +++ b/common/api-review/messaging-sw.api.md @@ -1,14 +1,17 @@ -## API Report File for "@firebase/messaging-exp/sw" +## API Report File for "@firebase/messaging-sw" > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts -import { FirebaseApp } from '@firebase/app-exp'; +import { FirebaseApp } from '@firebase/app'; import { NextFn } from '@firebase/util'; import { Observer } from '@firebase/util'; import { Unsubscribe } from '@firebase/util'; +// @public +export function experimentalSetDeliveryMetricsExportedToBigQueryEnabled(messaging: Messaging, enable: boolean): void; + // @public export interface FcmOptions { analyticsLabel?: string; @@ -16,11 +19,13 @@ export interface FcmOptions { } // @public -export interface FirebaseMessaging { -} +export function getMessaging(app?: FirebaseApp): Messaging; // @public -export function getMessaging(app?: FirebaseApp): FirebaseMessaging; +export interface GetTokenOptions { + serviceWorkerRegistration?: ServiceWorkerRegistration; + vapidKey?: string; +} // @public export function isSupported(): Promise; @@ -33,9 +38,14 @@ export interface MessagePayload { }; fcmOptions?: FcmOptions; from: string; + messageId: string; notification?: NotificationPayload; } +// @public +export interface Messaging { +} + export { NextFn } // @public @@ -48,9 +58,11 @@ export interface NotificationPayload { export { Observer } // @public -export function onBackgroundMessage(messaging: FirebaseMessaging, nextOrObserver: NextFn | Observer): Unsubscribe; +export function onBackgroundMessage(messaging: Messaging, nextOrObserver: NextFn | Observer): Unsubscribe; export { Unsubscribe } +// (No @packageDocumentation comment for this package) + ``` diff --git a/common/api-review/messaging-exp.api.md b/common/api-review/messaging.api.md similarity index 93% rename from common/api-review/messaging-exp.api.md rename to common/api-review/messaging.api.md index 85bd0b390ba..002d864c9b9 100644 --- a/common/api-review/messaging-exp.api.md +++ b/common/api-review/messaging.api.md @@ -1,10 +1,10 @@ -## API Report File for "@firebase/messaging-exp" +## API Report File for "@firebase/messaging" > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts -import { FirebaseApp } from '@firebase/app-exp'; +import { FirebaseApp } from '@firebase/app'; import { NextFn } from '@firebase/util'; import { Observer } from '@firebase/util'; import { Unsubscribe } from '@firebase/util'; diff --git a/packages/analytics-compat/package.json b/packages/analytics-compat/package.json index 8306a530d23..aefa4ce7caa 100644 --- a/packages/analytics-compat/package.json +++ b/packages/analytics-compat/package.json @@ -1,6 +1,6 @@ { "name": "@firebase/analytics-compat", - "version": "0.0.1", + "version": "0.0.900", "description": "", "author": "Firebase (https://firebase.google.com/)", "main": "dist/index.cjs.js", @@ -14,7 +14,7 @@ "@firebase/app-compat": "0.x" }, "devDependencies": { - "@firebase/app-compat": "0.0.1", + "@firebase/app-compat": "0.0.900", "rollup": "2.52.2", "@rollup/plugin-json": "4.1.0", "rollup-plugin-typescript2": "0.30.0", diff --git a/packages/app-check-compat/package.json b/packages/app-check-compat/package.json index 1acff8de411..413486eb70c 100644 --- a/packages/app-check-compat/package.json +++ b/packages/app-check-compat/package.json @@ -1,6 +1,6 @@ { "name": "@firebase/app-check-compat", - "version": "0.0.1", + "version": "0.0.900", "description": "A compat App Check package for new firebase packages", "author": "Firebase (https://firebase.google.com/)", "main": "dist/index.cjs.js", @@ -33,7 +33,7 @@ }, "license": "Apache-2.0", "devDependencies": { - "@firebase/app-compat": "0.0.1", + "@firebase/app-compat": "0.0.900", "rollup": "2.52.2", "@rollup/plugin-commonjs": "17.1.0", "@rollup/plugin-json": "4.1.0", diff --git a/packages/app-compat/package.json b/packages/app-compat/package.json index 0435167df80..3a846ed3a64 100644 --- a/packages/app-compat/package.json +++ b/packages/app-compat/package.json @@ -1,6 +1,6 @@ { "name": "@firebase/app-compat", - "version": "0.0.1", + "version": "0.0.900", "description": "The primary entrypoint to the Firebase JS SDK", "author": "Firebase (https://firebase.google.com/)", "main": "dist/index.cjs.js", diff --git a/packages/auth-compat/package.json b/packages/auth-compat/package.json index d68d50b5d6d..c8bd4afa720 100644 --- a/packages/auth-compat/package.json +++ b/packages/auth-compat/package.json @@ -1,6 +1,6 @@ { "name": "@firebase/auth-compat", - "version": "0.0.1", + "version": "0.0.900", "description": "FirebaseAuth compatibility package that uses API style compatible with Firebase@8 and prior versions", "author": "Firebase (https://firebase.google.com/)", "main": "dist/index.node.cjs.js", @@ -41,7 +41,7 @@ }, "license": "Apache-2.0", "devDependencies": { - "@firebase/app-compat": "0.0.1", + "@firebase/app-compat": "0.0.900", "@rollup/plugin-json": "4.1.0", "rollup": "2.52.2", "rollup-plugin-replace": "2.2.0", diff --git a/packages/firebase/package.json b/packages/firebase/package.json index 0299d18c1d5..8c03c7ddf26 100644 --- a/packages/firebase/package.json +++ b/packages/firebase/package.json @@ -222,9 +222,9 @@ }, "dependencies": { "@firebase/analytics": "0.6.18", - "@firebase/analytics-compat": "0.0.1", + "@firebase/analytics-compat": "0.0.900", "@firebase/app": "0.6.30", - "@firebase/app-compat": "0.0.1", + "@firebase/app-compat": "0.0.900", "@firebase/app-check": "0.0.900", "@firebase/app-check-compat": "0.0.900", "@firebase/auth": "0.0.900", diff --git a/packages/functions-compat/package.json b/packages/functions-compat/package.json index dd25c048851..2268c6eeacd 100644 --- a/packages/functions-compat/package.json +++ b/packages/functions-compat/package.json @@ -1,6 +1,6 @@ { "name": "@firebase/functions-compat", - "version": "0.0.1", + "version": "0.0.900", "description": "", "author": "Firebase (https://firebase.google.com/)", "main": "dist/index.node.cjs.js", @@ -14,7 +14,7 @@ "@firebase/app-compat": "0.x" }, "devDependencies": { - "@firebase/app-compat": "0.0.1", + "@firebase/app-compat": "0.0.900", "rollup": "2.52.2", "@rollup/plugin-json": "4.1.0", "rollup-plugin-typescript2": "0.30.0", diff --git a/packages/installations-compat/package.json b/packages/installations-compat/package.json index 47dd83ef505..21457829c26 100644 --- a/packages/installations-compat/package.json +++ b/packages/installations-compat/package.json @@ -1,6 +1,6 @@ { "name": "@firebase/installations-compat", - "version": "0.0.1", + "version": "0.0.900", "author": "Firebase (https://firebase.google.com/)", "main": "dist/index.cjs.js", "module": "dist/index.esm2017.js", @@ -35,7 +35,7 @@ "url": "https://github.com/firebase/firebase-js-sdk/issues" }, "devDependencies": { - "@firebase/app-compat": "0.0.1", + "@firebase/app-compat": "0.0.900", "rollup": "2.52.2", "@rollup/plugin-commonjs": "17.1.0", "@rollup/plugin-json": "4.1.0", diff --git a/packages/messaging-compat/package.json b/packages/messaging-compat/package.json index 37526696a3d..155ae720bee 100644 --- a/packages/messaging-compat/package.json +++ b/packages/messaging-compat/package.json @@ -3,7 +3,6 @@ "version": "0.0.900", "license": "Apache-2.0", "description": "", - "private": true, "author": "Firebase (https://firebase.google.com/)", "main": "dist/index.cjs.js", "browser": "dist/index.esm2017.js", @@ -18,27 +17,26 @@ "lint:fix": "eslint --fix -c .eslintrc.js '**/*.ts' --ignore-path '../../.gitignore'", "build": "rollup -c", "build:deps": "lerna run --scope @firebase/'messaging-compat' --include-dependencies build", - "build:release": "rollup -c rollup.config.release.js && yarn add-compat-overloads", + "build:release": "yarn build && yarn add-compat-overloads", "dev": "rollup -c -w", "test": "run-p test:karma", "test:ci": "node ../../scripts/run_tests_in_ci.js", "test:karma": "karma start --single-run", "test:debug": "karma start --browsers=Chrome --auto-watch", "type-check": "tsc --noEmit", - "add-compat-overloads": "ts-node-script ../../scripts/exp/create-overloads.ts -i ../messaging-exp/dist/index-public.d.ts -o dist/src/index.d.ts -a -r FirebaseMessaging:MessagingCompat -r FirebaseApp:FirebaseAppCompat --moduleToEnhance @firebase/messaging" + "add-compat-overloads": "ts-node-script ../../scripts/exp/create-overloads.ts -i ../messaging/dist/index-public.d.ts -o dist/src/index.d.ts -a -r FirebaseMessaging:MessagingCompat -r FirebaseApp:FirebaseAppCompat --moduleToEnhance @firebase/messaging" }, "peerDependencies": { "@firebase/app-compat": "0.x" }, "dependencies": { - "@firebase/messaging-exp": "0.0.900", + "@firebase/messaging": "0.0.900", "@firebase/component": "0.5.5", - "@firebase/installations-exp": "0.0.900", "@firebase/util": "1.2.0", "tslib": "^2.1.0" }, "devDependencies": { - "@firebase/app-compat": "0.0.1", + "@firebase/app-compat": "0.0.900", "@rollup/plugin-json": "4.1.0", "rollup-plugin-typescript2": "0.30.0", "ts-essentials": "7.0.1", diff --git a/packages/messaging-compat/rollup.config.release.js b/packages/messaging-compat/rollup.config.release.js deleted file mode 100644 index 419a0b88248..00000000000 --- a/packages/messaging-compat/rollup.config.release.js +++ /dev/null @@ -1,91 +0,0 @@ -/** - * @license - * Copyright 2020 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { importPathTransformer } from '../../scripts/exp/ts-transform-import-path'; -import json from '@rollup/plugin-json'; -import pkg from './package.json'; -import typescript from 'typescript'; -import typescriptPlugin from 'rollup-plugin-typescript2'; - -const deps = [ - ...Object.keys(Object.assign({}, pkg.peerDependencies, pkg.dependencies)), - '@firebase/app' -]; - -/** - * ES5 Builds - */ -const es5BuildPlugins = [ - typescriptPlugin({ - typescript, - clean: true, - abortOnError: false, - transformers: [importPathTransformer] - }), - json() -]; - -const es5Builds = [ - { - input: 'src/index.ts', - output: [ - { file: pkg.main, format: 'cjs', sourcemap: true }, - { file: pkg.esm5, format: 'es', sourcemap: true } - ], - plugins: es5BuildPlugins, - treeshake: { - moduleSideEffects: false - }, - external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)) - } -]; - -/** - * ES2017 Builds - */ -const es2017BuildPlugins = [ - typescriptPlugin({ - typescript, - abortOnError: false, - clean: true, - transformers: [importPathTransformer], - tsconfigOverride: { - compilerOptions: { - target: 'es2017' - } - } - }), - json({ preferConst: true }) -]; - -const es2017Builds = [ - { - input: 'src/index.ts', - output: { - file: pkg.browser, - format: 'es', - sourcemap: true - }, - plugins: es2017BuildPlugins, - treeshake: { - moduleSideEffects: false - }, - external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)) - } -]; - -export default [...es5Builds, ...es2017Builds]; diff --git a/packages/messaging-compat/src/messaging-compat.ts b/packages/messaging-compat/src/messaging-compat.ts index d3f863a4292..2910d61b341 100644 --- a/packages/messaging-compat/src/messaging-compat.ts +++ b/packages/messaging-compat/src/messaging-compat.ts @@ -25,10 +25,10 @@ import { deleteToken, getToken, onMessage -} from '@firebase/messaging-exp'; +} from '@firebase/messaging'; import { NextFn, Observer, Unsubscribe } from '@firebase/util'; -import { onBackgroundMessage } from '@firebase/messaging-exp/sw'; +import { onBackgroundMessage } from '@firebase/messaging/sw'; export interface MessagingCompat { getToken(options?: { diff --git a/packages/messaging-compat/src/registerMessagingCompat.ts b/packages/messaging-compat/src/registerMessagingCompat.ts index 0dbd5d1ceef..ab510019e6a 100644 --- a/packages/messaging-compat/src/registerMessagingCompat.ts +++ b/packages/messaging-compat/src/registerMessagingCompat.ts @@ -38,13 +38,13 @@ const messagingCompatFactory: InstanceFactory<'messaging-compat'> = ( // in window return new MessagingCompatImpl( container.getProvider('app-compat').getImmediate(), - container.getProvider('messaging-exp').getImmediate() + container.getProvider('messaging').getImmediate() ); } else { // in sw return new MessagingCompatImpl( container.getProvider('app-compat').getImmediate(), - container.getProvider('messaging-sw-exp').getImmediate() + container.getProvider('messaging-sw').getImmediate() ); } }; diff --git a/packages/messaging-compat/test/fakes.ts b/packages/messaging-compat/test/fakes.ts index 92569b1a3c5..6b8cdc555dd 100644 --- a/packages/messaging-compat/test/fakes.ts +++ b/packages/messaging-compat/test/fakes.ts @@ -16,7 +16,7 @@ */ import { FirebaseApp } from '@firebase/app-compat'; -import { Messaging } from '@firebase/messaging-exp'; +import { Messaging } from '@firebase/messaging'; export function getFakeApp(): FirebaseApp { return { diff --git a/packages/messaging-compat/test/messaging-compat.test.ts b/packages/messaging-compat/test/messaging-compat.test.ts index 9c76fe1ce10..c64fc2d033c 100644 --- a/packages/messaging-compat/test/messaging-compat.test.ts +++ b/packages/messaging-compat/test/messaging-compat.test.ts @@ -15,8 +15,8 @@ * limitations under the License. */ -import * as messagingModule from '@firebase/messaging-exp'; -import * as messagingModuleInSw from '@firebase/messaging-exp/sw'; +import * as messagingModule from '@firebase/messaging'; +import * as messagingModuleInSw from '@firebase/messaging/sw'; import { getFakeApp, getFakeModularMessaging } from './fakes'; diff --git a/packages/messaging-types/index.d.ts b/packages/messaging-types/index.d.ts index b5fbf5fcb20..a8eacc04597 100644 --- a/packages/messaging-types/index.d.ts +++ b/packages/messaging-types/index.d.ts @@ -90,6 +90,6 @@ export type FirebaseMessagingName = 'messaging'; declare module '@firebase/component' { interface NameServiceMapping { - 'messaging': FirebaseMessaging; + 'messaging-compat': FirebaseMessaging; } } diff --git a/packages/messaging/CHANGELOG.md b/packages/messaging/CHANGELOG.md new file mode 100644 index 00000000000..7695acb21dd --- /dev/null +++ b/packages/messaging/CHANGELOG.md @@ -0,0 +1,179 @@ +# @firebase/messaging + +## 0.7.15 + +### Patch Changes + +- Updated dependencies [[`a3cbe719b`](https://github.com/firebase/firebase-js-sdk/commit/a3cbe719b1bd733a5c4c15ee0d0e6388d512054c)]: + - @firebase/util@1.2.0 + - @firebase/component@0.5.5 + - @firebase/installations@0.4.31 + +## 0.7.14 + +### Patch Changes + +- Updated dependencies [[`56a6a9d4a`](https://github.com/firebase/firebase-js-sdk/commit/56a6a9d4af2766154584a0f66d3c4d8024d74ba5)]: + - @firebase/component@0.5.4 + - @firebase/installations@0.4.30 + +## 0.7.13 + +### Patch Changes + +- Updated dependencies [[`725ab4684`](https://github.com/firebase/firebase-js-sdk/commit/725ab4684ef0999a12f71e704c204a00fb030e5d)]: + - @firebase/component@0.5.3 + - @firebase/installations@0.4.29 + +## 0.7.12 + +### Patch Changes + +- Updated dependencies [[`4c4b6aed9`](https://github.com/firebase/firebase-js-sdk/commit/4c4b6aed9757c9a7e75fb698a15e53274f93880b)]: + - @firebase/component@0.5.2 + - @firebase/installations@0.4.28 + +## 0.7.11 + +### Patch Changes + +- Updated dependencies [[`5fbc5fb01`](https://github.com/firebase/firebase-js-sdk/commit/5fbc5fb0140d7da980fd7ebbfbae810f8c64ae19)]: + - @firebase/component@0.5.1 + - @firebase/installations@0.4.27 + +## 0.7.10 + +### Patch Changes + +- Updated dependencies [[`c34ac7a92`](https://github.com/firebase/firebase-js-sdk/commit/c34ac7a92a616915f38d192654db7770d81747ae), [`ac4ad08a2`](https://github.com/firebase/firebase-js-sdk/commit/ac4ad08a284397ec966e991dd388bb1fba857467)]: + - @firebase/component@0.5.0 + - @firebase/util@1.1.0 + - @firebase/installations@0.4.26 + +## 0.7.9 + +### Patch Changes + +- Updated dependencies [[`7354a0ed4`](https://github.com/firebase/firebase-js-sdk/commit/7354a0ed438f4e3df6577e4927e8c8f8f1fbbfda)]: + - @firebase/util@1.0.0 + - @firebase/component@0.4.1 + - @firebase/installations@0.4.25 + +## 0.7.8 + +### Patch Changes + +- Updated dependencies [[`f24d8961b`](https://github.com/firebase/firebase-js-sdk/commit/f24d8961b3b87821413297688803fc85113086b3)]: + - @firebase/component@0.4.0 + - @firebase/installations@0.4.24 + +## 0.7.7 + +### Patch Changes + +- Updated dependencies [[`de5f90501`](https://github.com/firebase/firebase-js-sdk/commit/de5f9050137acc9ed1490082e5aa429b5de3cb2a)]: + - @firebase/util@0.4.1 + - @firebase/component@0.3.1 + - @firebase/installations@0.4.23 + +## 0.7.6 + +### Patch Changes + +- Updated dependencies [[`5c1a83ed7`](https://github.com/firebase/firebase-js-sdk/commit/5c1a83ed70bae979322bd8751c0885d683ce4bf3)]: + - @firebase/component@0.3.0 + - @firebase/installations@0.4.22 + +## 0.7.5 + +### Patch Changes + +- Updated dependencies [[`ec95df3d0`](https://github.com/firebase/firebase-js-sdk/commit/ec95df3d07e5f091f2a7f7327e46417f64d04b4e)]: + - @firebase/util@0.4.0 + - @firebase/component@0.2.1 + - @firebase/installations@0.4.21 + +## 0.7.4 + +### Patch Changes + +- Updated dependencies [[`6afe42613`](https://github.com/firebase/firebase-js-sdk/commit/6afe42613ed3d7a842d378dc1a09a795811db2ac)]: + - @firebase/component@0.2.0 + - @firebase/installations@0.4.20 + +## 0.7.3 + +### Patch Changes + +- [`54a46f89c`](https://github.com/firebase/firebase-js-sdk/commit/54a46f89c1c45435c76412fa2ed296e986c2f6ab) [#3780](https://github.com/firebase/firebase-js-sdk/pull/3780) - Adds a timeout for `onBackgroundMessage` hook so that silent-push warnings won't show if `showNotification` is called inside the hook within 1s. + This fixes the issue where the silent-push warning is displayed along with the message shown with [ServiceWorkerRegistration.showNotification](https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerRegistration/showNotification). +- Updated dependencies [[`9cf727fcc`](https://github.com/firebase/firebase-js-sdk/commit/9cf727fcc3d049551b16ae0698ac33dc2fe45ada)]: + - @firebase/util@0.3.4 + - @firebase/component@0.1.21 + - @firebase/installations@0.4.19 + +## 0.7.2 + +### Patch Changes + +- Updated dependencies [[`a5768b0aa`](https://github.com/firebase/firebase-js-sdk/commit/a5768b0aa7d7ce732279931aa436e988c9f36487), [`7d916d905`](https://github.com/firebase/firebase-js-sdk/commit/7d916d905ba16816ac8ac7c8748c83831ff614ce)]: + - @firebase/component@0.1.20 + - @firebase/util@0.3.3 + - @firebase/installations@0.4.18 + +## 0.7.1 + +### Patch Changes + +- [`dc9892565`](https://github.com/firebase/firebase-js-sdk/commit/dc989256566b8379f475c722370ccbd8f47527c3) [#3710](https://github.com/firebase/firebase-js-sdk/pull/3710) - stops redirecting user to non-origin urls. + +- Updated dependencies [[`da1c7df79`](https://github.com/firebase/firebase-js-sdk/commit/da1c7df7982b08bbef82fcc8d93255f3e2d23cca), [`fb3b095e4`](https://github.com/firebase/firebase-js-sdk/commit/fb3b095e4b7c8f57fdb3172bc039c84576abf290)]: + - @firebase/component@0.1.19 + - @firebase/util@0.3.2 + - @firebase/installations@0.4.17 + +## 0.7.0 + +### Minor Changes + +- [`29327b21`](https://github.com/firebase/firebase-js-sdk/commit/29327b2198391a9f1e545bcd1172a4b3e12a522c) [#3234](https://github.com/firebase/firebase-js-sdk/pull/3234) - Add `getToken(options:{serviceWorkerRegistration, vapidKey})`,`onBackgroundMessage`. + Deprecate `setBackgroundMessageHandler`, `onTokenRefresh`, `useVapidKey`, `useServiceWorker`, `getToken`. + + Add Typing `MessagePayload`, `NotificationPayload`, `FcmOptions`. + +### Patch Changes + +- Updated dependencies [[`d4ca3da0`](https://github.com/firebase/firebase-js-sdk/commit/d4ca3da0a59fcea1261ba69d7eb663bba38d3089), [`29327b21`](https://github.com/firebase/firebase-js-sdk/commit/29327b2198391a9f1e545bcd1172a4b3e12a522c)]: + - @firebase/util@0.3.1 + - @firebase/messaging-types@0.5.0 + - @firebase/component@0.1.18 + - @firebase/installations@0.4.16 + +## 0.6.21 + +### Patch Changes + +- Updated dependencies [[`a87676b8`](https://github.com/firebase/firebase-js-sdk/commit/a87676b84b78ccc2f057a22eb947a5d13402949c)]: + - @firebase/util@0.3.0 + - @firebase/component@0.1.17 + - @firebase/installations@0.4.15 + +## 0.6.20 + +### Patch Changes + +- [`a754645e`](https://github.com/firebase/firebase-js-sdk/commit/a754645ec2be1b8c205f25f510196eee298b0d6e) [#3297](https://github.com/firebase/firebase-js-sdk/pull/3297) Thanks [@renovate](https://github.com/apps/renovate)! - Update dependency typescript to v3.9.5 + +* [`17c628eb`](https://github.com/firebase/firebase-js-sdk/commit/17c628eb228c21ad1d4db83fdae08d1142a2b902) [#3312](https://github.com/firebase/firebase-js-sdk/pull/3312) Thanks [@Feiyang1](https://github.com/Feiyang1)! - Fixed an issue where we try to update token for every getToken() call because we don't save the updated token in the IndexedDB. + +- [`469c8bdf`](https://github.com/firebase/firebase-js-sdk/commit/469c8bdf18c4a22e99d595a9896af2f934df20fd) [#3221](https://github.com/firebase/firebase-js-sdk/pull/3221) Thanks [@zwu52](https://github.com/zwu52)! - Added support for `onMessage` so the internal callback can work with [Subscriber](https://rxjs.dev/api/index/class/Subscriber) + +- Updated dependencies [[`a754645e`](https://github.com/firebase/firebase-js-sdk/commit/a754645ec2be1b8c205f25f510196eee298b0d6e)]: + + - @firebase/component@0.1.16 + - @firebase/installations@0.4.14 + +## 0.6.11 + +- [fixed] Fixed an issue introduced in firebase@7.7.0, when FCM switched to provide base64-encoded VAPID + key to [PushManager](https://developer.mozilla.org/en-US/docs/Web/API/PushManager) for push subscription. For backward compatibility, the SDK has switched back to using VAPID key in type [ArrayBuffer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer). diff --git a/packages/messaging/package.json b/packages/messaging/package.json index 19139a1e90d..b87a66fb3a8 100644 --- a/packages/messaging/package.json +++ b/packages/messaging/package.json @@ -1,7 +1,6 @@ { - "name": "@firebase/messaging-exp", - "private": true, - "version": "0.0.900", + "name": "@firebase/messaging", + "version": "0.8.0", "description": "", "author": "Firebase (https://firebase.google.com/)", "main": "dist/index.cjs.js", @@ -17,32 +16,34 @@ "lint": "eslint -c .eslintrc.js '**/*.ts' --ignore-path '../../.gitignore'", "lint:fix": "eslint --fix -c .eslintrc.js '**/*.ts' --ignore-path '../../.gitignore'", "build": "rollup -c && yarn api-report", - "build:deps": "lerna run --scope @firebase/'{app-exp,messaging-exp}' --include-dependencies build", - "build:release": "rollup -c rollup.config.release.js && yarn api-report && yarn typings:public", + "build:deps": "lerna run --scope @firebase/'{app,messaging}' --include-dependencies build", + "build:release": "yarn build && yarn typings:public", "dev": "rollup -c -w", "test": "run-p test:karma type-check lint ", "test:integration": "run-p test:karma type-check lint && cd ../../integration/messaging && npm run-script test", "test:ci": "node ../../scripts/run_tests_in_ci.js", "test:karma": "karma start --single-run", "test:debug": "karma start --browsers=Chrome --auto-watch", - "api-report": "yarn api-report:rollup && yarn api-report:api-json", - "api-report:rollup": "ts-node-script ../../repo-scripts/prune-dts/extract-public-api.ts --package messaging-exp --packageRoot . --typescriptDts ./dist/index.d.ts --rollupDts ./dist/private.d.ts --untrimmedRollupDts ./dist/internal.d.ts --publicDts ./dist/index-public.d.ts", + "api-report": "yarn api-report:main && yarn api-report:sw && yarn api-report:api-json", + "api-report:main": "ts-node-script ../../repo-scripts/prune-dts/extract-public-api.ts --package messaging --packageRoot . --typescriptDts ./dist/index.d.ts --rollupDts ./dist/private.d.ts --untrimmedRollupDts ./dist/internal.d.ts --publicDts ./dist/index-public.d.ts", + "api-report:sw": "ts-node-script ../../repo-scripts/prune-dts/extract-public-api.ts --package messaging-sw --packageRoot . --typescriptDts ./dist/index.sw.d.ts --rollupDts ./dist/sw/private.d.ts --untrimmedRollupDts ./dist/sw/internal.d.ts --publicDts ./dist/sw/index-public.d.ts", "api-report:api-json": "api-extractor run --local --verbose", "type-check": "tsc --noEmit", "typings:public": "node ../../scripts/exp/use_typings.js ./dist/index-public.d.ts" }, "license": "Apache-2.0", "peerDependencies": { - "@firebase/app-exp": "0.x" + "@firebase/app": "0.x" }, "dependencies": { "@firebase/component": "0.5.5", - "@firebase/installations-exp": "0.0.900", + "@firebase/installations": "0.4.32", "@firebase/util": "1.2.0", "idb": "3.0.2", "tslib": "^2.1.0" }, "devDependencies": { + "@firebase/app": "0.6.30", "@rollup/plugin-json": "4.1.0", "rollup-plugin-typescript2": "0.30.0", "ts-essentials": "7.0.1", diff --git a/packages/messaging/rollup.config.release.js b/packages/messaging/rollup.config.release.js deleted file mode 100644 index 03ccf1d097f..00000000000 --- a/packages/messaging/rollup.config.release.js +++ /dev/null @@ -1,102 +0,0 @@ -/** - * @license - * Copyright 2018 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { importPathTransformer } from '../../scripts/exp/ts-transform-import-path'; -import json from '@rollup/plugin-json'; -import pkg from './package.json'; -import typescript from 'typescript'; -import typescriptPlugin from 'rollup-plugin-typescript2'; - -const deps = [ - ...Object.keys(Object.assign({}, pkg.peerDependencies, pkg.dependencies)), - '@firebase/app' -]; - -/** - * ES5 Builds - */ -const es5BuildPlugins = [ - typescriptPlugin({ - typescript, - clean: true, - abortOnError: false, - transformers: [importPathTransformer] - }), - json() -]; - -const es5Builds = [ - { - input: 'src/index.ts', - output: [ - { file: pkg.main, format: 'cjs', sourcemap: true }, - { file: pkg.esm5, format: 'es', sourcemap: true } - ], - plugins: es5BuildPlugins, - treeshake: { - moduleSideEffects: (id, external) => id === '@firebase/installations' - }, - external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)) - } -]; - -/** - * ES2017 Builds - */ -const es2017BuildPlugins = [ - typescriptPlugin({ - typescript, - abortOnError: false, - clean: true, - transformers: [importPathTransformer], - tsconfigOverride: { - compilerOptions: { - target: 'es2017' - } - } - }), - json({ preferConst: true }) -]; - -const es2017Builds = [ - { - input: 'src/index.ts', - output: { - file: pkg.browser, - format: 'es', - sourcemap: true - }, - plugins: es2017BuildPlugins, - treeshake: { - moduleSideEffects: (id, external) => id === '@firebase/installations' - }, - external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)) - }, - - // sw builds - { - input: 'src/index.sw.ts', - output: { file: pkg.sw, format: 'es', sourcemap: true }, - plugins: es2017BuildPlugins, - external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)), - treeshake: { - moduleSideEffects: (id, external) => id === '@firebase/installations' - } - } -]; - -export default [...es5Builds, ...es2017Builds]; diff --git a/packages/messaging/src/api.ts b/packages/messaging/src/api.ts index 8b9a9d487bb..56af3928503 100644 --- a/packages/messaging/src/api.ts +++ b/packages/messaging/src/api.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { FirebaseApp, _getProvider, getApp } from '@firebase/app-exp'; +import { FirebaseApp, _getProvider, getApp } from '@firebase/app'; import { GetTokenOptions, MessagePayload, @@ -43,7 +43,7 @@ import { _setDeliveryMetricsExportedToBigQueryEnabled } from './api/setDeliveryM * @public */ export function getMessagingInWindow(app: FirebaseApp = getApp()): Messaging { - return _getProvider(getModularInstance(app), 'messaging-exp').getImmediate(); + return _getProvider(getModularInstance(app), 'messaging').getImmediate(); } /** @@ -56,7 +56,7 @@ export function getMessagingInWindow(app: FirebaseApp = getApp()): Messaging { export function getMessagingInSw(app: FirebaseApp = getApp()): Messaging { return _getProvider( getModularInstance(app), - 'messaging-sw-exp' + 'messaging-sw' ).getImmediate(); } diff --git a/packages/messaging/src/helpers/extract-app-config.test.ts b/packages/messaging/src/helpers/extract-app-config.test.ts index f3f91d604ab..85836856aef 100644 --- a/packages/messaging/src/helpers/extract-app-config.test.ts +++ b/packages/messaging/src/helpers/extract-app-config.test.ts @@ -18,7 +18,7 @@ import '../testing/setup'; import { AppConfig } from '../interfaces/app-config'; -import { FirebaseApp } from '@firebase/app-exp'; +import { FirebaseApp } from '@firebase/app'; import { expect } from 'chai'; import { extractAppConfig } from './extract-app-config'; import { getFakeApp } from '../testing/fakes/firebase-dependencies'; diff --git a/packages/messaging/src/helpers/extract-app-config.ts b/packages/messaging/src/helpers/extract-app-config.ts index c80a32ee14d..b585dc1ece5 100644 --- a/packages/messaging/src/helpers/extract-app-config.ts +++ b/packages/messaging/src/helpers/extract-app-config.ts @@ -16,7 +16,7 @@ */ import { ERROR_FACTORY, ErrorCode } from '../util/errors'; -import { FirebaseApp, FirebaseOptions } from '@firebase/app-exp'; +import { FirebaseApp, FirebaseOptions } from '@firebase/app'; import { AppConfig } from '../interfaces/app-config'; import { FirebaseError } from '@firebase/util'; diff --git a/packages/messaging/src/helpers/register.ts b/packages/messaging/src/helpers/register.ts index edb2e81e32f..c39b024c5d5 100644 --- a/packages/messaging/src/helpers/register.ts +++ b/packages/messaging/src/helpers/register.ts @@ -31,10 +31,10 @@ import { import { MessagingService } from '../messaging-service'; import { ServiceWorkerGlobalScope } from '../util/sw-types'; -import { _registerComponent } from '@firebase/app-exp'; +import { _registerComponent } from '@firebase/app'; import { messageEventListener } from '../listeners/window-listener'; -const WindowMessagingFactory: InstanceFactory<'messaging-exp'> = ( +const WindowMessagingFactory: InstanceFactory<'messaging'> = ( container: ComponentContainer ) => { // Conscious decision to make this async check non-blocking during the messaging instance @@ -52,8 +52,8 @@ const WindowMessagingFactory: InstanceFactory<'messaging-exp'> = ( }); const messaging = new MessagingService( - container.getProvider('app-exp').getImmediate(), - container.getProvider('installations-exp-internal').getImmediate(), + container.getProvider('app').getImmediate(), + container.getProvider('installations-internal').getImmediate(), container.getProvider('analytics-internal') ); @@ -65,7 +65,7 @@ const WindowMessagingFactory: InstanceFactory<'messaging-exp'> = ( }; declare const self: ServiceWorkerGlobalScope; -const SwMessagingFactory: InstanceFactory<'messaging-exp'> = ( +const SwMessagingFactory: InstanceFactory<'messaging'> = ( container: ComponentContainer ) => { // Conscious decision to make this async check non-blocking during the messaging instance @@ -83,8 +83,8 @@ const SwMessagingFactory: InstanceFactory<'messaging-exp'> = ( }); const messaging = new MessagingService( - container.getProvider('app-exp').getImmediate(), - container.getProvider('installations-exp-internal').getImmediate(), + container.getProvider('app').getImmediate(), + container.getProvider('installations-internal').getImmediate(), container.getProvider('analytics-internal') ); @@ -103,7 +103,7 @@ const SwMessagingFactory: InstanceFactory<'messaging-exp'> = ( export function registerMessagingInWindow(): void { _registerComponent( - new Component('messaging-exp', WindowMessagingFactory, ComponentType.PUBLIC) + new Component('messaging', WindowMessagingFactory, ComponentType.PUBLIC) ); } @@ -114,6 +114,6 @@ export function registerMessagingInWindow(): void { */ export function registerMessagingInSw(): void { _registerComponent( - new Component('messaging-sw-exp', SwMessagingFactory, ComponentType.PUBLIC) + new Component('messaging-sw', SwMessagingFactory, ComponentType.PUBLIC) ); } diff --git a/packages/messaging/src/index.sw.ts b/packages/messaging/src/index.sw.ts index 17959fd17af..b5cca6f7c67 100644 --- a/packages/messaging/src/index.sw.ts +++ b/packages/messaging/src/index.sw.ts @@ -15,11 +15,12 @@ * limitations under the License. */ -import '@firebase/installations-exp'; +import '@firebase/installations'; import { Messaging } from './interfaces/public-types'; import { registerMessagingInSw } from './helpers/register'; +export * from './interfaces/public-types'; export { onBackgroundMessage, getMessagingInSw as getMessaging, @@ -29,7 +30,7 @@ export { isSwSupported as isSupported } from './api/isSupported'; declare module '@firebase/component' { interface NameServiceMapping { - 'messaging-sw-exp': Messaging; + 'messaging-sw': Messaging; } } diff --git a/packages/messaging/src/index.ts b/packages/messaging/src/index.ts index 42e00bcc420..389e45f5ab8 100644 --- a/packages/messaging/src/index.ts +++ b/packages/messaging/src/index.ts @@ -21,7 +21,7 @@ * limitations under the License. */ -import '@firebase/installations-exp'; +import '@firebase/installations'; import { Messaging } from './interfaces/public-types'; import { registerMessagingInWindow } from './helpers/register'; @@ -37,7 +37,7 @@ export * from './interfaces/public-types'; declare module '@firebase/component' { interface NameServiceMapping { - 'messaging-exp': Messaging; + 'messaging': Messaging; } } diff --git a/packages/messaging/src/interfaces/internal-dependencies.ts b/packages/messaging/src/interfaces/internal-dependencies.ts index 6d88720ef46..ce07c167129 100644 --- a/packages/messaging/src/interfaces/internal-dependencies.ts +++ b/packages/messaging/src/interfaces/internal-dependencies.ts @@ -17,9 +17,9 @@ import { AppConfig } from './app-config'; import { FirebaseAnalyticsInternalName } from '@firebase/analytics-interop-types'; -import { FirebaseApp } from '@firebase/app-exp'; +import { FirebaseApp } from '@firebase/app'; import { Provider } from '@firebase/component'; -import { _FirebaseInstallationsInternal } from '@firebase/installations-exp'; +import { _FirebaseInstallationsInternal } from '@firebase/installations'; export interface FirebaseInternalDependencies { app: FirebaseApp; diff --git a/packages/messaging/src/interfaces/public-types.ts b/packages/messaging/src/interfaces/public-types.ts index f7a8fd5ef60..cb9f7aefa77 100644 --- a/packages/messaging/src/interfaces/public-types.ts +++ b/packages/messaging/src/interfaces/public-types.ts @@ -142,6 +142,6 @@ export { NextFn, Observer, Unsubscribe } from '@firebase/util'; declare module '@firebase/component' { interface NameServiceMapping { - 'messaging-exp': Messaging; + 'messaging': Messaging; } } diff --git a/packages/messaging/src/messaging-service.ts b/packages/messaging/src/messaging-service.ts index ccb35762f2d..27333f106db 100644 --- a/packages/messaging/src/messaging-service.ts +++ b/packages/messaging/src/messaging-service.ts @@ -15,14 +15,14 @@ * limitations under the License. */ -import { FirebaseApp, _FirebaseService } from '@firebase/app-exp'; +import { FirebaseApp, _FirebaseService } from '@firebase/app'; import { MessagePayload, NextFn, Observer } from './interfaces/public-types'; import { FirebaseAnalyticsInternalName } from '@firebase/analytics-interop-types'; import { FirebaseInternalDependencies } from './interfaces/internal-dependencies'; import { LogEvent } from './interfaces/logging-types'; import { Provider } from '@firebase/component'; -import { _FirebaseInstallationsInternal } from '@firebase/installations-exp'; +import { _FirebaseInstallationsInternal } from '@firebase/installations'; import { extractAppConfig } from './helpers/extract-app-config'; export class MessagingService implements _FirebaseService { diff --git a/packages/messaging/src/testing/fakes/firebase-dependencies.ts b/packages/messaging/src/testing/fakes/firebase-dependencies.ts index 683b7b30e22..e1f87a2505e 100644 --- a/packages/messaging/src/testing/fakes/firebase-dependencies.ts +++ b/packages/messaging/src/testing/fakes/firebase-dependencies.ts @@ -21,9 +21,9 @@ import { } from '@firebase/analytics-interop-types'; import { FirebaseInternalDependencies } from '../../interfaces/internal-dependencies'; -import { FirebaseOptions } from '@firebase/app-exp'; +import { FirebaseOptions } from '@firebase/app'; import { Provider } from '@firebase/component'; -import { _FirebaseInstallationsInternal } from '@firebase/installations-exp'; +import { _FirebaseInstallationsInternal } from '@firebase/installations'; import { extractAppConfig } from '../../helpers/extract-app-config'; export function getFakeFirebaseDependencies( diff --git a/packages/messaging/sw/package.json b/packages/messaging/sw/package.json index 10abf5a7d17..2eceb18b972 100644 --- a/packages/messaging/sw/package.json +++ b/packages/messaging/sw/package.json @@ -1,5 +1,5 @@ { - "name": "@firebase/messaging-exp", + "name": "@firebase/messaging", "description": "", "author": "Firebase (https://firebase.google.com/)", "module": "../dist/index.sw.esm2017.js", diff --git a/packages/performance-compat/package.json b/packages/performance-compat/package.json index 6d3e045e570..86ae8ab0653 100644 --- a/packages/performance-compat/package.json +++ b/packages/performance-compat/package.json @@ -43,7 +43,7 @@ "rollup-plugin-replace": "2.2.0", "rollup-plugin-typescript2": "0.30.0", "typescript": "4.2.2", - "@firebase/app-compat": "0.0.1" + "@firebase/app-compat": "0.0.900" }, "repository": { "directory": "packages-exp/performance-compat", diff --git a/packages/remote-config-compat/package.json b/packages/remote-config-compat/package.json index 17bbacd193d..bf69c1b943a 100644 --- a/packages/remote-config-compat/package.json +++ b/packages/remote-config-compat/package.json @@ -42,10 +42,10 @@ "rollup-plugin-replace": "2.2.0", "rollup-plugin-typescript2": "0.30.0", "typescript": "4.2.2", - "@firebase/app-compat": "0.0.1" + "@firebase/app-compat": "0.0.900" }, "repository": { - "directory": "packages-exp/remote-config-compat", + "directory": "packages/remote-config-compat", "type": "git", "url": "https://github.com/firebase/firebase-js-sdk.git" }, From 607605c4742730907adc1cc69ac590c59dc9b077 Mon Sep 17 00:00:00 2001 From: Feiyang1 Date: Wed, 18 Aug 2021 17:28:05 -0700 Subject: [PATCH 09/38] migrate performance --- ...formance-exp.api.md => performance.api.md} | 108 +++++----- packages/performance-compat/package.json | 7 +- packages/performance-compat/rollup.config.js | 40 +++- .../rollup.config.release.js | 67 ------ packages/performance-compat/rollup.shared.js | 52 ----- packages/performance-compat/src/index.ts | 2 +- .../src/performance.test.ts | 2 +- .../performance-compat/src/performance.ts | 2 +- packages/performance-compat/test/util.ts | 2 +- packages/performance/CHANGELOG.md | 200 ++++++++++++++++++ packages/performance/README.md | 2 +- packages/performance/package.json | 16 +- packages/performance/rollup.config.js | 33 +-- packages/performance/rollup.config.release.js | 71 ------- packages/performance/rollup.shared.js | 48 ----- .../performance/src/controllers/perf.test.ts | 4 +- packages/performance/src/controllers/perf.ts | 4 +- packages/performance/src/index.test.ts | 2 +- packages/performance/src/index.ts | 16 +- packages/performance/src/public_types.ts | 2 +- .../src/resources/network_request.test.ts | 2 +- .../performance/src/resources/trace.test.ts | 2 +- .../src/services/iid_service.test.ts | 2 +- .../performance/src/services/iid_service.ts | 2 +- .../services/initialization_service.test.ts | 2 +- .../services/oob_resources_service.test.ts | 2 +- .../src/services/perf_logger.test.ts | 2 +- .../performance/src/services/perf_logger.ts | 2 +- .../services/remote_config_service.test.ts | 2 +- packages/performance/src/utils/app_utils.ts | 2 +- 30 files changed, 344 insertions(+), 356 deletions(-) rename common/api-review/{performance-exp.api.md => performance.api.md} (89%) delete mode 100644 packages/performance-compat/rollup.config.release.js delete mode 100644 packages/performance-compat/rollup.shared.js create mode 100644 packages/performance/CHANGELOG.md delete mode 100644 packages/performance/rollup.config.release.js delete mode 100644 packages/performance/rollup.shared.js diff --git a/common/api-review/performance-exp.api.md b/common/api-review/performance.api.md similarity index 89% rename from common/api-review/performance-exp.api.md rename to common/api-review/performance.api.md index bfc50e9be06..81e26749a7a 100644 --- a/common/api-review/performance-exp.api.md +++ b/common/api-review/performance.api.md @@ -1,54 +1,54 @@ -## API Report File for "@firebase/performance-exp" - -> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). - -```ts - -import { FirebaseApp } from '@firebase/app-exp'; - -// @public -export interface FirebasePerformance { - dataCollectionEnabled: boolean; - instrumentationEnabled: boolean; -} - -// @public -export function getPerformance(app?: FirebaseApp): FirebasePerformance; - -// @public -export function initializePerformance(app: FirebaseApp, settings?: PerformanceSettings): FirebasePerformance; - -// @public -export interface PerformanceSettings { - dataCollectionEnabled?: boolean; - instrumentationEnabled?: boolean; -} - -// @public -export interface PerformanceTrace { - getAttribute(attr: string): string | undefined; - getAttributes(): { - [key: string]: string; - }; - getMetric(metricName: string): number; - incrementMetric(metricName: string, num?: number): void; - putAttribute(attr: string, value: string): void; - putMetric(metricName: string, num: number): void; - record(startTime: number, duration: number, options?: { - metrics?: { - [key: string]: number; - }; - attributes?: { - [key: string]: string; - }; - }): void; - removeAttribute(attr: string): void; - start(): void; - stop(): void; -} - -// @public -export function trace(performance: FirebasePerformance, name: string): PerformanceTrace; - - -``` +## API Report File for "@firebase/performance" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts + +import { FirebaseApp } from '@firebase/app'; + +// @public +export interface FirebasePerformance { + dataCollectionEnabled: boolean; + instrumentationEnabled: boolean; +} + +// @public +export function getPerformance(app?: FirebaseApp): FirebasePerformance; + +// @public +export function initializePerformance(app: FirebaseApp, settings?: PerformanceSettings): FirebasePerformance; + +// @public +export interface PerformanceSettings { + dataCollectionEnabled?: boolean; + instrumentationEnabled?: boolean; +} + +// @public +export interface PerformanceTrace { + getAttribute(attr: string): string | undefined; + getAttributes(): { + [key: string]: string; + }; + getMetric(metricName: string): number; + incrementMetric(metricName: string, num?: number): void; + putAttribute(attr: string, value: string): void; + putMetric(metricName: string, num: number): void; + record(startTime: number, duration: number, options?: { + metrics?: { + [key: string]: number; + }; + attributes?: { + [key: string]: string; + }; + }): void; + removeAttribute(attr: string): void; + start(): void; + stop(): void; +} + +// @public +export function trace(performance: FirebasePerformance, name: string): PerformanceTrace; + + +``` diff --git a/packages/performance-compat/package.json b/packages/performance-compat/package.json index 86ae8ab0653..048c75b45d5 100644 --- a/packages/performance-compat/package.json +++ b/packages/performance-compat/package.json @@ -3,7 +3,6 @@ "version": "0.0.900", "description": "The compatibility package of Firebase Performance", "author": "Firebase (https://firebase.google.com/)", - "private": true, "main": "dist/index.cjs.js", "browser": "dist/index.esm2017.js", "module": "dist/index.esm2017.js", @@ -23,14 +22,14 @@ "test:browser": "karma start --single-run", "test:browser:debug": "karma start --browsers Chrome --auto-watch", "prettier": "prettier --write '{src,test}/**/*.{js,ts}'", - "add-compat-overloads": "ts-node-script ../../scripts/exp/create-overloads.ts -i ../performance-exp/dist/src/index.d.ts -o dist/src/index.d.ts -a -r FirebasePerformance:FirebasePerformanceCompat -r FirebaseApp:FirebaseAppCompat --moduleToEnhance @firebase/performance" + "add-compat-overloads": "ts-node-script ../../scripts/exp/create-overloads.ts -i ../performance/dist/src/index.d.ts -o dist/src/index.d.ts -a -r FirebasePerformance:FirebasePerformanceCompat -r FirebaseApp:FirebaseAppCompat --moduleToEnhance @firebase/performance" }, "license": "Apache-2.0", "peerDependencies": { "@firebase/app-compat": "0.x" }, "dependencies": { - "@firebase/performance-exp": "0.0.900", + "@firebase/performance": "0.4.18", "@firebase/performance-types": "0.0.13", "@firebase/util": "1.2.0", "@firebase/logger": "0.2.6", @@ -46,7 +45,7 @@ "@firebase/app-compat": "0.0.900" }, "repository": { - "directory": "packages-exp/performance-compat", + "directory": "packages/performance-compat", "type": "git", "url": "https://github.com/firebase/firebase-js-sdk.git" }, diff --git a/packages/performance-compat/rollup.config.js b/packages/performance-compat/rollup.config.js index 4df9d8a2f48..13612393d50 100644 --- a/packages/performance-compat/rollup.config.js +++ b/packages/performance-compat/rollup.config.js @@ -18,8 +18,9 @@ import typescriptPlugin from 'rollup-plugin-typescript2'; import typescript from 'typescript'; import json from '@rollup/plugin-json'; -import { es5BuildsNoPlugin, es2017BuildsNoPlugin } from './rollup.shared.js'; +import pkg from './package.json'; +const deps = Object.keys(Object.assign({}, pkg.peerDependencies, pkg.dependencies)); /** * ES5 Builds */ @@ -30,10 +31,20 @@ const es5BuildPlugins = [ json() ]; -const es5Builds = es5BuildsNoPlugin.map(build => ({ - ...build, - plugins: es5BuildPlugins -})); +const es5Builds = [ + /** + * Browser Builds + */ + { + input: 'src/index.ts', + output: [ + { file: pkg.main, format: 'cjs', sourcemap: true }, + { file: pkg.esm5, format: 'es', sourcemap: true } + ], + external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)), + plugins: es5BuildPlugins + } +]; /** * ES2017 Builds @@ -52,9 +63,20 @@ const es2017BuildPlugins = [ }) ]; -const es2017Builds = es2017BuildsNoPlugin.map(build => ({ - ...build, - plugins: es2017BuildPlugins -})); +const es2017Builds = [ + /** + * Browser Builds + */ + { + input: 'src/index.ts', + output: { + file: pkg.browser, + format: 'es', + sourcemap: true + }, + external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)), + plugins: es2017BuildPlugins + } +]; export default [...es5Builds, ...es2017Builds]; diff --git a/packages/performance-compat/rollup.config.release.js b/packages/performance-compat/rollup.config.release.js deleted file mode 100644 index b0b1dc5154a..00000000000 --- a/packages/performance-compat/rollup.config.release.js +++ /dev/null @@ -1,67 +0,0 @@ -/** - * @license - * Copyright 2020 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import typescriptPlugin from 'rollup-plugin-typescript2'; -import typescript from 'typescript'; -import json from '@rollup/plugin-json'; -import { es5BuildsNoPlugin, es2017BuildsNoPlugin } from './rollup.shared.js'; -import { importPathTransformer } from '../../scripts/exp/ts-transform-import-path'; - -/** - * ES5 Builds - */ -const es5BuildPlugins = [ - typescriptPlugin({ - typescript, - clean: true, - abortOnError: false, - transformers: [importPathTransformer] - }), - json() -]; - -const es5Builds = es5BuildsNoPlugin.map(build => ({ - ...build, - plugins: es5BuildPlugins -})); - -/** - * ES2017 Builds - */ -const es2017BuildPlugins = [ - typescriptPlugin({ - typescript, - tsconfigOverride: { - compilerOptions: { - target: 'es2017' - } - }, - clean: true, - abortOnError: false, - transformers: [importPathTransformer] - }), - json({ - preferConst: true - }) -]; - -const es2017Builds = es2017BuildsNoPlugin.map(build => ({ - ...build, - plugins: es2017BuildPlugins -})); - -export default [...es5Builds, ...es2017Builds]; diff --git a/packages/performance-compat/rollup.shared.js b/packages/performance-compat/rollup.shared.js deleted file mode 100644 index 6d5afe89732..00000000000 --- a/packages/performance-compat/rollup.shared.js +++ /dev/null @@ -1,52 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import pkg from './package.json'; - -const deps = [ - ...Object.keys(Object.assign({}, pkg.peerDependencies, pkg.dependencies)), - '@firebase/performance' -]; - -export const es5BuildsNoPlugin = [ - /** - * Browser Builds - */ - { - input: 'src/index.ts', - output: [ - { file: pkg.main, format: 'cjs', sourcemap: true }, - { file: pkg.esm5, format: 'es', sourcemap: true } - ], - external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)) - } -]; - -export const es2017BuildsNoPlugin = [ - /** - * Browser Builds - */ - { - input: 'src/index.ts', - output: { - file: pkg.browser, - format: 'es', - sourcemap: true - }, - external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)) - } -]; diff --git a/packages/performance-compat/src/index.ts b/packages/performance-compat/src/index.ts index 0a2109ee3f0..e32130fa77d 100644 --- a/packages/performance-compat/src/index.ts +++ b/packages/performance-compat/src/index.ts @@ -49,7 +49,7 @@ function performanceFactory( ): PerformanceCompatImpl { const app = container.getProvider('app-compat').getImmediate(); // The following call will always succeed. - const performance = container.getProvider('performance-exp').getImmediate(); + const performance = container.getProvider('performance').getImmediate(); return new PerformanceCompatImpl(app, performance); } diff --git a/packages/performance-compat/src/performance.test.ts b/packages/performance-compat/src/performance.test.ts index 1ef81428e7b..7dc2ff82fcd 100644 --- a/packages/performance-compat/src/performance.test.ts +++ b/packages/performance-compat/src/performance.test.ts @@ -23,7 +23,7 @@ import { getFakeModularPerformance, getFakeModularPerformanceTrace } from '../test/util'; -import * as perfModularApi from '@firebase/performance-exp'; +import * as perfModularApi from '@firebase/performance'; import { PerformanceCompatImpl } from './performance'; describe('Performance Compat', () => { diff --git a/packages/performance-compat/src/performance.ts b/packages/performance-compat/src/performance.ts index ddc82c88d5a..b15f83eb67a 100644 --- a/packages/performance-compat/src/performance.ts +++ b/packages/performance-compat/src/performance.ts @@ -20,7 +20,7 @@ import { FirebasePerformance, // The PerformanceTrace type has not changed between modular and non-modular packages. PerformanceTrace -} from '@firebase/performance-exp'; +} from '@firebase/performance'; import { FirebasePerformance as FirebasePerformanceCompat } from '@firebase/performance-types'; import { FirebaseApp, _FirebaseService } from '@firebase/app-compat'; diff --git a/packages/performance-compat/test/util.ts b/packages/performance-compat/test/util.ts index 5bc5e3e56ff..0cd8e21c523 100644 --- a/packages/performance-compat/test/util.ts +++ b/packages/performance-compat/test/util.ts @@ -19,7 +19,7 @@ import { FirebaseApp } from '@firebase/app-compat'; import { FirebasePerformance, PerformanceTrace -} from '@firebase/performance-exp'; +} from '@firebase/performance'; export function getFakeApp(): FirebaseApp { return { diff --git a/packages/performance/CHANGELOG.md b/packages/performance/CHANGELOG.md new file mode 100644 index 00000000000..5ba99854221 --- /dev/null +++ b/packages/performance/CHANGELOG.md @@ -0,0 +1,200 @@ +# @firebase/performance + +## 0.4.17 + +### Patch Changes + +- Updated dependencies [[`a3cbe719b`](https://github.com/firebase/firebase-js-sdk/commit/a3cbe719b1bd733a5c4c15ee0d0e6388d512054c)]: + - @firebase/util@1.2.0 + - @firebase/component@0.5.5 + - @firebase/installations@0.4.31 + +## 0.4.16 + +### Patch Changes + +- Updated dependencies [[`56a6a9d4a`](https://github.com/firebase/firebase-js-sdk/commit/56a6a9d4af2766154584a0f66d3c4d8024d74ba5)]: + - @firebase/component@0.5.4 + - @firebase/installations@0.4.30 + +## 0.4.15 + +### Patch Changes + +- Updated dependencies [[`725ab4684`](https://github.com/firebase/firebase-js-sdk/commit/725ab4684ef0999a12f71e704c204a00fb030e5d)]: + - @firebase/component@0.5.3 + - @firebase/installations@0.4.29 + +## 0.4.14 + +### Patch Changes + +- Updated dependencies [[`4c4b6aed9`](https://github.com/firebase/firebase-js-sdk/commit/4c4b6aed9757c9a7e75fb698a15e53274f93880b)]: + - @firebase/component@0.5.2 + - @firebase/installations@0.4.28 + +## 0.4.13 + +### Patch Changes + +- Updated dependencies [[`5fbc5fb01`](https://github.com/firebase/firebase-js-sdk/commit/5fbc5fb0140d7da980fd7ebbfbae810f8c64ae19)]: + - @firebase/component@0.5.1 + - @firebase/installations@0.4.27 + +## 0.4.12 + +### Patch Changes + +- Updated dependencies [[`c34ac7a92`](https://github.com/firebase/firebase-js-sdk/commit/c34ac7a92a616915f38d192654db7770d81747ae), [`ac4ad08a2`](https://github.com/firebase/firebase-js-sdk/commit/ac4ad08a284397ec966e991dd388bb1fba857467)]: + - @firebase/component@0.5.0 + - @firebase/util@1.1.0 + - @firebase/installations@0.4.26 + +## 0.4.11 + +### Patch Changes + +- Updated dependencies [[`7354a0ed4`](https://github.com/firebase/firebase-js-sdk/commit/7354a0ed438f4e3df6577e4927e8c8f8f1fbbfda)]: + - @firebase/util@1.0.0 + - @firebase/component@0.4.1 + - @firebase/installations@0.4.25 + +## 0.4.10 + +### Patch Changes + +- Updated dependencies [[`f24d8961b`](https://github.com/firebase/firebase-js-sdk/commit/f24d8961b3b87821413297688803fc85113086b3)]: + - @firebase/component@0.4.0 + - @firebase/installations@0.4.24 + +## 0.4.9 + +### Patch Changes + +- Updated dependencies [[`de5f90501`](https://github.com/firebase/firebase-js-sdk/commit/de5f9050137acc9ed1490082e5aa429b5de3cb2a)]: + - @firebase/util@0.4.1 + - @firebase/component@0.3.1 + - @firebase/installations@0.4.23 + +## 0.4.8 + +### Patch Changes + +- Updated dependencies [[`5c1a83ed7`](https://github.com/firebase/firebase-js-sdk/commit/5c1a83ed70bae979322bd8751c0885d683ce4bf3)]: + - @firebase/component@0.3.0 + - @firebase/installations@0.4.22 + +## 0.4.7 + +### Patch Changes + +- Updated dependencies [[`ec95df3d0`](https://github.com/firebase/firebase-js-sdk/commit/ec95df3d07e5f091f2a7f7327e46417f64d04b4e)]: + - @firebase/util@0.4.0 + - @firebase/component@0.2.1 + - @firebase/installations@0.4.21 + +## 0.4.6 + +### Patch Changes + +- Updated dependencies [[`6afe42613`](https://github.com/firebase/firebase-js-sdk/commit/6afe42613ed3d7a842d378dc1a09a795811db2ac)]: + - @firebase/component@0.2.0 + - @firebase/installations@0.4.20 + +## 0.4.5 + +### Patch Changes + +- [`6f2c7b7aa`](https://github.com/firebase/firebase-js-sdk/commit/6f2c7b7aae72d7be88c7a477f1a5d38bd5e8dfe4) [#3896](https://github.com/firebase/firebase-js-sdk/pull/3896) - Dispatch up to 1000 events for each network request when collecting performance events. + +## 0.4.4 + +### Patch Changes + +- Updated dependencies [[`9cf727fcc`](https://github.com/firebase/firebase-js-sdk/commit/9cf727fcc3d049551b16ae0698ac33dc2fe45ada)]: + - @firebase/util@0.3.4 + - @firebase/component@0.1.21 + - @firebase/installations@0.4.19 + +## 0.4.3 + +### Patch Changes + +- [`a5768b0aa`](https://github.com/firebase/firebase-js-sdk/commit/a5768b0aa7d7ce732279931aa436e988c9f36487) [#3932](https://github.com/firebase/firebase-js-sdk/pull/3932) - Point browser field to esm build. Now you need to use default import instead of namespace import to import firebase. + + Before this change + + ``` + import * as firebase from 'firebase/app'; + ``` + + After this change + + ``` + import firebase from 'firebase/app'; + ``` + +- Updated dependencies [[`a5768b0aa`](https://github.com/firebase/firebase-js-sdk/commit/a5768b0aa7d7ce732279931aa436e988c9f36487), [`7d916d905`](https://github.com/firebase/firebase-js-sdk/commit/7d916d905ba16816ac8ac7c8748c83831ff614ce)]: + - @firebase/component@0.1.20 + - @firebase/util@0.3.3 + - @firebase/installations@0.4.18 + +## 0.4.2 + +### Patch Changes + +- [`48b0b0f7c`](https://github.com/firebase/firebase-js-sdk/commit/48b0b0f7c9137652f438cf04395debddeb3711d0) [#3850](https://github.com/firebase/firebase-js-sdk/pull/3850) - Moved `loggingEnabled` check to wait until performance initialization finishes, thus avoid dropping custom traces right after getting `performance` object. + +* [`8728e1a0f`](https://github.com/firebase/firebase-js-sdk/commit/8728e1a0fc9027a21e3b77e4a058a7e8513a4646) [#3866](https://github.com/firebase/firebase-js-sdk/pull/3866) - Throws exception when startTime or duration is not positive value in `trace.record()` API. + +## 0.4.1 + +### Patch Changes + +- Updated dependencies [[`da1c7df79`](https://github.com/firebase/firebase-js-sdk/commit/da1c7df7982b08bbef82fcc8d93255f3e2d23cca), [`fb3b095e4`](https://github.com/firebase/firebase-js-sdk/commit/fb3b095e4b7c8f57fdb3172bc039c84576abf290)]: + - @firebase/component@0.1.19 + - @firebase/util@0.3.2 + - @firebase/installations@0.4.17 + +## 0.4.0 + +### Minor Changes + +- [`67501b980`](https://github.com/firebase/firebase-js-sdk/commit/67501b9806c7014738080bc0be945b2c0748c17e) [#3424](https://github.com/firebase/firebase-js-sdk/pull/3424) - Issue 2393 - Add environment check to Performance Module + +## 0.3.11 + +### Patch Changes + +- Updated dependencies [[`d4ca3da0`](https://github.com/firebase/firebase-js-sdk/commit/d4ca3da0a59fcea1261ba69d7eb663bba38d3089)]: + - @firebase/util@0.3.1 + - @firebase/component@0.1.18 + - @firebase/installations@0.4.16 + +## 0.3.10 + +### Patch Changes + +- Updated dependencies [[`a87676b8`](https://github.com/firebase/firebase-js-sdk/commit/a87676b84b78ccc2f057a22eb947a5d13402949c)]: + - @firebase/util@0.3.0 + - @firebase/component@0.1.17 + - @firebase/installations@0.4.15 + +## 0.3.9 + +### Patch Changes + +- [`a754645e`](https://github.com/firebase/firebase-js-sdk/commit/a754645ec2be1b8c205f25f510196eee298b0d6e) [#3297](https://github.com/firebase/firebase-js-sdk/pull/3297) Thanks [@renovate](https://github.com/apps/renovate)! - Update dependency typescript to v3.9.5 + +- Updated dependencies [[`a754645e`](https://github.com/firebase/firebase-js-sdk/commit/a754645ec2be1b8c205f25f510196eee298b0d6e)]: + - @firebase/component@0.1.16 + - @firebase/installations@0.4.14 + - @firebase/logger@0.2.6 + +## 0.3.0 + +- [changed] Updated internal performance event transport mechanism. + +## 0.2.30 + +- [changed] Internal transport protocol update from proto2 to proto3. diff --git a/packages/performance/README.md b/packages/performance/README.md index 6193537a9a5..5c83dbc51b7 100644 --- a/packages/performance/README.md +++ b/packages/performance/README.md @@ -1,4 +1,4 @@ -# @firebase/performance-exp +# @firebase/performance This is the Firebase Performance component of the Firebase JS SDK. diff --git a/packages/performance/package.json b/packages/performance/package.json index 93a83fbb107..f29864b721e 100644 --- a/packages/performance/package.json +++ b/packages/performance/package.json @@ -1,9 +1,8 @@ { - "name": "@firebase/performance-exp", + "name": "@firebase/performance", "version": "0.0.900", "description": "Firebase performance for web", "author": "Firebase (https://firebase.google.com/)", - "private": true, "main": "dist/index.cjs.js", "browser": "dist/index.esm2017.js", "module": "dist/index.esm2017.js", @@ -14,8 +13,8 @@ "lint": "eslint -c .eslintrc.js '**/*.ts' --ignore-path '../../.gitignore'", "lint:fix": "eslint --fix -c .eslintrc.js '**/*.ts' --ignore-path '../../.gitignore'", "build": "rollup -c && yarn api-report", - "build:deps": "lerna run --scope @firebase/performance-exp --include-dependencies build", - "build:release": "rollup -c rollup.config.release.js", + "build:deps": "lerna run --scope @firebase/performance --include-dependencies build", + "build:release": "yarn build", "dev": "rollup -c -w", "test": "run-p lint test:browser", "test:ci": "node ../../scripts/run_tests_in_ci.js -s test:browser", @@ -23,30 +22,29 @@ "test:debug": "karma start --browsers=Chrome --auto-watch", "prettier": "prettier --write '{src,test}/**/*.{js,ts}'", "api-report": "api-extractor run --local --verbose", - "predoc": "node ../../scripts/exp/remove-exp.js temp", "doc": "api-documenter markdown --input temp --output docs", "build:doc": "yarn build && yarn doc" }, "peerDependencies": { - "@firebase/app-exp": "0.x" + "@firebase/app": "0.x" }, "dependencies": { "@firebase/logger": "0.2.6", - "@firebase/installations-exp": "0.0.900", + "@firebase/installations": "0.4.32", "@firebase/util": "1.2.0", "@firebase/component": "0.5.5", "tslib": "^2.1.0" }, "license": "Apache-2.0", "devDependencies": { - "@firebase/app-exp": "0.0.900", + "@firebase/app": "0.6.30", "rollup": "2.52.2", "@rollup/plugin-json": "4.1.0", "rollup-plugin-typescript2": "0.30.0", "typescript": "4.2.2" }, "repository": { - "directory": "packages/performance-exp", + "directory": "packages/performance", "type": "git", "url": "https://github.com/firebase/firebase-js-sdk.git" }, diff --git a/packages/performance/rollup.config.js b/packages/performance/rollup.config.js index b5221c26179..631f450f1f7 100644 --- a/packages/performance/rollup.config.js +++ b/packages/performance/rollup.config.js @@ -19,21 +19,24 @@ import json from '@rollup/plugin-json'; import typescriptPlugin from 'rollup-plugin-typescript2'; import typescript from 'typescript'; import pkg from './package.json'; -import { es5BuildsNoPlugin, es2017BuildsNoPlugin } from './rollup.shared'; - -const deps = Object.keys( - Object.assign({}, pkg.peerDependencies, pkg.dependencies) -); +const deps = Object.keys(Object.assign({}, pkg.peerDependencies, pkg.dependencies)); /** * ES5 Builds */ const es5BuildPlugins = [typescriptPlugin({ typescript }), json()]; -const es5Builds = es5BuildsNoPlugin.map(build => ({ - ...build, - plugins: es5BuildPlugins -})); +const es5Builds = [ + { + input: 'src/index.ts', + output: [ + { file: pkg.main, format: 'cjs', sourcemap: true }, + { file: pkg.esm5, format: 'es', sourcemap: true } + ], + external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)), + plugins: es5BuildPlugins + } +]; /** * ES2017 Builds @@ -50,9 +53,13 @@ const es2017BuildPlugins = [ json({ preferConst: true }) ]; -const es2017Builds = es2017BuildsNoPlugin.map(build => ({ - ...build, - plugins: es2017BuildPlugins -})); +const es2017Builds = [ + { + input: 'src/index.ts', + output: [{ file: pkg.browser, format: 'es', sourcemap: true }], + external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)), + plugins: es2017BuildPlugins + } +]; export default [...es5Builds, ...es2017Builds]; diff --git a/packages/performance/rollup.config.release.js b/packages/performance/rollup.config.release.js deleted file mode 100644 index a217c6990b0..00000000000 --- a/packages/performance/rollup.config.release.js +++ /dev/null @@ -1,71 +0,0 @@ -/** - * @license - * Copyright 2020 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import json from '@rollup/plugin-json'; -import typescriptPlugin from 'rollup-plugin-typescript2'; -import typescript from 'typescript'; -import { importPathTransformer } from '../../scripts/exp/ts-transform-import-path'; -import { es2017BuildsNoPlugin, es5BuildsNoPlugin } from './rollup.shared'; - -/** - * ES5 Builds - */ -const es5BuildPlugins = [ - typescriptPlugin({ - typescript, - clean: true, - abortOnError: false, - transformers: [importPathTransformer] - }), - json() -]; - -const es5Builds = es5BuildsNoPlugin.map(build => ({ - ...build, - plugins: es5BuildPlugins, - treeshake: { - moduleSideEffects: ['@firebase/installations'] - } -})); - -/** - * ES2017 Builds - */ -const es2017BuildPlugins = [ - typescriptPlugin({ - typescript, - tsconfigOverride: { - compilerOptions: { - target: 'es2017' - } - }, - abortOnError: false, - clean: true, - transformers: [importPathTransformer] - }), - json({ preferConst: true }) -]; - -const es2017Builds = es2017BuildsNoPlugin.map(build => ({ - ...build, - plugins: es2017BuildPlugins, - treeshake: { - moduleSideEffects: ['@firebase/installations'] - } -})); - -export default [...es5Builds, ...es2017Builds]; diff --git a/packages/performance/rollup.shared.js b/packages/performance/rollup.shared.js deleted file mode 100644 index 461af4f05ad..00000000000 --- a/packages/performance/rollup.shared.js +++ /dev/null @@ -1,48 +0,0 @@ -/** - * @license - * Copyright 2020 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import pkg from './package.json'; - -const deps = [ - ...Object.keys(Object.assign({}, pkg.peerDependencies, pkg.dependencies)), - '@firebase/app' -]; - -/** - * ES5 Builds - */ -export const es5BuildsNoPlugin = [ - { - input: 'src/index.ts', - output: [ - { file: pkg.main, format: 'cjs', sourcemap: true }, - { file: pkg.esm5, format: 'es', sourcemap: true } - ], - external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)) - } -]; - -/** - * ES2017 Builds - */ -export const es2017BuildsNoPlugin = [ - { - input: 'src/index.ts', - output: [{ file: pkg.browser, format: 'es', sourcemap: true }], - external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)) - } -]; diff --git a/packages/performance/src/controllers/perf.test.ts b/packages/performance/src/controllers/perf.test.ts index 369fabe12ce..cf46bb48276 100644 --- a/packages/performance/src/controllers/perf.test.ts +++ b/packages/performance/src/controllers/perf.test.ts @@ -22,8 +22,8 @@ import { Api, setupApi } from '../services/api_service'; import * as initializationService from '../services/initialization_service'; import { SettingsService } from '../services/settings_service'; import { consoleLogger } from '../utils/console_logger'; -import { FirebaseApp } from '@firebase/app-exp'; -import { _FirebaseInstallationsInternal } from '@firebase/installations-exp'; +import { FirebaseApp } from '@firebase/app'; +import { _FirebaseInstallationsInternal } from '@firebase/installations'; import '../../test/setup'; describe('Firebase Performance Test', () => { diff --git a/packages/performance/src/controllers/perf.ts b/packages/performance/src/controllers/perf.ts index 5f2a70c0bc4..db2d1820405 100644 --- a/packages/performance/src/controllers/perf.ts +++ b/packages/performance/src/controllers/perf.ts @@ -19,8 +19,8 @@ import { setupOobResources } from '../services/oob_resources_service'; import { SettingsService } from '../services/settings_service'; import { getInitializationPromise } from '../services/initialization_service'; import { Api } from '../services/api_service'; -import { FirebaseApp } from '@firebase/app-exp'; -import { _FirebaseInstallationsInternal } from '@firebase/installations-exp'; +import { FirebaseApp } from '@firebase/app'; +import { _FirebaseInstallationsInternal } from '@firebase/installations'; import { PerformanceSettings, FirebasePerformance } from '../public_types'; import { validateIndexedDBOpenable } from '@firebase/util'; import { setupTransportService } from '../services/transport_service'; diff --git a/packages/performance/src/index.test.ts b/packages/performance/src/index.test.ts index 9d8403f954d..d60f5897114 100644 --- a/packages/performance/src/index.test.ts +++ b/packages/performance/src/index.test.ts @@ -19,7 +19,7 @@ import { expect } from 'chai'; import { initializePerformance } from './index'; import { ERROR_FACTORY, ErrorCode } from './utils/errors'; import '../test/setup'; -import { deleteApp, FirebaseApp, initializeApp } from '@firebase/app-exp'; +import { deleteApp, FirebaseApp, initializeApp } from '@firebase/app'; const fakeFirebaseConfig = { apiKey: 'api-key', diff --git a/packages/performance/src/index.ts b/packages/performance/src/index.ts index d9d3ead78d4..7691596b982 100644 --- a/packages/performance/src/index.ts +++ b/packages/performance/src/index.ts @@ -35,7 +35,7 @@ import { registerVersion, FirebaseApp, getApp -} from '@firebase/app-exp'; +} from '@firebase/app'; import { InstanceFactory, ComponentContainer, @@ -44,7 +44,7 @@ import { } from '@firebase/component'; import { name, version } from '../package.json'; import { Trace } from './resources/trace'; -import '@firebase/installations-exp'; +import '@firebase/installations'; import { deepEqual, getModularInstance } from '@firebase/util'; const DEFAULT_ENTRY_NAME = '[DEFAULT]'; @@ -58,7 +58,7 @@ export function getPerformance( app: FirebaseApp = getApp() ): FirebasePerformance { app = getModularInstance(app); - const provider = _getProvider(app, 'performance-exp'); + const provider = _getProvider(app, 'performance'); const perfInstance = provider.getImmediate() as PerformanceController; return perfInstance; } @@ -74,7 +74,7 @@ export function initializePerformance( settings?: PerformanceSettings ): FirebasePerformance { app = getModularInstance(app); - const provider = _getProvider(app, 'performance-exp'); + const provider = _getProvider(app, 'performance'); // throw if an instance was already created. // It could happen if initializePerformance() is called more than once, or getPerformance() is called first. @@ -108,14 +108,14 @@ export function trace( return new Trace(performance as PerformanceController, name); } -const factory: InstanceFactory<'performance-exp'> = ( +const factory: InstanceFactory<'performance'> = ( container: ComponentContainer, { options: settings }: { options?: PerformanceSettings } ) => { // Dependencies - const app = container.getProvider('app-exp').getImmediate(); + const app = container.getProvider('app').getImmediate(); const installations = container - .getProvider('installations-exp-internal') + .getProvider('installations-internal') .getImmediate(); if (app.name !== DEFAULT_ENTRY_NAME) { @@ -133,7 +133,7 @@ const factory: InstanceFactory<'performance-exp'> = ( function registerPerformance(): void { _registerComponent( - new Component('performance-exp', factory, ComponentType.PUBLIC) + new Component('performance', factory, ComponentType.PUBLIC) ); } diff --git a/packages/performance/src/public_types.ts b/packages/performance/src/public_types.ts index 756fca2febf..36cce416239 100644 --- a/packages/performance/src/public_types.ts +++ b/packages/performance/src/public_types.ts @@ -130,6 +130,6 @@ export interface PerformanceTrace { declare module '@firebase/component' { interface NameServiceMapping { - 'performance-exp': FirebasePerformance; + 'performance': FirebasePerformance; } } diff --git a/packages/performance/src/resources/network_request.test.ts b/packages/performance/src/resources/network_request.test.ts index 20b6598f3f9..e7e8d82a198 100644 --- a/packages/performance/src/resources/network_request.test.ts +++ b/packages/performance/src/resources/network_request.test.ts @@ -21,7 +21,7 @@ import { expect } from 'chai'; import { Api, setupApi } from '../services/api_service'; import * as perfLogger from '../services/perf_logger'; -import { FirebaseApp } from '@firebase/app-exp'; +import { FirebaseApp } from '@firebase/app'; import { PerformanceController } from '../controllers/perf'; import { FirebaseInstallations } from '@firebase/installations-types'; import '../../test/setup'; diff --git a/packages/performance/src/resources/trace.test.ts b/packages/performance/src/resources/trace.test.ts index c3d2f9c61db..e4b42495a0d 100644 --- a/packages/performance/src/resources/trace.test.ts +++ b/packages/performance/src/resources/trace.test.ts @@ -21,7 +21,7 @@ import { expect } from 'chai'; import { Api, setupApi } from '../services/api_service'; import * as perfLogger from '../services/perf_logger'; import { PerformanceController } from '../controllers/perf'; -import { FirebaseApp } from '@firebase/app-exp'; +import { FirebaseApp } from '@firebase/app'; import { FirebaseInstallations } from '@firebase/installations-types'; import '../../test/setup'; diff --git a/packages/performance/src/services/iid_service.test.ts b/packages/performance/src/services/iid_service.test.ts index 3f1e195506e..c7c2d359534 100644 --- a/packages/performance/src/services/iid_service.test.ts +++ b/packages/performance/src/services/iid_service.test.ts @@ -24,7 +24,7 @@ import { getAuthTokenPromise } from './iid_service'; import '../../test/setup'; -import { _FirebaseInstallationsInternal } from '@firebase/installations-exp'; +import { _FirebaseInstallationsInternal } from '@firebase/installations'; describe('Firebase Perofmrance > iid_service', () => { const IID = 'fid'; diff --git a/packages/performance/src/services/iid_service.ts b/packages/performance/src/services/iid_service.ts index 6d336e3c034..42db4c0a73a 100644 --- a/packages/performance/src/services/iid_service.ts +++ b/packages/performance/src/services/iid_service.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { _FirebaseInstallationsInternal } from '@firebase/installations-exp'; +import { _FirebaseInstallationsInternal } from '@firebase/installations'; let iid: string | undefined; let authToken: string | undefined; diff --git a/packages/performance/src/services/initialization_service.test.ts b/packages/performance/src/services/initialization_service.test.ts index 242bbdff4a0..7f89ae021de 100644 --- a/packages/performance/src/services/initialization_service.test.ts +++ b/packages/performance/src/services/initialization_service.test.ts @@ -22,7 +22,7 @@ import { isPerfInitialized } from './initialization_service'; import { setupApi } from './api_service'; -import { FirebaseApp } from '@firebase/app-exp'; +import { FirebaseApp } from '@firebase/app'; import '../../test/setup'; import { FirebaseInstallations } from '@firebase/installations-types'; import { PerformanceController } from '../controllers/perf'; diff --git a/packages/performance/src/services/oob_resources_service.test.ts b/packages/performance/src/services/oob_resources_service.test.ts index c0210b24116..cc1a4ab5201 100644 --- a/packages/performance/src/services/oob_resources_service.test.ts +++ b/packages/performance/src/services/oob_resources_service.test.ts @@ -30,7 +30,7 @@ import { setupOobResources } from './oob_resources_service'; import { Trace } from '../resources/trace'; import '../../test/setup'; import { PerformanceController } from '../controllers/perf'; -import { FirebaseApp } from '@firebase/app-exp'; +import { FirebaseApp } from '@firebase/app'; import { FirebaseInstallations } from '@firebase/installations-types'; describe('Firebase Performance > oob_resources_service', () => { diff --git a/packages/performance/src/services/perf_logger.test.ts b/packages/performance/src/services/perf_logger.test.ts index 2f2a70c35f4..964641786da 100644 --- a/packages/performance/src/services/perf_logger.test.ts +++ b/packages/performance/src/services/perf_logger.test.ts @@ -22,7 +22,7 @@ import * as iidService from './iid_service'; import { expect } from 'chai'; import { Api, setupApi } from './api_service'; import { SettingsService } from './settings_service'; -import { FirebaseApp } from '@firebase/app-exp'; +import { FirebaseApp } from '@firebase/app'; import * as initializationService from './initialization_service'; import { SDK_VERSION } from '../constants'; import * as attributeUtils from '../utils/attributes_utils'; diff --git a/packages/performance/src/services/perf_logger.ts b/packages/performance/src/services/perf_logger.ts index ac506dab516..74373b47f82 100644 --- a/packages/performance/src/services/perf_logger.ts +++ b/packages/performance/src/services/perf_logger.ts @@ -32,7 +32,7 @@ import { } from './initialization_service'; import { transportHandler } from './transport_service'; import { SDK_VERSION } from '../constants'; -import { FirebaseApp } from '@firebase/app-exp'; +import { FirebaseApp } from '@firebase/app'; import { getAppId } from '../utils/app_utils'; const enum ResourceType { diff --git a/packages/performance/src/services/remote_config_service.test.ts b/packages/performance/src/services/remote_config_service.test.ts index 9baf2d3a8a8..90a86ddd73e 100644 --- a/packages/performance/src/services/remote_config_service.test.ts +++ b/packages/performance/src/services/remote_config_service.test.ts @@ -22,7 +22,7 @@ import { CONFIG_EXPIRY_LOCAL_STORAGE_KEY } from '../constants'; import { setupApi, Api } from './api_service'; import * as iidService from './iid_service'; import { getConfig } from './remote_config_service'; -import { FirebaseApp } from '@firebase/app-exp'; +import { FirebaseApp } from '@firebase/app'; import '../../test/setup'; import { FirebaseInstallations } from '@firebase/installations-types'; import { PerformanceController } from '../controllers/perf'; diff --git a/packages/performance/src/utils/app_utils.ts b/packages/performance/src/utils/app_utils.ts index 0e34c74b61c..4eb19526935 100644 --- a/packages/performance/src/utils/app_utils.ts +++ b/packages/performance/src/utils/app_utils.ts @@ -16,7 +16,7 @@ */ import { ERROR_FACTORY, ErrorCode } from './errors'; -import { FirebaseApp } from '@firebase/app-exp'; +import { FirebaseApp } from '@firebase/app'; export function getAppId(firebaseApp: FirebaseApp): string { const appId = firebaseApp.options?.appId; From 7c2dd570f0605d59c0d58cf782cfbf55a533de34 Mon Sep 17 00:00:00 2001 From: Feiyang1 Date: Wed, 18 Aug 2021 17:40:02 -0700 Subject: [PATCH 10/38] migrate remoteconfig --- ...config-exp.api.md => remote-config.api.md} | 152 +++++++-------- packages/remote-config-compat/README.md | 2 +- packages/remote-config-compat/package.json | 7 +- .../remote-config-compat/rollup.config.js | 40 +++- .../rollup.config.release.js | 67 ------- .../remote-config-compat/rollup.shared.js | 52 ------ packages/remote-config-compat/src/index.ts | 4 +- .../src/remoteConfig.test.ts | 2 +- .../remote-config-compat/src/remoteConfig.ts | 2 +- packages/remote-config-compat/test/util.ts | 2 +- packages/remote-config-types/index.d.ts | 2 +- packages/remote-config/CHANGELOG.md | 174 ++++++++++++++++++ packages/remote-config/package.json | 18 +- packages/remote-config/rollup.config.js | 40 +++- .../remote-config/rollup.config.release.js | 73 -------- packages/remote-config/rollup.shared.js | 54 ------ packages/remote-config/src/api.ts | 2 +- .../remote-config/src/client/rest_client.ts | 2 +- packages/remote-config/src/constants.ts | 2 +- packages/remote-config/src/public_types.ts | 2 +- packages/remote-config/src/register.ts | 8 +- packages/remote-config/src/remote_config.ts | 2 +- .../remote-config/test/remote_config.test.ts | 2 +- packages/remote-config/test_app/index.html | 4 +- 24 files changed, 342 insertions(+), 373 deletions(-) rename common/api-review/{remote-config-exp.api.md => remote-config.api.md} (91%) delete mode 100644 packages/remote-config-compat/rollup.config.release.js delete mode 100644 packages/remote-config-compat/rollup.shared.js create mode 100644 packages/remote-config/CHANGELOG.md delete mode 100644 packages/remote-config/rollup.config.release.js delete mode 100644 packages/remote-config/rollup.shared.js diff --git a/common/api-review/remote-config-exp.api.md b/common/api-review/remote-config.api.md similarity index 91% rename from common/api-review/remote-config-exp.api.md rename to common/api-review/remote-config.api.md index 8a7dec2dadd..6b97c4aa59a 100644 --- a/common/api-review/remote-config-exp.api.md +++ b/common/api-review/remote-config.api.md @@ -1,76 +1,76 @@ -## API Report File for "@firebase/remote-config-exp" - -> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). - -```ts - -import { FirebaseApp } from '@firebase/app-exp'; - -// @public -export function activate(remoteConfig: RemoteConfig): Promise; - -// @public -export function ensureInitialized(remoteConfig: RemoteConfig): Promise; - -// @public -export function fetchAndActivate(remoteConfig: RemoteConfig): Promise; - -// @public -export function fetchConfig(remoteConfig: RemoteConfig): Promise; - -// @public -export type FetchStatus = 'no-fetch-yet' | 'success' | 'failure' | 'throttle'; - -// @public -export function getAll(remoteConfig: RemoteConfig): Record; - -// @public -export function getBoolean(remoteConfig: RemoteConfig, key: string): boolean; - -// @public -export function getNumber(remoteConfig: RemoteConfig, key: string): number; - -// @public (undocumented) -export function getRemoteConfig(app?: FirebaseApp): RemoteConfig; - -// @public -export function getString(remoteConfig: RemoteConfig, key: string): string; - -// @public -export function getValue(remoteConfig: RemoteConfig, key: string): Value; - -// @public -export type LogLevel = 'debug' | 'error' | 'silent'; - -// @public -export interface RemoteConfig { - defaultConfig: { - [key: string]: string | number | boolean; - }; - fetchTimeMillis: number; - lastFetchStatus: FetchStatus; - settings: RemoteConfigSettings; -} - -// @public -export interface RemoteConfigSettings { - fetchTimeoutMillis: number; - minimumFetchIntervalMillis: number; -} - -// @public -export function setLogLevel(remoteConfig: RemoteConfig, logLevel: LogLevel): void; - -// @public -export interface Value { - asBoolean(): boolean; - asNumber(): number; - asString(): string; - getSource(): ValueSource; -} - -// @public -export type ValueSource = 'static' | 'default' | 'remote'; - - -``` +## API Report File for "@firebase/remote-config" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts + +import { FirebaseApp } from '@firebase/app'; + +// @public +export function activate(remoteConfig: RemoteConfig): Promise; + +// @public +export function ensureInitialized(remoteConfig: RemoteConfig): Promise; + +// @public +export function fetchAndActivate(remoteConfig: RemoteConfig): Promise; + +// @public +export function fetchConfig(remoteConfig: RemoteConfig): Promise; + +// @public +export type FetchStatus = 'no-fetch-yet' | 'success' | 'failure' | 'throttle'; + +// @public +export function getAll(remoteConfig: RemoteConfig): Record; + +// @public +export function getBoolean(remoteConfig: RemoteConfig, key: string): boolean; + +// @public +export function getNumber(remoteConfig: RemoteConfig, key: string): number; + +// @public (undocumented) +export function getRemoteConfig(app?: FirebaseApp): RemoteConfig; + +// @public +export function getString(remoteConfig: RemoteConfig, key: string): string; + +// @public +export function getValue(remoteConfig: RemoteConfig, key: string): Value; + +// @public +export type LogLevel = 'debug' | 'error' | 'silent'; + +// @public +export interface RemoteConfig { + defaultConfig: { + [key: string]: string | number | boolean; + }; + fetchTimeMillis: number; + lastFetchStatus: FetchStatus; + settings: RemoteConfigSettings; +} + +// @public +export interface RemoteConfigSettings { + fetchTimeoutMillis: number; + minimumFetchIntervalMillis: number; +} + +// @public +export function setLogLevel(remoteConfig: RemoteConfig, logLevel: LogLevel): void; + +// @public +export interface Value { + asBoolean(): boolean; + asNumber(): number; + asString(): string; + getSource(): ValueSource; +} + +// @public +export type ValueSource = 'static' | 'default' | 'remote'; + + +``` diff --git a/packages/remote-config-compat/README.md b/packages/remote-config-compat/README.md index 2813f0ae9d4..dd27f72bd4b 100644 --- a/packages/remote-config-compat/README.md +++ b/packages/remote-config-compat/README.md @@ -1,5 +1,5 @@ # @firebase/remote-compat -This is the compat package that recreates the v8 APIs. +This is the compat package that recreates the v8 APIs. **This package is not intended for direct usage, and should only be used via the officially supported [firebase](https://www.npmjs.com/package/firebase) package.** diff --git a/packages/remote-config-compat/package.json b/packages/remote-config-compat/package.json index bf69c1b943a..f5ebbb75545 100644 --- a/packages/remote-config-compat/package.json +++ b/packages/remote-config-compat/package.json @@ -3,7 +3,6 @@ "version": "0.0.900", "description": "The compatibility package of Remote Config", "author": "Firebase (https://firebase.google.com/)", - "private": true, "main": "dist/index.cjs.js", "browser": "dist/index.esm2017.js", "module": "dist/index.esm2017.js", @@ -14,7 +13,7 @@ "lint": "eslint -c .eslintrc.js '**/*.ts' --ignore-path '../../.gitignore'", "lint:fix": "eslint --fix -c .eslintrc.js '**/*.ts' --ignore-path '../../.gitignore'", "build": "rollup -c", - "build:release": "rollup -c rollup.config.release.js && yarn add-compat-overloads", + "build:release": "yarn build && yarn add-compat-overloads", "build:deps": "lerna run --scope @firebase/remote-config-compat --include-dependencies build", "dev": "rollup -c -w", "test": "run-p lint test:all", @@ -22,14 +21,14 @@ "test:ci": "node ../../scripts/run_tests_in_ci.js -s test:all", "test:browser": "karma start --single-run", "test:browser:debug": "karma start --browsers Chrome --auto-watch", - "add-compat-overloads": "ts-node-script ../../scripts/exp/create-overloads.ts -i ../remote-config-exp/dist/remote-config-exp-public.d.ts -o dist/src/index.d.ts -a -r RemoteConfig:RemoteConfigCompat -r FirebaseApp:FirebaseAppCompat --moduleToEnhance @firebase/remote-config" + "add-compat-overloads": "ts-node-script ../../scripts/exp/create-overloads.ts -i ../remote-config/dist/remote-config-public.d.ts -o dist/src/index.d.ts -a -r RemoteConfig:RemoteConfigCompat -r FirebaseApp:FirebaseAppCompat --moduleToEnhance @firebase/remote-config" }, "license": "Apache-2.0", "peerDependencies": { "@firebase/app-compat": "0.x" }, "dependencies": { - "@firebase/remote-config-exp": "0.0.900", + "@firebase/remote-config": "0.1.43", "@firebase/remote-config-types": "0.1.9", "@firebase/util": "1.2.0", "@firebase/logger": "0.2.6", diff --git a/packages/remote-config-compat/rollup.config.js b/packages/remote-config-compat/rollup.config.js index 4df9d8a2f48..13612393d50 100644 --- a/packages/remote-config-compat/rollup.config.js +++ b/packages/remote-config-compat/rollup.config.js @@ -18,8 +18,9 @@ import typescriptPlugin from 'rollup-plugin-typescript2'; import typescript from 'typescript'; import json from '@rollup/plugin-json'; -import { es5BuildsNoPlugin, es2017BuildsNoPlugin } from './rollup.shared.js'; +import pkg from './package.json'; +const deps = Object.keys(Object.assign({}, pkg.peerDependencies, pkg.dependencies)); /** * ES5 Builds */ @@ -30,10 +31,20 @@ const es5BuildPlugins = [ json() ]; -const es5Builds = es5BuildsNoPlugin.map(build => ({ - ...build, - plugins: es5BuildPlugins -})); +const es5Builds = [ + /** + * Browser Builds + */ + { + input: 'src/index.ts', + output: [ + { file: pkg.main, format: 'cjs', sourcemap: true }, + { file: pkg.esm5, format: 'es', sourcemap: true } + ], + external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)), + plugins: es5BuildPlugins + } +]; /** * ES2017 Builds @@ -52,9 +63,20 @@ const es2017BuildPlugins = [ }) ]; -const es2017Builds = es2017BuildsNoPlugin.map(build => ({ - ...build, - plugins: es2017BuildPlugins -})); +const es2017Builds = [ + /** + * Browser Builds + */ + { + input: 'src/index.ts', + output: { + file: pkg.browser, + format: 'es', + sourcemap: true + }, + external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)), + plugins: es2017BuildPlugins + } +]; export default [...es5Builds, ...es2017Builds]; diff --git a/packages/remote-config-compat/rollup.config.release.js b/packages/remote-config-compat/rollup.config.release.js deleted file mode 100644 index b0b1dc5154a..00000000000 --- a/packages/remote-config-compat/rollup.config.release.js +++ /dev/null @@ -1,67 +0,0 @@ -/** - * @license - * Copyright 2020 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import typescriptPlugin from 'rollup-plugin-typescript2'; -import typescript from 'typescript'; -import json from '@rollup/plugin-json'; -import { es5BuildsNoPlugin, es2017BuildsNoPlugin } from './rollup.shared.js'; -import { importPathTransformer } from '../../scripts/exp/ts-transform-import-path'; - -/** - * ES5 Builds - */ -const es5BuildPlugins = [ - typescriptPlugin({ - typescript, - clean: true, - abortOnError: false, - transformers: [importPathTransformer] - }), - json() -]; - -const es5Builds = es5BuildsNoPlugin.map(build => ({ - ...build, - plugins: es5BuildPlugins -})); - -/** - * ES2017 Builds - */ -const es2017BuildPlugins = [ - typescriptPlugin({ - typescript, - tsconfigOverride: { - compilerOptions: { - target: 'es2017' - } - }, - clean: true, - abortOnError: false, - transformers: [importPathTransformer] - }), - json({ - preferConst: true - }) -]; - -const es2017Builds = es2017BuildsNoPlugin.map(build => ({ - ...build, - plugins: es2017BuildPlugins -})); - -export default [...es5Builds, ...es2017Builds]; diff --git a/packages/remote-config-compat/rollup.shared.js b/packages/remote-config-compat/rollup.shared.js deleted file mode 100644 index 3a873a01807..00000000000 --- a/packages/remote-config-compat/rollup.shared.js +++ /dev/null @@ -1,52 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import pkg from './package.json'; - -const deps = [ - ...Object.keys(Object.assign({}, pkg.peerDependencies, pkg.dependencies)), - '@firebase/remote-config' -]; - -export const es5BuildsNoPlugin = [ - /** - * Browser Builds - */ - { - input: 'src/index.ts', - output: [ - { file: pkg.main, format: 'cjs', sourcemap: true }, - { file: pkg.esm5, format: 'es', sourcemap: true } - ], - external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)) - } -]; - -export const es2017BuildsNoPlugin = [ - /** - * Browser Builds - */ - { - input: 'src/index.ts', - output: { - file: pkg.browser, - format: 'es', - sourcemap: true - }, - external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)) - } -]; diff --git a/packages/remote-config-compat/src/index.ts b/packages/remote-config-compat/src/index.ts index 88de17406cf..df21c25e69d 100644 --- a/packages/remote-config-compat/src/index.ts +++ b/packages/remote-config-compat/src/index.ts @@ -52,8 +52,8 @@ function remoteConfigFactory( { instanceIdentifier: namespace }: InstanceFactoryOptions ): RemoteConfigCompatImpl { const app = container.getProvider('app-compat').getImmediate(); - // The following call will always succeed because rc `import {...} from '@firebase/remote-config-exp'` - const remoteConfig = container.getProvider('remote-config-exp').getImmediate({ + // The following call will always succeed because rc `import {...} from '@firebase/remote-config'` + const remoteConfig = container.getProvider('remote-config').getImmediate({ identifier: namespace }); diff --git a/packages/remote-config-compat/src/remoteConfig.test.ts b/packages/remote-config-compat/src/remoteConfig.test.ts index 0d85990935e..3a9b51d57ee 100644 --- a/packages/remote-config-compat/src/remoteConfig.test.ts +++ b/packages/remote-config-compat/src/remoteConfig.test.ts @@ -20,7 +20,7 @@ import { expect } from 'chai'; import { stub } from 'sinon'; import { RemoteConfigCompatImpl } from './remoteConfig'; import { getFakeApp, getFakeModularRemoteConfig } from '../test/util'; -import * as modularApi from '@firebase/remote-config-exp'; +import * as modularApi from '@firebase/remote-config'; describe('Remote Config Compat', () => { let remoteConfig!: RemoteConfigCompatImpl; diff --git a/packages/remote-config-compat/src/remoteConfig.ts b/packages/remote-config-compat/src/remoteConfig.ts index 61b02ce62d8..af529b7a670 100644 --- a/packages/remote-config-compat/src/remoteConfig.ts +++ b/packages/remote-config-compat/src/remoteConfig.ts @@ -35,7 +35,7 @@ import { getNumber, getString, getValue -} from '@firebase/remote-config-exp'; +} from '@firebase/remote-config'; export class RemoteConfigCompatImpl implements RemoteConfigCompat, _FirebaseService { diff --git a/packages/remote-config-compat/test/util.ts b/packages/remote-config-compat/test/util.ts index 387b6bdd4b1..fa0c1f39486 100644 --- a/packages/remote-config-compat/test/util.ts +++ b/packages/remote-config-compat/test/util.ts @@ -16,7 +16,7 @@ */ import { FirebaseApp } from '@firebase/app-compat'; -import { RemoteConfig } from '@firebase/remote-config-exp'; +import { RemoteConfig } from '@firebase/remote-config'; export function getFakeApp(): FirebaseApp { return { diff --git a/packages/remote-config-types/index.d.ts b/packages/remote-config-types/index.d.ts index 27b80975b6a..962248d9593 100644 --- a/packages/remote-config-types/index.d.ts +++ b/packages/remote-config-types/index.d.ts @@ -175,6 +175,6 @@ export type LogLevel = 'debug' | 'error' | 'silent'; declare module '@firebase/component' { interface NameServiceMapping { - 'remoteConfig': RemoteConfig; + 'remoteConfig-compat': RemoteConfig; } } diff --git a/packages/remote-config/CHANGELOG.md b/packages/remote-config/CHANGELOG.md new file mode 100644 index 00000000000..883cc23efb3 --- /dev/null +++ b/packages/remote-config/CHANGELOG.md @@ -0,0 +1,174 @@ +# @firebase/remote-config + +## 0.1.42 + +### Patch Changes + +- Updated dependencies [[`a3cbe719b`](https://github.com/firebase/firebase-js-sdk/commit/a3cbe719b1bd733a5c4c15ee0d0e6388d512054c)]: + - @firebase/util@1.2.0 + - @firebase/component@0.5.5 + - @firebase/installations@0.4.31 + +## 0.1.41 + +### Patch Changes + +- Updated dependencies [[`56a6a9d4a`](https://github.com/firebase/firebase-js-sdk/commit/56a6a9d4af2766154584a0f66d3c4d8024d74ba5)]: + - @firebase/component@0.5.4 + - @firebase/installations@0.4.30 + +## 0.1.40 + +### Patch Changes + +- Updated dependencies [[`725ab4684`](https://github.com/firebase/firebase-js-sdk/commit/725ab4684ef0999a12f71e704c204a00fb030e5d)]: + - @firebase/component@0.5.3 + - @firebase/installations@0.4.29 + +## 0.1.39 + +### Patch Changes + +- Updated dependencies [[`4c4b6aed9`](https://github.com/firebase/firebase-js-sdk/commit/4c4b6aed9757c9a7e75fb698a15e53274f93880b)]: + - @firebase/component@0.5.2 + - @firebase/installations@0.4.28 + +## 0.1.38 + +### Patch Changes + +- Updated dependencies [[`5fbc5fb01`](https://github.com/firebase/firebase-js-sdk/commit/5fbc5fb0140d7da980fd7ebbfbae810f8c64ae19)]: + - @firebase/component@0.5.1 + - @firebase/installations@0.4.27 + +## 0.1.37 + +### Patch Changes + +- Updated dependencies [[`c34ac7a92`](https://github.com/firebase/firebase-js-sdk/commit/c34ac7a92a616915f38d192654db7770d81747ae), [`ac4ad08a2`](https://github.com/firebase/firebase-js-sdk/commit/ac4ad08a284397ec966e991dd388bb1fba857467)]: + - @firebase/component@0.5.0 + - @firebase/util@1.1.0 + - @firebase/installations@0.4.26 + +## 0.1.36 + +### Patch Changes + +- Updated dependencies [[`7354a0ed4`](https://github.com/firebase/firebase-js-sdk/commit/7354a0ed438f4e3df6577e4927e8c8f8f1fbbfda)]: + - @firebase/util@1.0.0 + - @firebase/component@0.4.1 + - @firebase/installations@0.4.25 + +## 0.1.35 + +### Patch Changes + +- Updated dependencies [[`f24d8961b`](https://github.com/firebase/firebase-js-sdk/commit/f24d8961b3b87821413297688803fc85113086b3)]: + - @firebase/component@0.4.0 + - @firebase/installations@0.4.24 + +## 0.1.34 + +### Patch Changes + +- Updated dependencies [[`de5f90501`](https://github.com/firebase/firebase-js-sdk/commit/de5f9050137acc9ed1490082e5aa429b5de3cb2a)]: + - @firebase/util@0.4.1 + - @firebase/component@0.3.1 + - @firebase/installations@0.4.23 + +## 0.1.33 + +### Patch Changes + +- [`5c1a83ed7`](https://github.com/firebase/firebase-js-sdk/commit/5c1a83ed70bae979322bd8751c0885d683ce4bf3) [#4595](https://github.com/firebase/firebase-js-sdk/pull/4595) - Component facotry now takes an options object. And added `Provider.initialize()` that can be used to pass an options object to the component factory. + +- Updated dependencies [[`5c1a83ed7`](https://github.com/firebase/firebase-js-sdk/commit/5c1a83ed70bae979322bd8751c0885d683ce4bf3)]: + - @firebase/component@0.3.0 + - @firebase/installations@0.4.22 + +## 0.1.32 + +### Patch Changes + +- Updated dependencies [[`ec95df3d0`](https://github.com/firebase/firebase-js-sdk/commit/ec95df3d07e5f091f2a7f7327e46417f64d04b4e)]: + - @firebase/util@0.4.0 + - @firebase/component@0.2.1 + - @firebase/installations@0.4.21 + +## 0.1.31 + +### Patch Changes + +- Updated dependencies [[`6afe42613`](https://github.com/firebase/firebase-js-sdk/commit/6afe42613ed3d7a842d378dc1a09a795811db2ac)]: + - @firebase/component@0.2.0 + - @firebase/installations@0.4.20 + +## 0.1.30 + +### Patch Changes + +- Updated dependencies [[`9cf727fcc`](https://github.com/firebase/firebase-js-sdk/commit/9cf727fcc3d049551b16ae0698ac33dc2fe45ada)]: + - @firebase/util@0.3.4 + - @firebase/component@0.1.21 + - @firebase/installations@0.4.19 + +## 0.1.29 + +### Patch Changes + +- [`a5768b0aa`](https://github.com/firebase/firebase-js-sdk/commit/a5768b0aa7d7ce732279931aa436e988c9f36487) [#3932](https://github.com/firebase/firebase-js-sdk/pull/3932) - Point browser field to esm build. Now you need to use default import instead of namespace import to import firebase. + + Before this change + + ``` + import * as firebase from 'firebase/app'; + ``` + + After this change + + ``` + import firebase from 'firebase/app'; + ``` + +- Updated dependencies [[`a5768b0aa`](https://github.com/firebase/firebase-js-sdk/commit/a5768b0aa7d7ce732279931aa436e988c9f36487), [`7d916d905`](https://github.com/firebase/firebase-js-sdk/commit/7d916d905ba16816ac8ac7c8748c83831ff614ce)]: + - @firebase/component@0.1.20 + - @firebase/util@0.3.3 + - @firebase/installations@0.4.18 + +## 0.1.28 + +### Patch Changes + +- [`fb3b095e4`](https://github.com/firebase/firebase-js-sdk/commit/fb3b095e4b7c8f57fdb3172bc039c84576abf290) [#2800](https://github.com/firebase/firebase-js-sdk/pull/2800) - Moved `calculateBackoffMillis()` exponential backoff function to util and have remote-config + import it from util. +- Updated dependencies [[`da1c7df79`](https://github.com/firebase/firebase-js-sdk/commit/da1c7df7982b08bbef82fcc8d93255f3e2d23cca), [`fb3b095e4`](https://github.com/firebase/firebase-js-sdk/commit/fb3b095e4b7c8f57fdb3172bc039c84576abf290)]: + - @firebase/component@0.1.19 + - @firebase/util@0.3.2 + - @firebase/installations@0.4.17 + +## 0.1.27 + +### Patch Changes + +- Updated dependencies [[`d4ca3da0`](https://github.com/firebase/firebase-js-sdk/commit/d4ca3da0a59fcea1261ba69d7eb663bba38d3089)]: + - @firebase/util@0.3.1 + - @firebase/component@0.1.18 + - @firebase/installations@0.4.16 + +## 0.1.26 + +### Patch Changes + +- Updated dependencies [[`a87676b8`](https://github.com/firebase/firebase-js-sdk/commit/a87676b84b78ccc2f057a22eb947a5d13402949c)]: + - @firebase/util@0.3.0 + - @firebase/component@0.1.17 + - @firebase/installations@0.4.15 + +## 0.1.25 + +### Patch Changes + +- Updated dependencies [[`a754645e`](https://github.com/firebase/firebase-js-sdk/commit/a754645ec2be1b8c205f25f510196eee298b0d6e)]: + - @firebase/component@0.1.16 + - @firebase/installations@0.4.14 + - @firebase/logger@0.2.6 diff --git a/packages/remote-config/package.json b/packages/remote-config/package.json index 9fcf8db2535..ac52151ddf7 100644 --- a/packages/remote-config/package.json +++ b/packages/remote-config/package.json @@ -1,9 +1,8 @@ { - "name": "@firebase/remote-config-exp", - "version": "0.0.900", + "name": "@firebase/remote-config", + "version": "0.1.43", "description": "The Remote Config package of the Firebase JS SDK", "author": "Firebase (https://firebase.google.com/)", - "private": true, "main": "dist/index.cjs.js", "browser": "dist/index.esm2017.js", "module": "dist/index.esm2017.js", @@ -14,8 +13,8 @@ "lint": "eslint -c .eslintrc.js '**/*.ts' --ignore-path '../../.gitignore'", "lint:fix": "eslint --fix -c .eslintrc.js '**/*.ts' --ignore-path '../../.gitignore'", "build": "rollup -c && yarn api-report", - "build:deps": "lerna run --scope @firebase/remote-config-exp --include-dependencies build", - "build:release": "rollup -c rollup.config.release.js && yarn api-report && yarn typings:public", + "build:deps": "lerna run --scope @firebase/remote-config --include-dependencies build", + "build:release": "yarn build && yarn typings:public", "dev": "rollup -c -w", "test": "run-p lint test:browser", "test:ci": "node ../../scripts/run_tests_in_ci.js -s test:browser", @@ -23,17 +22,16 @@ "test:debug": "karma start --browsers=Chrome --auto-watch", "prettier": "prettier --write '{src,test}/**/*.{js,ts}'", "api-report": "api-extractor run --local --verbose", - "predoc": "node ../../scripts/exp/remove-exp.js temp", "doc": "api-documenter markdown --input temp --output docs", "build:doc": "yarn build && yarn doc", - "typings:public": "node ../../scripts/exp/use_typings.js ./dist/remote-config-exp-public.d.ts", + "typings:public": "node ../../scripts/exp/use_typings.js ./dist/remote-config-public.d.ts", "typings:internal": "node ../../scripts/exp/use_typings.js ./dist/src/index.d.ts" }, "peerDependencies": { - "@firebase/app-exp": "0.x" + "@firebase/app": "0.x" }, "dependencies": { - "@firebase/installations-exp": "0.0.900", + "@firebase/installations": "0.4.32", "@firebase/logger": "0.2.6", "@firebase/util": "1.2.0", "@firebase/component": "0.5.5", @@ -41,7 +39,7 @@ }, "license": "Apache-2.0", "devDependencies": { - "@firebase/app-exp": "0.0.900", + "@firebase/app": "0.6.30", "rollup": "2.52.2", "rollup-plugin-typescript2": "0.30.0", "typescript": "4.2.2" diff --git a/packages/remote-config/rollup.config.js b/packages/remote-config/rollup.config.js index b57e5ad73ee..cc729f1a0da 100644 --- a/packages/remote-config/rollup.config.js +++ b/packages/remote-config/rollup.config.js @@ -18,8 +18,9 @@ import json from '@rollup/plugin-json'; // Enables package.json import in TypeScript. import typescriptPlugin from 'rollup-plugin-typescript2'; import typescript from 'typescript'; -import { es2017BuildsNoPlugin, es5BuildsNoPlugin } from './rollup.shared'; +import pkg from './package.json'; +const deps = Object.keys(Object.assign({}, pkg.peerDependencies, pkg.dependencies)); /** * ES5 Builds */ @@ -30,10 +31,20 @@ const es5BuildPlugins = [ json() ]; -const es5Builds = es5BuildsNoPlugin.map(build => ({ - ...build, - plugins: es5BuildPlugins -})); +const es5Builds = [ + /** + * Browser Builds + */ + { + input: 'src/index.ts', + output: [ + { file: pkg.main, format: 'cjs', sourcemap: true }, + { file: pkg.esm5, format: 'es', sourcemap: true } + ], + external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)), + plugins: es5BuildPlugins + } +]; /** * ES2017 Builds @@ -50,9 +61,20 @@ const es2017BuildPlugins = [ json({ preferConst: true }) ]; -const es2017Builds = es2017BuildsNoPlugin.map(build => ({ - ...build, - plugins: es2017BuildPlugins -})); +const es2017Builds = [ + { + /** + * Browser Build + */ + input: 'src/index.ts', + output: { + file: pkg.browser, + format: 'es', + sourcemap: true + }, + external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)), + plugins: es2017BuildPlugins + } +]; export default [...es5Builds, ...es2017Builds]; diff --git a/packages/remote-config/rollup.config.release.js b/packages/remote-config/rollup.config.release.js deleted file mode 100644 index 7e38601f87c..00000000000 --- a/packages/remote-config/rollup.config.release.js +++ /dev/null @@ -1,73 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import typescriptPlugin from 'rollup-plugin-typescript2'; -import typescript from 'typescript'; -import json from '@rollup/plugin-json'; -import { importPathTransformer } from '../../scripts/exp/ts-transform-import-path'; -import { es2017BuildsNoPlugin, es5BuildsNoPlugin } from './rollup.shared'; - -/** - * ES5 Builds - */ -const es5BuildPlugins = [ - typescriptPlugin({ - typescript, - clean: true, - abortOnError: false, - transformers: [importPathTransformer] - }), - json() -]; - -const es5Builds = es5BuildsNoPlugin.map(build => ({ - ...build, - plugins: es5BuildPlugins, - treeshake: { - moduleSideEffects: (id, external) => id === '@firebase/installations' - } -})); - -/** - * ES2017 Builds - */ -const es2017BuildPlugins = [ - typescriptPlugin({ - typescript, - tsconfigOverride: { - compilerOptions: { - target: 'es2017' - } - }, - abortOnError: false, - clean: true, - transformers: [importPathTransformer] - }), - json({ - preferConst: true - }) -]; - -const es2017Builds = es2017BuildsNoPlugin.map(build => ({ - ...build, - plugins: es2017BuildPlugins, - treeshake: { - moduleSideEffects: (id, external) => id === '@firebase/installations' - } -})); - -export default [...es5Builds, ...es2017Builds]; diff --git a/packages/remote-config/rollup.shared.js b/packages/remote-config/rollup.shared.js deleted file mode 100644 index 397949ded6b..00000000000 --- a/packages/remote-config/rollup.shared.js +++ /dev/null @@ -1,54 +0,0 @@ -/** - * @license - * Copyright 2018 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import pkg from './package.json'; - -const deps = [ - ...Object.keys(Object.assign({}, pkg.peerDependencies, pkg.dependencies)), - '@firebase/app' -]; - -export const es5BuildsNoPlugin = [ - /** - * Browser Builds - */ - { - input: 'src/index.ts', - output: [ - { file: pkg.main, format: 'cjs', sourcemap: true }, - { file: pkg.esm5, format: 'es', sourcemap: true } - ], - external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)) - } -]; - -/** - * ES2017 Builds - */ -export const es2017BuildsNoPlugin = [ - { - /** - * Browser Build - */ - input: 'src/index.ts', - output: { - file: pkg.browser, - format: 'es', - sourcemap: true - }, - external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)) - } -]; diff --git a/packages/remote-config/src/api.ts b/packages/remote-config/src/api.ts index bbad3130f7a..3bedf579548 100644 --- a/packages/remote-config/src/api.ts +++ b/packages/remote-config/src/api.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { _getProvider, FirebaseApp, getApp } from '@firebase/app-exp'; +import { _getProvider, FirebaseApp, getApp } from '@firebase/app'; import { LogLevel as RemoteConfigLogLevel, RemoteConfig, diff --git a/packages/remote-config/src/client/rest_client.ts b/packages/remote-config/src/client/rest_client.ts index 4d1d19c0b4e..fe8c0156242 100644 --- a/packages/remote-config/src/client/rest_client.ts +++ b/packages/remote-config/src/client/rest_client.ts @@ -23,7 +23,7 @@ import { } from './remote_config_fetch_client'; import { ERROR_FACTORY, ErrorCode } from '../errors'; import { getUserLanguage } from '../language'; -import { _FirebaseInstallationsInternal } from '@firebase/installations-exp'; +import { _FirebaseInstallationsInternal } from '@firebase/installations'; /** * Defines request body parameters required to call the fetch API: diff --git a/packages/remote-config/src/constants.ts b/packages/remote-config/src/constants.ts index 6bc7d1d5547..365d9037f86 100644 --- a/packages/remote-config/src/constants.ts +++ b/packages/remote-config/src/constants.ts @@ -15,4 +15,4 @@ * limitations under the License. */ -export const RC_COMPONENT_NAME = 'remote-config-exp'; +export const RC_COMPONENT_NAME = 'remote-config'; diff --git a/packages/remote-config/src/public_types.ts b/packages/remote-config/src/public_types.ts index b25004f8184..eadfac15dbc 100644 --- a/packages/remote-config/src/public_types.ts +++ b/packages/remote-config/src/public_types.ts @@ -130,6 +130,6 @@ export type LogLevel = 'debug' | 'error' | 'silent'; declare module '@firebase/component' { interface NameServiceMapping { - 'remote-config-exp': RemoteConfig; + 'remote-config': RemoteConfig; } } diff --git a/packages/remote-config/src/register.ts b/packages/remote-config/src/register.ts index ea71928ffcc..b06f76b380a 100644 --- a/packages/remote-config/src/register.ts +++ b/packages/remote-config/src/register.ts @@ -18,7 +18,7 @@ import { _registerComponent, registerVersion, SDK_VERSION -} from '@firebase/app-exp'; +} from '@firebase/app'; import { Component, ComponentType, @@ -39,7 +39,7 @@ import { Storage } from './storage/storage'; import { StorageCache } from './storage/storage_cache'; // This needs to be in the same file that calls `getProvider()` on the component // or it will get tree-shaken out. -import '@firebase/installations-exp'; +import '@firebase/installations'; export function registerRemoteConfig(): void { _registerComponent( @@ -58,10 +58,10 @@ export function registerRemoteConfig(): void { ): RemoteConfig { /* Dependencies */ // getImmediate for FirebaseApp will always succeed - const app = container.getProvider('app-exp').getImmediate(); + const app = container.getProvider('app').getImmediate(); // The following call will always succeed because rc has `import '@firebase/installations'` const installations = container - .getProvider('installations-exp-internal') + .getProvider('installations-internal') .getImmediate(); // Guards against the SDK being used in non-browser environments. diff --git a/packages/remote-config/src/remote_config.ts b/packages/remote-config/src/remote_config.ts index 8e0b23c73d6..c7b1a3de5e1 100644 --- a/packages/remote-config/src/remote_config.ts +++ b/packages/remote-config/src/remote_config.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { FirebaseApp } from '@firebase/app-exp'; +import { FirebaseApp } from '@firebase/app'; import { RemoteConfig as RemoteConfigType, FetchStatus, diff --git a/packages/remote-config/test/remote_config.test.ts b/packages/remote-config/test/remote_config.test.ts index cb1f6066562..855a03e3fb2 100644 --- a/packages/remote-config/test/remote_config.test.ts +++ b/packages/remote-config/test/remote_config.test.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { FirebaseApp } from '@firebase/app-exp'; +import { FirebaseApp } from '@firebase/app'; import { RemoteConfig as RemoteConfigType, LogLevel as RemoteConfigLogLevel diff --git a/packages/remote-config/test_app/index.html b/packages/remote-config/test_app/index.html index effc7bd1492..24de216b710 100644 --- a/packages/remote-config/test_app/index.html +++ b/packages/remote-config/test_app/index.html @@ -3,8 +3,8 @@ Test App - - + + - - -

- - -

-

- - -

-

- - -

-

- - -

-

- - - - -

-

Requests

-
-

Database Contents

-
- - - diff --git a/packages-old/installations/test-app/index.js b/packages-old/installations/test-app/index.js deleted file mode 100644 index f534f411aac..00000000000 --- a/packages-old/installations/test-app/index.js +++ /dev/null @@ -1,113 +0,0 @@ -/** - * @license - * Copyright 2019 Google Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -const DATABASE_NAME = 'firebase-installations-database'; -const DATABASE_VERSION = 1; -const OBJECT_STORE_NAME = 'firebase-installations-store'; - -const requestLogs = []; -let db; - -window.indexedDB.open(DATABASE_NAME, DATABASE_VERSION).onsuccess = event => { - db = event.target.result; - setInterval(refreshDatabase, 1000); -}; - -function refreshDatabase() { - const request = db - .transaction(OBJECT_STORE_NAME, 'readwrite') - .objectStore(OBJECT_STORE_NAME) - .getAll(); - - request.onsuccess = () => { - const dbElement = getElement('database'); - dbElement.innerHTML = request.result - .map(v => `

${format(v)}

`) - .join(''); - }; -} - -function clearDb() { - const request = db - .transaction(OBJECT_STORE_NAME, 'readwrite') - .objectStore(OBJECT_STORE_NAME) - .clear(); - request.onsuccess = refreshDatabase; -} - -function getElement(id) { - const element = document.getElementById(id); - if (!element) { - throw new Error(`Element not found: ${id}`); - } - return element; -} - -function getInputValue(elementId) { - const element = getElement(elementId); - return element.value; -} - -function getId() { - printRequest('Get ID', FirebaseInstallations.getId(getApp())); -} - -function getToken() { - printRequest('Get Token', FirebaseInstallations.getToken(getApp())); -} - -function deleteInstallation() { - printRequest( - 'Delete Installation', - FirebaseInstallations.deleteInstallation(getApp()) - ); -} - -async function printRequest(requestInfo, promise) { - const requestsElement = getElement('requests'); - requestsElement.innerHTML = '

Loading...

' + requestLogs.join(''); - let result; - try { - const request = await promise; - result = request ? format(request) : 'Completed successfully'; - } catch (e) { - result = e.toString(); - } - requestLogs.unshift(`

${requestInfo}:
${result}

`); - requestsElement.innerHTML = requestLogs.join(''); -} - -function format(o) { - const escapedString = JSON.stringify(o, null, 2); - return `${escapedString}`; -} - -function getApp() { - const appName = getInputValue('appName'); - const projectId = getInputValue('projectId'); - const apiKey = getInputValue('apiKey'); - const appId = getInputValue('appId'); - return { - name: appName, - options: { projectId, apiKey, appId } - }; -} - -getElement('getId').onclick = getId; -getElement('getToken').onclick = getToken; -getElement('deleteInstallation').onclick = deleteInstallation; -getElement('clearDb').onclick = clearDb; diff --git a/packages-old/installations/test-app/rollup.config.js b/packages-old/installations/test-app/rollup.config.js deleted file mode 100644 index 4a3f71fa295..00000000000 --- a/packages-old/installations/test-app/rollup.config.js +++ /dev/null @@ -1,48 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import typescriptPlugin from 'rollup-plugin-typescript2'; -import resolve from '@rollup/plugin-node-resolve'; -import commonjs from '@rollup/plugin-commonjs'; -import json from '@rollup/plugin-json'; -import { uglify } from 'rollup-plugin-uglify'; -import typescript from 'typescript'; - -/** - * Creates an iife build to run with the Test App. - */ -export default [ - { - input: 'src/functions/index.ts', - output: { - name: 'FirebaseInstallations', - file: 'test-app/sdk.js', - format: 'iife', - sourcemap: true - }, - plugins: [ - typescriptPlugin({ - typescript, - tsconfigOverride: { compilerOptions: { declaration: false } } - }), - json(), - resolve(), - commonjs(), - uglify() - ] - } -]; diff --git a/packages-old/installations/tsconfig.json b/packages-old/installations/tsconfig.json deleted file mode 100644 index b957e47de5d..00000000000 --- a/packages-old/installations/tsconfig.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "extends": "../../config/tsconfig.base.json", - "compilerOptions": { - "downlevelIteration": true, - "resolveJsonModule": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": true - }, - "include": ["src"] -} diff --git a/packages-old/messaging/.eslintrc.js b/packages-old/messaging/.eslintrc.js deleted file mode 100644 index 16276950320..00000000000 --- a/packages-old/messaging/.eslintrc.js +++ /dev/null @@ -1,9 +0,0 @@ -module.exports = { - extends: '../../config/.eslintrc.js', - parserOptions: { - project: 'tsconfig.json', - // to make vscode-eslint work with monorepo - // https://github.com/typescript-eslint/typescript-eslint/issues/251#issuecomment-463943250 - tsconfigRootDir: __dirname - } -}; diff --git a/packages-old/messaging/.npmignore b/packages-old/messaging/.npmignore deleted file mode 100644 index 682c8f74a52..00000000000 --- a/packages-old/messaging/.npmignore +++ /dev/null @@ -1,9 +0,0 @@ -# Directories not needed by end users -/src -test - -# Files not needed by end users -gulpfile.js -index.ts -karma.conf.js -tsconfig.json \ No newline at end of file diff --git a/packages-old/messaging/CHANGELOG.md b/packages-old/messaging/CHANGELOG.md deleted file mode 100644 index 7695acb21dd..00000000000 --- a/packages-old/messaging/CHANGELOG.md +++ /dev/null @@ -1,179 +0,0 @@ -# @firebase/messaging - -## 0.7.15 - -### Patch Changes - -- Updated dependencies [[`a3cbe719b`](https://github.com/firebase/firebase-js-sdk/commit/a3cbe719b1bd733a5c4c15ee0d0e6388d512054c)]: - - @firebase/util@1.2.0 - - @firebase/component@0.5.5 - - @firebase/installations@0.4.31 - -## 0.7.14 - -### Patch Changes - -- Updated dependencies [[`56a6a9d4a`](https://github.com/firebase/firebase-js-sdk/commit/56a6a9d4af2766154584a0f66d3c4d8024d74ba5)]: - - @firebase/component@0.5.4 - - @firebase/installations@0.4.30 - -## 0.7.13 - -### Patch Changes - -- Updated dependencies [[`725ab4684`](https://github.com/firebase/firebase-js-sdk/commit/725ab4684ef0999a12f71e704c204a00fb030e5d)]: - - @firebase/component@0.5.3 - - @firebase/installations@0.4.29 - -## 0.7.12 - -### Patch Changes - -- Updated dependencies [[`4c4b6aed9`](https://github.com/firebase/firebase-js-sdk/commit/4c4b6aed9757c9a7e75fb698a15e53274f93880b)]: - - @firebase/component@0.5.2 - - @firebase/installations@0.4.28 - -## 0.7.11 - -### Patch Changes - -- Updated dependencies [[`5fbc5fb01`](https://github.com/firebase/firebase-js-sdk/commit/5fbc5fb0140d7da980fd7ebbfbae810f8c64ae19)]: - - @firebase/component@0.5.1 - - @firebase/installations@0.4.27 - -## 0.7.10 - -### Patch Changes - -- Updated dependencies [[`c34ac7a92`](https://github.com/firebase/firebase-js-sdk/commit/c34ac7a92a616915f38d192654db7770d81747ae), [`ac4ad08a2`](https://github.com/firebase/firebase-js-sdk/commit/ac4ad08a284397ec966e991dd388bb1fba857467)]: - - @firebase/component@0.5.0 - - @firebase/util@1.1.0 - - @firebase/installations@0.4.26 - -## 0.7.9 - -### Patch Changes - -- Updated dependencies [[`7354a0ed4`](https://github.com/firebase/firebase-js-sdk/commit/7354a0ed438f4e3df6577e4927e8c8f8f1fbbfda)]: - - @firebase/util@1.0.0 - - @firebase/component@0.4.1 - - @firebase/installations@0.4.25 - -## 0.7.8 - -### Patch Changes - -- Updated dependencies [[`f24d8961b`](https://github.com/firebase/firebase-js-sdk/commit/f24d8961b3b87821413297688803fc85113086b3)]: - - @firebase/component@0.4.0 - - @firebase/installations@0.4.24 - -## 0.7.7 - -### Patch Changes - -- Updated dependencies [[`de5f90501`](https://github.com/firebase/firebase-js-sdk/commit/de5f9050137acc9ed1490082e5aa429b5de3cb2a)]: - - @firebase/util@0.4.1 - - @firebase/component@0.3.1 - - @firebase/installations@0.4.23 - -## 0.7.6 - -### Patch Changes - -- Updated dependencies [[`5c1a83ed7`](https://github.com/firebase/firebase-js-sdk/commit/5c1a83ed70bae979322bd8751c0885d683ce4bf3)]: - - @firebase/component@0.3.0 - - @firebase/installations@0.4.22 - -## 0.7.5 - -### Patch Changes - -- Updated dependencies [[`ec95df3d0`](https://github.com/firebase/firebase-js-sdk/commit/ec95df3d07e5f091f2a7f7327e46417f64d04b4e)]: - - @firebase/util@0.4.0 - - @firebase/component@0.2.1 - - @firebase/installations@0.4.21 - -## 0.7.4 - -### Patch Changes - -- Updated dependencies [[`6afe42613`](https://github.com/firebase/firebase-js-sdk/commit/6afe42613ed3d7a842d378dc1a09a795811db2ac)]: - - @firebase/component@0.2.0 - - @firebase/installations@0.4.20 - -## 0.7.3 - -### Patch Changes - -- [`54a46f89c`](https://github.com/firebase/firebase-js-sdk/commit/54a46f89c1c45435c76412fa2ed296e986c2f6ab) [#3780](https://github.com/firebase/firebase-js-sdk/pull/3780) - Adds a timeout for `onBackgroundMessage` hook so that silent-push warnings won't show if `showNotification` is called inside the hook within 1s. - This fixes the issue where the silent-push warning is displayed along with the message shown with [ServiceWorkerRegistration.showNotification](https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerRegistration/showNotification). -- Updated dependencies [[`9cf727fcc`](https://github.com/firebase/firebase-js-sdk/commit/9cf727fcc3d049551b16ae0698ac33dc2fe45ada)]: - - @firebase/util@0.3.4 - - @firebase/component@0.1.21 - - @firebase/installations@0.4.19 - -## 0.7.2 - -### Patch Changes - -- Updated dependencies [[`a5768b0aa`](https://github.com/firebase/firebase-js-sdk/commit/a5768b0aa7d7ce732279931aa436e988c9f36487), [`7d916d905`](https://github.com/firebase/firebase-js-sdk/commit/7d916d905ba16816ac8ac7c8748c83831ff614ce)]: - - @firebase/component@0.1.20 - - @firebase/util@0.3.3 - - @firebase/installations@0.4.18 - -## 0.7.1 - -### Patch Changes - -- [`dc9892565`](https://github.com/firebase/firebase-js-sdk/commit/dc989256566b8379f475c722370ccbd8f47527c3) [#3710](https://github.com/firebase/firebase-js-sdk/pull/3710) - stops redirecting user to non-origin urls. - -- Updated dependencies [[`da1c7df79`](https://github.com/firebase/firebase-js-sdk/commit/da1c7df7982b08bbef82fcc8d93255f3e2d23cca), [`fb3b095e4`](https://github.com/firebase/firebase-js-sdk/commit/fb3b095e4b7c8f57fdb3172bc039c84576abf290)]: - - @firebase/component@0.1.19 - - @firebase/util@0.3.2 - - @firebase/installations@0.4.17 - -## 0.7.0 - -### Minor Changes - -- [`29327b21`](https://github.com/firebase/firebase-js-sdk/commit/29327b2198391a9f1e545bcd1172a4b3e12a522c) [#3234](https://github.com/firebase/firebase-js-sdk/pull/3234) - Add `getToken(options:{serviceWorkerRegistration, vapidKey})`,`onBackgroundMessage`. - Deprecate `setBackgroundMessageHandler`, `onTokenRefresh`, `useVapidKey`, `useServiceWorker`, `getToken`. - - Add Typing `MessagePayload`, `NotificationPayload`, `FcmOptions`. - -### Patch Changes - -- Updated dependencies [[`d4ca3da0`](https://github.com/firebase/firebase-js-sdk/commit/d4ca3da0a59fcea1261ba69d7eb663bba38d3089), [`29327b21`](https://github.com/firebase/firebase-js-sdk/commit/29327b2198391a9f1e545bcd1172a4b3e12a522c)]: - - @firebase/util@0.3.1 - - @firebase/messaging-types@0.5.0 - - @firebase/component@0.1.18 - - @firebase/installations@0.4.16 - -## 0.6.21 - -### Patch Changes - -- Updated dependencies [[`a87676b8`](https://github.com/firebase/firebase-js-sdk/commit/a87676b84b78ccc2f057a22eb947a5d13402949c)]: - - @firebase/util@0.3.0 - - @firebase/component@0.1.17 - - @firebase/installations@0.4.15 - -## 0.6.20 - -### Patch Changes - -- [`a754645e`](https://github.com/firebase/firebase-js-sdk/commit/a754645ec2be1b8c205f25f510196eee298b0d6e) [#3297](https://github.com/firebase/firebase-js-sdk/pull/3297) Thanks [@renovate](https://github.com/apps/renovate)! - Update dependency typescript to v3.9.5 - -* [`17c628eb`](https://github.com/firebase/firebase-js-sdk/commit/17c628eb228c21ad1d4db83fdae08d1142a2b902) [#3312](https://github.com/firebase/firebase-js-sdk/pull/3312) Thanks [@Feiyang1](https://github.com/Feiyang1)! - Fixed an issue where we try to update token for every getToken() call because we don't save the updated token in the IndexedDB. - -- [`469c8bdf`](https://github.com/firebase/firebase-js-sdk/commit/469c8bdf18c4a22e99d595a9896af2f934df20fd) [#3221](https://github.com/firebase/firebase-js-sdk/pull/3221) Thanks [@zwu52](https://github.com/zwu52)! - Added support for `onMessage` so the internal callback can work with [Subscriber](https://rxjs.dev/api/index/class/Subscriber) - -- Updated dependencies [[`a754645e`](https://github.com/firebase/firebase-js-sdk/commit/a754645ec2be1b8c205f25f510196eee298b0d6e)]: - - - @firebase/component@0.1.16 - - @firebase/installations@0.4.14 - -## 0.6.11 - -- [fixed] Fixed an issue introduced in firebase@7.7.0, when FCM switched to provide base64-encoded VAPID - key to [PushManager](https://developer.mozilla.org/en-US/docs/Web/API/PushManager) for push subscription. For backward compatibility, the SDK has switched back to using VAPID key in type [ArrayBuffer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer). diff --git a/packages-old/messaging/README.md b/packages-old/messaging/README.md deleted file mode 100644 index 8f3fd52738a..00000000000 --- a/packages-old/messaging/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# @firebase/messaging - -This is the Firebase Cloud Messaging component of the Firebase JS SDK. - -**This package is not intended for direct usage, and should only be used via the officially supported [firebase](https://www.npmjs.com/package/firebase) package.** diff --git a/packages-old/messaging/karma.conf.js b/packages-old/messaging/karma.conf.js deleted file mode 100644 index c9bc6b770c9..00000000000 --- a/packages-old/messaging/karma.conf.js +++ /dev/null @@ -1,32 +0,0 @@ -/** - * @license - * Copyright 2017 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -const karmaBase = require('../../config/karma.base'); - -const files = [`src/**/*.test.ts`]; - -module.exports = function (config) { - const karmaConfig = { - ...karmaBase, - files, - frameworks: ['mocha'] - }; - - config.set(karmaConfig); -}; - -module.exports.files = files; diff --git a/packages-old/messaging/package.json b/packages-old/messaging/package.json deleted file mode 100644 index 81eb9292235..00000000000 --- a/packages-old/messaging/package.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "name": "@firebase/messaging", - "version": "0.7.15", - "description": "", - "author": "Firebase (https://firebase.google.com/)", - "main": "dist/index.cjs.js", - "module": "dist/index.esm.js", - "esm2017": "dist/index.esm2017.js", - "files": [ - "dist" - ], - "scripts": { - "lint": "eslint -c .eslintrc.js '**/*.ts' --ignore-path '../../.gitignore'", - "lint:fix": "eslint --fix -c .eslintrc.js '**/*.ts' --ignore-path '../../.gitignore'", - "build": "rollup -c", - "build:deps": "lerna run --scope @firebase/messaging --include-dependencies build", - "dev": "rollup -c -w", - "test": "run-p lint test:karma", - "test:integration": "test:karma && cd ../../integration/messaging && npm run-script test", - "test:ci": "node ../../scripts/run_tests_in_ci.js -s test:karma", - "test:karma": "karma start --single-run", - "test:debug": "karma start --browsers=Chrome --auto-watch" - }, - "license": "Apache-2.0", - "peerDependencies": { - "@firebase/app": "0.x", - "@firebase/app-types": "0.x" - }, - "dependencies": { - "@firebase/installations": "0.4.31", - "@firebase/messaging-types": "0.5.0", - "@firebase/util": "1.2.0", - "@firebase/component": "0.5.5", - "idb": "3.0.2", - "tslib": "^2.1.0" - }, - "devDependencies": { - "@firebase/app": "0.6.29", - "rollup": "2.52.2", - "rollup-plugin-typescript2": "0.30.0", - "ts-essentials": "7.0.1", - "typescript": "4.2.2" - }, - "repository": { - "directory": "packages/messaging", - "type": "git", - "url": "https://github.com/firebase/firebase-js-sdk.git" - }, - "bugs": { - "url": "https://github.com/firebase/firebase-js-sdk/issues" - }, - "typings": "dist/index.d.ts" -} diff --git a/packages-old/messaging/rollup.config.js b/packages-old/messaging/rollup.config.js deleted file mode 100644 index b1eaf62525a..00000000000 --- a/packages-old/messaging/rollup.config.js +++ /dev/null @@ -1,76 +0,0 @@ -/** - * @license - * Copyright 2018 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import json from '@rollup/plugin-json'; -import typescriptPlugin from 'rollup-plugin-typescript2'; -import typescript from 'typescript'; -import pkg from './package.json'; - -const deps = Object.keys( - Object.assign({}, pkg.peerDependencies, pkg.dependencies) -); - -/** - * ES5 Builds - */ -const es5BuildPlugins = [ - typescriptPlugin({ - typescript - }), - json() -]; - -const es5Builds = [ - { - input: 'src/index.ts', - output: [ - { file: pkg.main, format: 'cjs', sourcemap: true }, - { file: pkg.module, format: 'es', sourcemap: true } - ], - plugins: es5BuildPlugins, - external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)) - } -]; - -/** - * ES2017 Builds - */ -const es2017BuildPlugins = [ - typescriptPlugin({ - typescript, - tsconfigOverride: { - compilerOptions: { - target: 'es2017' - } - } - }), - json({ preferConst: true }) -]; - -const es2017Builds = [ - { - input: 'src/index.ts', - output: { - file: pkg.esm2017, - format: 'es', - sourcemap: true - }, - plugins: es2017BuildPlugins, - external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)) - } -]; -export default [...es5Builds, ...es2017Builds]; diff --git a/packages-old/messaging/src/controllers/sw-controller.test.ts b/packages-old/messaging/src/controllers/sw-controller.test.ts deleted file mode 100644 index 91afaf1a329..00000000000 --- a/packages-old/messaging/src/controllers/sw-controller.test.ts +++ /dev/null @@ -1,608 +0,0 @@ -/** - * @license - * Copyright 2017 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import '../testing/setup'; - -import * as tokenManagementModule from '../core/token-management'; - -import { BgMessageHandler, SwController } from './sw-controller'; -import { - CONSOLE_CAMPAIGN_ANALYTICS_ENABLED, - CONSOLE_CAMPAIGN_ID, - CONSOLE_CAMPAIGN_NAME, - CONSOLE_CAMPAIGN_TIME, - DEFAULT_VAPID_KEY, - FCM_MSG -} from '../util/constants'; -import { DeepPartial, ValueOf, Writable } from 'ts-essentials'; -import { - FakeEvent, - FakePushSubscription, - mockServiceWorker, - restoreServiceWorker -} from '../testing/fakes/service-worker'; -import { - MessagePayloadInternal, - MessageType -} from '../interfaces/internal-message-payload'; -import { spy, stub } from 'sinon'; - -import { FirebaseInternalDependencies } from '../interfaces/internal-dependencies'; -import { Stub } from '../testing/sinon-types'; -import { dbSet } from '../helpers/idb-manager'; -import { expect } from 'chai'; -import { getFakeFirebaseDependencies } from '../testing/fakes/firebase-dependencies'; -import { getFakeTokenDetails } from '../testing/fakes/token-details'; - -const LOCAL_HOST = self.location.host; -const TEST_LINK = 'https://' + LOCAL_HOST + '/test-link.org'; -const TEST_CLICK_ACTION = 'https://' + LOCAL_HOST + '/test-click-action.org'; - -// Add fake SW types. -declare const self: Window & Writable; - -// internal message payload (parsed directly from the push event) that contains and only contains -// notification payload. -const DISPLAY_MESSAGE: MessagePayloadInternal = { - notification: { - title: 'title', - body: 'body' - }, - fcmOptions: { - link: TEST_LINK - }, - from: 'from', - // eslint-disable-next-line camelcase - collapse_key: 'collapse', - // eslint-disable-next-line camelcase - fcm_message_id: 'mid' -}; - -// internal message payload (parsed directly from the push event) that contains and only contains -// data payload. -const DATA_MESSAGE: MessagePayloadInternal = { - data: { - key: 'value' - }, - from: 'from', - // eslint-disable-next-line camelcase - collapse_key: 'collapse', - // eslint-disable-next-line camelcase - fcm_message_id: 'mid' -}; - -describe('SwController', () => { - let addEventListenerStub: Stub; - // eslint-disable-next-line @typescript-eslint/ban-types - let eventListenerMap: Map; - let swController: SwController; - let firebaseDependencies: FirebaseInternalDependencies; - let getTokenStub: Stub; - let deleteTokenStub: Stub; - - beforeEach(() => { - mockServiceWorker(); - - stub(Notification, 'permission').value('granted'); - - // Instead of calling actual addEventListener, add the event to the eventListeners list. Actual - // event listeners can't be used as the tests are not running in a Service Worker, which means - // Push events do not exist. - addEventListenerStub = stub(self, 'addEventListener').callsFake( - (type, listener) => { - eventListenerMap.set(type, listener); - } - ); - eventListenerMap = new Map(); - - getTokenStub = stub(tokenManagementModule, 'getToken').resolves( - 'token-value' - ); - deleteTokenStub = stub(tokenManagementModule, 'deleteToken').resolves(true); - - firebaseDependencies = getFakeFirebaseDependencies(); - swController = new SwController(firebaseDependencies); - }); - - afterEach(() => { - restoreServiceWorker(); - }); - - it('has app', () => { - expect(swController.app).to.equal(firebaseDependencies.app); - }); - - it('sets event listeners on initialization', () => { - expect(addEventListenerStub).to.have.been.calledThrice; - expect(addEventListenerStub).to.have.been.calledWith('push'); - expect(addEventListenerStub).to.have.been.calledWith( - 'pushsubscriptionchange' - ); - expect(addEventListenerStub).to.have.been.calledWith('notificationclick'); - }); - - it('throws when window-only methods are called', () => { - expect(() => swController.requestPermission()).to.throw( - 'messaging/only-available-in-window' - ); - expect(() => swController.useServiceWorker()).to.throw( - 'messaging/only-available-in-window' - ); - expect(() => swController.onMessage()).to.throw( - 'messaging/only-available-in-window' - ); - expect(() => swController.onTokenRefresh()).to.throw( - 'messaging/only-available-in-window' - ); - }); - - describe('getToken', () => { - it('calls getToken with the set VAPID key', async () => { - swController.usePublicVapidKey('use-vapid-key'); - await swController.getToken(); - - expect(getTokenStub).to.have.been.calledWith( - firebaseDependencies, - self.registration, - 'use-vapid-key' - ); - }); - - it('calls getToken with the current VAPID key if it is not set', async () => { - const tokenDetails = getFakeTokenDetails(); - await dbSet(firebaseDependencies, tokenDetails); - - await swController.getToken(); - - expect(getTokenStub).to.have.been.calledWith( - firebaseDependencies, - self.registration, - 'dmFwaWQta2V5LXZhbHVl' - ); - }); - - it('calls getToken with the default VAPID key if there is no token in db', async () => { - await swController.getToken(); - - expect(getTokenStub).to.have.been.calledWith( - firebaseDependencies, - self.registration, - DEFAULT_VAPID_KEY - ); - }); - }); - - describe('deleteToken', () => { - it('calls deleteToken', async () => { - await swController.deleteToken(); - - expect(deleteTokenStub).to.have.been.calledWith( - firebaseDependencies, - self.registration - ); - }); - }); - - describe('onPush', () => { - it('does nothing if push is not from FCM', async () => { - const showNotificationSpy = spy(self.registration, 'showNotification'); - const matchAllSpy = spy(self.clients, 'matchAll'); - - await callEventListener(makeEvent('push', {})); - - await callEventListener( - makeEvent('push', { - data: {} - }) - ); - - expect(showNotificationSpy).not.to.have.been.called; - expect(matchAllSpy).not.to.have.been.called; - }); - - it('sends a message to window clients if a window client is visible', async () => { - const client: Writable = (await self.clients.openWindow( - 'https://example.org' - ))!; - client.visibilityState = 'visible'; - const postMessageSpy = spy(client, 'postMessage'); - - await callEventListener( - makeEvent('push', { - data: { - json: () => DISPLAY_MESSAGE - } - }) - ); - - const expectedMessage: MessagePayloadInternal = { - ...DISPLAY_MESSAGE, - messageType: MessageType.PUSH_RECEIVED - }; - expect(postMessageSpy).to.have.been.calledOnceWith(expectedMessage); - }); - - it('does not send a message to window clients if window clients are hidden', async () => { - const client = (await self.clients.openWindow('https://example.org'))!; - const postMessageSpy = spy(client, 'postMessage'); - const showNotificationSpy = spy(self.registration, 'showNotification'); - - await callEventListener( - makeEvent('push', { - data: { - json: () => DISPLAY_MESSAGE - } - }) - ); - - expect(postMessageSpy).not.to.have.been.called; - expect(showNotificationSpy).to.have.been.calledWith('title', { - ...DISPLAY_MESSAGE.notification, - data: { - [FCM_MSG]: DISPLAY_MESSAGE - } - }); - }); - - it('displays a notification if a window client does not exist', async () => { - const showNotificationSpy = spy(self.registration, 'showNotification'); - - await callEventListener( - makeEvent('push', { - data: { - json: () => DISPLAY_MESSAGE - } - }) - ); - - expect(showNotificationSpy).to.have.been.calledWith('title', { - ...DISPLAY_MESSAGE.notification, - data: { - ...DISPLAY_MESSAGE.notification!.data, - [FCM_MSG]: DISPLAY_MESSAGE - } - }); - }); - - it('calls bgMessageHandler if message is not a notification', async () => { - const bgMessageHandlerSpy = spy(); - swController.setBackgroundMessageHandler(bgMessageHandlerSpy); - - await callEventListener( - makeEvent('push', { - data: { - json: () => DATA_MESSAGE - } - }) - ); - - expect(bgMessageHandlerSpy).to.have.been.calledWith(); - }); - - it('forwards MessagePayload with a notification payload to onBackgroundMessage', async () => { - const bgMessageHandlerSpy = spy(); - const showNotificationSpy = spy(self.registration, 'showNotification'); - - swController.onBackgroundMessage(bgMessageHandlerSpy); - - await callEventListener( - makeEvent('push', { - data: { - json: () => ({ - notification: { - ...DISPLAY_MESSAGE - }, - data: { - ...DATA_MESSAGE - } - }) - } - }) - ); - - expect(bgMessageHandlerSpy).to.have.been.called; - expect(showNotificationSpy).to.have.been.called; - }); - - it('warns if there are more action buttons than the browser limit', async () => { - // This doesn't exist on Firefox: - // https://developer.mozilla.org/en-US/docs/Web/API/notification/maxActions - if (!Notification.maxActions) { - return; - } - stub(Notification, 'maxActions').value(1); - - const warnStub = stub(console, 'warn'); - - await callEventListener( - makeEvent('push', { - data: { - json: () => ({ - notification: { - ...DISPLAY_MESSAGE, - actions: [ - { action: 'like', title: 'Like' }, - { action: 'favorite', title: 'Favorite' } - ] - } - }) - } - }) - ); - - expect(warnStub).to.have.been.calledOnceWith( - 'This browser only supports 1 actions. The remaining actions will not be displayed.' - ); - }); - }); - - describe('setBackgroundMessageHandler', () => { - it('throws on invalid input', () => { - expect(() => - swController.setBackgroundMessageHandler( - null as unknown as BgMessageHandler - ) - ).to.throw('messaging/invalid-bg-handler'); - }); - }); - - describe('usePublicVapidKey', () => { - it('throws on invalid input', () => { - expect(() => - swController.usePublicVapidKey(null as unknown as string) - ).to.throw('messaging/invalid-vapid-key'); - - expect(() => swController.usePublicVapidKey('')).to.throw( - 'messaging/invalid-vapid-key' - ); - }); - - it('throws if called twice', () => { - swController.usePublicVapidKey('dmFwaWQta2V5LXZhbHVl'); - expect(() => - swController.usePublicVapidKey('dmFwaWQta2V5LXZhbHVl') - ).to.throw('messaging/use-vapid-key-after-get-token'); - }); - - it('throws if called after getToken', async () => { - await swController.getToken(); - - expect(() => - swController.usePublicVapidKey('dmFwaWQta2V5LXZhbHVl') - ).to.throw('messaging/use-vapid-key-after-get-token'); - }); - }); - - describe('onNotificationClick', () => { - let NOTIFICATION_CLICK_PAYLOAD: DeepPartial; - - beforeEach(() => { - NOTIFICATION_CLICK_PAYLOAD = { - notification: new Notification('title', { - ...DISPLAY_MESSAGE.notification, - data: { - ...DISPLAY_MESSAGE.notification!.data, - [FCM_MSG]: DISPLAY_MESSAGE - } - }) - }; - }); - - it('does nothing if notification is not from FCM', async () => { - delete NOTIFICATION_CLICK_PAYLOAD.notification!.data![FCM_MSG]; - - const event = makeEvent('notificationclick', NOTIFICATION_CLICK_PAYLOAD); - const stopImmediatePropagationSpy = spy( - event, - 'stopImmediatePropagation' - ); - - await callEventListener(event); - - expect(stopImmediatePropagationSpy).not.to.have.been.called; - }); - - it('does nothing if an action button was clicked', async () => { - const event = makeEvent('notificationclick', NOTIFICATION_CLICK_PAYLOAD); - event.action = 'actionName'; - const stopImmediatePropagationSpy = spy( - event, - 'stopImmediatePropagation' - ); - - await callEventListener(event); - - expect(stopImmediatePropagationSpy).not.to.have.been.called; - }); - - it('calls stopImmediatePropagation and notification.close', async () => { - const event = makeEvent('notificationclick', NOTIFICATION_CLICK_PAYLOAD); - const stopImmediatePropagationSpy = spy( - event, - 'stopImmediatePropagation' - ); - const notificationCloseSpy = spy(event.notification, 'close'); - - await callEventListener(event); - - expect(stopImmediatePropagationSpy).to.have.been.called; - expect(notificationCloseSpy).to.have.been.called; - }); - - it('does not redirect if there is no link', async () => { - // Remove link. - delete NOTIFICATION_CLICK_PAYLOAD.notification!.data![FCM_MSG].fcmOptions; - - const event = makeEvent('notificationclick', NOTIFICATION_CLICK_PAYLOAD); - const stopImmediatePropagationSpy = spy( - event, - 'stopImmediatePropagation' - ); - const notificationCloseSpy = spy(event.notification, 'close'); - const matchAllSpy = spy(self.clients, 'matchAll'); - - await callEventListener(event); - - expect(stopImmediatePropagationSpy).to.have.been.called; - expect(notificationCloseSpy).to.have.been.called; - expect(matchAllSpy).not.to.have.been.called; - }); - - it('does not redirect if link is not from origin', async () => { - // Remove link. - NOTIFICATION_CLICK_PAYLOAD.notification!.data![FCM_MSG].fcmOptions.link = - 'https://www.youtube.com'; - - const event = makeEvent('notificationclick', NOTIFICATION_CLICK_PAYLOAD); - const stopImmediatePropagationSpy = spy( - event, - 'stopImmediatePropagation' - ); - const notificationCloseSpy = spy(event.notification, 'close'); - const matchAllSpy = spy(self.clients, 'matchAll'); - - await callEventListener(event); - - expect(stopImmediatePropagationSpy).to.have.been.called; - expect(notificationCloseSpy).to.have.been.called; - expect(matchAllSpy).not.to.have.been.called; - }); - - it('focuses on and sends the message to an open WindowClient', async () => { - const client: Writable = (await self.clients.openWindow( - TEST_LINK - ))!; - const focusSpy = spy(client, 'focus'); - const matchAllSpy = spy(self.clients, 'matchAll'); - const openWindowSpy = spy(self.clients, 'openWindow'); - const postMessageSpy = spy(client, 'postMessage'); - - const event = makeEvent('notificationclick', NOTIFICATION_CLICK_PAYLOAD); - - await callEventListener(event); - - expect(matchAllSpy).to.have.been.called; - expect(openWindowSpy).not.to.have.been.called; - expect(focusSpy).to.have.been.called; - expect(postMessageSpy).to.have.been.calledWith({ - ...DISPLAY_MESSAGE, - messageType: MessageType.NOTIFICATION_CLICKED - }); - }); - - it("opens a new client if there isn't one already open", async () => { - const matchAllSpy = spy(self.clients, 'matchAll'); - const openWindowSpy = spy(self.clients, 'openWindow'); - - const event = makeEvent('notificationclick', NOTIFICATION_CLICK_PAYLOAD); - - await callEventListener(event); - - expect(matchAllSpy).to.have.been.called; - expect(openWindowSpy).to.have.been.calledWith(TEST_LINK); - }); - - it('works with click_action', async () => { - // Replace link with the deprecated click_action. - delete NOTIFICATION_CLICK_PAYLOAD.notification!.data![FCM_MSG].fcmOptions; - NOTIFICATION_CLICK_PAYLOAD.notification!.data![ - FCM_MSG - ].notification.click_action = TEST_CLICK_ACTION; // eslint-disable-line camelcase - - const matchAllSpy = spy(self.clients, 'matchAll'); - const openWindowSpy = spy(self.clients, 'openWindow'); - - const event = makeEvent('notificationclick', NOTIFICATION_CLICK_PAYLOAD); - - await callEventListener(event); - - expect(matchAllSpy).to.have.been.called; - expect(openWindowSpy).to.have.been.calledWith(TEST_CLICK_ACTION); - }); - - it('redirects to origin if message was sent from the FN Console', async () => { - // Remove link. - delete NOTIFICATION_CLICK_PAYLOAD.notification!.data![FCM_MSG].fcmOptions; - // Add FN data. - NOTIFICATION_CLICK_PAYLOAD.notification!.data![FCM_MSG].data = { - [CONSOLE_CAMPAIGN_ID]: '123456', - [CONSOLE_CAMPAIGN_NAME]: 'Campaign Name', - [CONSOLE_CAMPAIGN_TIME]: '1234567890', - [CONSOLE_CAMPAIGN_ANALYTICS_ENABLED]: '1' - }; - - const matchAllSpy = spy(self.clients, 'matchAll'); - const openWindowSpy = spy(self.clients, 'openWindow'); - - const event = makeEvent('notificationclick', NOTIFICATION_CLICK_PAYLOAD); - - await callEventListener(event); - - expect(matchAllSpy).to.have.been.called; - expect(openWindowSpy).to.have.been.calledWith(self.location.origin); - }); - }); - - describe('onSubChange', () => { - it('calls deleteToken if there is no new subscription', async () => { - const event = makeEvent('pushsubscriptionchange', { - oldSubscription: new FakePushSubscription(), - newSubscription: undefined - }); - - await callEventListener(event); - - expect(deleteTokenStub).to.have.been.called; - expect(getTokenStub).not.to.have.been.called; - }); - - it('calls deleteToken and getToken if subscription changed', async () => { - const event = makeEvent('pushsubscriptionchange', { - oldSubscription: new FakePushSubscription(), - newSubscription: new FakePushSubscription() - }); - - await callEventListener(event); - - expect(deleteTokenStub).to.have.been.called; - expect(getTokenStub).to.have.been.called; - }); - }); - - async function callEventListener( - event: ValueOf - ): Promise { - const listener = eventListenerMap.get(event.type); - if (!listener) { - throw new Error(`Event listener for ${event.type} was not defined.`); - } - - const waitUntil = spy(event, 'waitUntil'); - listener(event); - await waitUntil.getCall(0).args[0]; - } -}); - -/** Makes fake push events. */ -function makeEvent( - type: K, - data: DeepPartial -): Writable { - const event = new FakeEvent(type); - Object.assign(event, data); - return event as unknown as ServiceWorkerGlobalScopeEventMap[K]; -} diff --git a/packages-old/messaging/src/controllers/sw-controller.ts b/packages-old/messaging/src/controllers/sw-controller.ts deleted file mode 100644 index c4b9b7a024e..00000000000 --- a/packages-old/messaging/src/controllers/sw-controller.ts +++ /dev/null @@ -1,411 +0,0 @@ -/** - * @license - * Copyright 2017 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { - BACKGROUND_HANDLE_EXECUTION_TIME_LIMIT_MS, - DEFAULT_VAPID_KEY, - FCM_MSG, - FOREGROUND_HANDLE_PREPARATION_TIME_MS, - TAG -} from '../util/constants'; -import { ERROR_FACTORY, ErrorCode } from '../util/errors'; -import { FirebaseMessaging, MessagePayload } from '@firebase/messaging-types'; -import { - MessagePayloadInternal, - MessageType, - NotificationPayloadInternal -} from '../interfaces/internal-message-payload'; -import { NextFn, Observer, Unsubscribe } from '@firebase/util'; -import { deleteToken, getToken } from '../core/token-management'; - -import { FirebaseApp } from '@firebase/app-types'; -import { FirebaseInternalDependencies } from '../interfaces/internal-dependencies'; -import { FirebaseService } from '@firebase/app-types/private'; -import { dbGet } from '../helpers/idb-manager'; -import { externalizePayload } from '../helpers/externalizePayload'; -import { isConsoleMessage } from '../helpers/is-console-message'; -import { sleep } from '../helpers/sleep'; - -// Let TS know that this is a service worker -declare const self: ServiceWorkerGlobalScope; - -export type BgMessageHandler = (payload: MessagePayload) => unknown; - -export class SwController implements FirebaseMessaging, FirebaseService { - // A boolean flag to determine wether an app is using onBackgroundMessage or - // setBackgroundMessageHandler. onBackgroundMessage will receive a MessagePayload regardless of if - // a notification is displayed. Whereas, setBackgroundMessageHandler will swallow the - // MessagePayload if a NotificationPayload is included. - private isOnBackgroundMessageUsed: boolean | null = null; - private vapidKey: string | null = null; - private bgMessageHandler: - | null - | BgMessageHandler - | NextFn - | Observer = null; - - constructor( - private readonly firebaseDependencies: FirebaseInternalDependencies - ) { - self.addEventListener('push', e => { - e.waitUntil(this.onPush(e)); - }); - self.addEventListener('pushsubscriptionchange', e => { - e.waitUntil(this.onSubChange(e)); - }); - self.addEventListener('notificationclick', e => { - e.waitUntil(this.onNotificationClick(e)); - }); - } - - get app(): FirebaseApp { - return this.firebaseDependencies.app; - } - - /** - * @deprecated. Use onBackgroundMessage(nextOrObserver: NextFn | Observer): - * Unsubscribe instead. - * - * Calling setBackgroundMessageHandler will opt in to some specific behaviors. - * - * 1.) If a notification doesn't need to be shown due to a window already being visible, then push - * messages will be sent to the page. 2.) If a notification needs to be shown, and the message - * contains no notification data this method will be called and the promise it returns will be - * passed to event.waitUntil. If you do not set this callback then all push messages will let and - * the developer can handle them in a their own 'push' event callback - * - * @param callback The callback to be called when a push message is received and a notification - * must be shown. The callback will be given the data from the push message. - */ - setBackgroundMessageHandler(callback: BgMessageHandler): void { - this.isOnBackgroundMessageUsed = false; - - if (!callback || typeof callback !== 'function') { - throw ERROR_FACTORY.create(ErrorCode.INVALID_BG_HANDLER); - } - - this.bgMessageHandler = callback; - } - - onBackgroundMessage( - nextOrObserver: NextFn | Observer - ): Unsubscribe { - this.isOnBackgroundMessageUsed = true; - this.bgMessageHandler = nextOrObserver; - - return () => { - this.bgMessageHandler = null; - }; - } - - // TODO: Remove getToken from SW Controller. Calling this from an old SW can cause all kinds of - // trouble. - async getToken(): Promise { - if (!this.vapidKey) { - // Call getToken using the current VAPID key if there already is a token. This is needed - // because usePublicVapidKey was not available in SW. It will be removed when vapidKey becomes - // a parameter of getToken, or when getToken is removed from SW. - const tokenDetails = await dbGet(this.firebaseDependencies); - this.vapidKey = - tokenDetails?.subscriptionOptions?.vapidKey ?? DEFAULT_VAPID_KEY; - } - - return getToken( - this.firebaseDependencies, - self.registration, - this.vapidKey - ); - } - - // TODO: Remove deleteToken from SW Controller. Calling this from an old SW can cause all kinds of - // trouble. - deleteToken(): Promise { - return deleteToken(this.firebaseDependencies, self.registration); - } - - requestPermission(): Promise { - throw ERROR_FACTORY.create(ErrorCode.AVAILABLE_IN_WINDOW); - } - - // TODO: Remove this together with getToken from SW Controller. - usePublicVapidKey(vapidKey: string): void { - if (this.vapidKey !== null) { - throw ERROR_FACTORY.create(ErrorCode.USE_VAPID_KEY_AFTER_GET_TOKEN); - } - - if (typeof vapidKey !== 'string' || vapidKey.length === 0) { - throw ERROR_FACTORY.create(ErrorCode.INVALID_VAPID_KEY); - } - - this.vapidKey = vapidKey; - } - - useServiceWorker(): void { - throw ERROR_FACTORY.create(ErrorCode.AVAILABLE_IN_WINDOW); - } - - onMessage(): Unsubscribe { - throw ERROR_FACTORY.create(ErrorCode.AVAILABLE_IN_WINDOW); - } - - onTokenRefresh(): Unsubscribe { - throw ERROR_FACTORY.create(ErrorCode.AVAILABLE_IN_WINDOW); - } - - /** - * A handler for push events that shows notifications based on the content of the payload. - * - * The payload must be a JSON-encoded Object with a `notification` key. The value of the - * `notification` property will be used as the NotificationOptions object passed to - * showNotification. Additionally, the `title` property of the notification object will be used as - * the title. - * - * If there is no notification data in the payload then no notification will be shown. - */ - async onPush(event: PushEvent): Promise { - const internalPayload = getMessagePayloadInternal(event); - if (!internalPayload) { - console.debug( - TAG + - 'failed to get parsed MessagePayload from the PushEvent. Skip handling the push.' - ); - return; - } - - // foreground handling: eventually passed to onMessage hook - const clientList = await getClientList(); - if (hasVisibleClients(clientList)) { - return sendMessagePayloadInternalToWindows(clientList, internalPayload); - } - - // background handling: display and pass to onBackgroundMessage hook - let isNotificationShown = false; - if (!!internalPayload.notification) { - await showNotification(wrapInternalPayload(internalPayload)); - isNotificationShown = true; - } - - // MessagePayload is only passed to `onBackgroundMessage`. Skip passing MessagePayload for - // the legacy `setBackgroundMessageHandler` to preserve the SDK behaviors. - if ( - isNotificationShown === true && - this.isOnBackgroundMessageUsed === false - ) { - return; - } - - if (!!this.bgMessageHandler) { - const payload = externalizePayload(internalPayload); - - if (typeof this.bgMessageHandler === 'function') { - this.bgMessageHandler(payload); - } else { - this.bgMessageHandler.next(payload); - } - } - - // wait briefly to allow onBackgroundMessage to complete - await sleep(BACKGROUND_HANDLE_EXECUTION_TIME_LIMIT_MS); - } - - async onSubChange(event: PushSubscriptionChangeEvent): Promise { - const { newSubscription } = event; - if (!newSubscription) { - // Subscription revoked, delete token - await deleteToken(this.firebaseDependencies, self.registration); - return; - } - - const tokenDetails = await dbGet(this.firebaseDependencies); - await deleteToken(this.firebaseDependencies, self.registration); - await getToken( - this.firebaseDependencies, - self.registration, - tokenDetails?.subscriptionOptions?.vapidKey ?? DEFAULT_VAPID_KEY - ); - } - - async onNotificationClick(event: NotificationEvent): Promise { - const internalPayload: MessagePayloadInternal = - event.notification?.data?.[FCM_MSG]; - - if (!internalPayload) { - return; - } else if (event.action) { - // User clicked on an action button. This will allow developers to act on action button clicks - // by using a custom onNotificationClick listener that they define. - return; - } - - // Prevent other listeners from receiving the event - event.stopImmediatePropagation(); - event.notification.close(); - - // Note clicking on a notification with no link set will focus the Chrome's current tab. - const link = getLink(internalPayload); - if (!link) { - return; - } - - // FM should only open/focus links from app's origin. - const url = new URL(link, self.location.href); - const originUrl = new URL(self.location.origin); - - if (url.host !== originUrl.host) { - return; - } - - let client = await getWindowClient(url); - - if (!client) { - client = await self.clients.openWindow(link); - - // Wait three seconds for the client to initialize and set up the message handler so that it - // can receive the message. - await sleep(FOREGROUND_HANDLE_PREPARATION_TIME_MS); - } else { - client = await client.focus(); - } - - if (!client) { - // Window Client will not be returned if it's for a third party origin. - return; - } - - internalPayload.messageType = MessageType.NOTIFICATION_CLICKED; - internalPayload.isFirebaseMessaging = true; - return client.postMessage(internalPayload); - } -} - -function wrapInternalPayload( - internalPayload: MessagePayloadInternal -): NotificationPayloadInternal { - const wrappedInternalPayload: NotificationPayloadInternal = { - ...((internalPayload.notification as unknown) as NotificationPayloadInternal) - }; - - // Put the message payload under FCM_MSG name so we can identify the notification as being an FCM - // notification vs a notification from somewhere else (i.e. normal web push or developer generated - // notification). - wrappedInternalPayload.data = { - [FCM_MSG]: internalPayload - }; - - return wrappedInternalPayload; -} - -function getMessagePayloadInternal({ - data -}: PushEvent): MessagePayloadInternal | null { - if (!data) { - return null; - } - - try { - return data.json(); - } catch (err) { - // Not JSON so not an FCM message. - return null; - } -} - -/** - * @param url The URL to look for when focusing a client. - * @return Returns an existing window client or a newly opened WindowClient. - */ -async function getWindowClient(url: URL): Promise { - const clientList = await getClientList(); - - for (const client of clientList) { - const clientUrl = new URL(client.url, self.location.href); - - if (url.host === clientUrl.host) { - return client; - } - } - - return null; -} - -/** - * @returns If there is currently a visible WindowClient, this method will resolve to true, - * otherwise false. - */ -function hasVisibleClients(clientList: WindowClient[]): boolean { - return clientList.some( - client => - client.visibilityState === 'visible' && - // Ignore chrome-extension clients as that matches the background pages of extensions, which - // are always considered visible for some reason. - !client.url.startsWith('chrome-extension://') - ); -} - -function sendMessagePayloadInternalToWindows( - clientList: WindowClient[], - internalPayload: MessagePayloadInternal -): void { - internalPayload.isFirebaseMessaging = true; - internalPayload.messageType = MessageType.PUSH_RECEIVED; - - for (const client of clientList) { - client.postMessage(internalPayload); - } -} - -function getClientList(): Promise { - return self.clients.matchAll({ - type: 'window', - includeUncontrolled: true - // TS doesn't know that "type: 'window'" means it'll return WindowClient[] - }) as Promise; -} - -function showNotification( - notificationPayloadInternal: NotificationPayloadInternal -): Promise { - // Note: Firefox does not support the maxActions property. - // https://developer.mozilla.org/en-US/docs/Web/API/notification/maxActions - const { actions } = notificationPayloadInternal; - const { maxActions } = Notification; - if (actions && maxActions && actions.length > maxActions) { - console.warn( - `This browser only supports ${maxActions} actions. The remaining actions will not be displayed.` - ); - } - - return self.registration.showNotification( - /* title= */ notificationPayloadInternal.title ?? '', - notificationPayloadInternal - ); -} - -function getLink(payload: MessagePayloadInternal): string | null { - // eslint-disable-next-line camelcase - const link = payload.fcmOptions?.link ?? payload.notification?.click_action; - if (link) { - return link; - } - - if (isConsoleMessage(payload.data)) { - // Notification created in the Firebase Console. Redirect to origin. - return self.location.origin; - } else { - return null; - } -} diff --git a/packages-old/messaging/src/controllers/window-controller.test.ts b/packages-old/messaging/src/controllers/window-controller.test.ts deleted file mode 100644 index 423f2a15888..00000000000 --- a/packages-old/messaging/src/controllers/window-controller.test.ts +++ /dev/null @@ -1,659 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import '../testing/setup'; - -import * as tokenManagementModule from '../core/token-management'; - -import { - CONSOLE_CAMPAIGN_ANALYTICS_ENABLED, - CONSOLE_CAMPAIGN_ID, - CONSOLE_CAMPAIGN_NAME, - CONSOLE_CAMPAIGN_TIME, - DEFAULT_SW_PATH, - DEFAULT_SW_SCOPE, - DEFAULT_VAPID_KEY -} from '../util/constants'; -import { - MessagePayloadInternal, - MessageType -} from '../interfaces/internal-message-payload'; -import { SinonFakeTimers, SinonSpy, spy, stub, useFakeTimers } from 'sinon'; -import { Spy, Stub } from '../testing/sinon-types'; - -import { ErrorCode } from '../util/errors'; -import { FakeServiceWorkerRegistration } from '../testing/fakes/service-worker'; -import { FirebaseAnalyticsInternal } from '@firebase/analytics-interop-types'; -import { FirebaseInternalDependencies } from '../interfaces/internal-dependencies'; -import { WindowController } from './window-controller'; -import { expect } from 'chai'; -import { getFakeFirebaseDependencies } from '../testing/fakes/firebase-dependencies'; - -type MessageEventListener = (event: Event) => Promise; - -const ORIGINAL_SW_REGISTRATION = FakeServiceWorkerRegistration; - -describe('WindowController', () => { - let firebaseDependencies: FirebaseInternalDependencies; - let swRegistration: ServiceWorkerRegistration; - let windowController: WindowController; - - let getTokenStub: Stub; - let deleteTokenStub: Stub; - let registerStub: Stub; - let addEventListenerStub: Stub< - typeof navigator.serviceWorker.addEventListener - >; - - /** The event listener that WindowController adds to the message event. */ - let messageEventListener: MessageEventListener; - - beforeEach(() => { - // To trick the instanceof check in useServiceWorker. - self.ServiceWorkerRegistration = FakeServiceWorkerRegistration; - - firebaseDependencies = getFakeFirebaseDependencies(); - swRegistration = new FakeServiceWorkerRegistration(); - - stub(Notification, 'permission').value('granted'); - registerStub = stub(navigator.serviceWorker, 'register').resolves( - swRegistration - ); - addEventListenerStub = stub( - navigator.serviceWorker, - 'addEventListener' - ).callsFake((type, listener) => { - expect(type).to.equal('message'); - - if ('handleEvent' in listener) { - messageEventListener = listener.handleEvent as MessageEventListener; - } else { - messageEventListener = listener as MessageEventListener; - } - }); - getTokenStub = stub(tokenManagementModule, 'getToken').resolves('fcmToken'); - deleteTokenStub = stub(tokenManagementModule, 'deleteToken').resolves(true); - - windowController = new WindowController(firebaseDependencies); - }); - - afterEach(() => { - self.ServiceWorkerRegistration = ORIGINAL_SW_REGISTRATION; - }); - - it('has app', () => { - expect(windowController.app).to.equal(firebaseDependencies.app); - }); - - it('adds the message event listener on creation', () => { - expect(addEventListenerStub).to.have.been.called; - }); - - it('throws when service-worker-only methods are called', () => { - expect(() => windowController.setBackgroundMessageHandler()).to.throw( - 'messaging/only-available-in-sw' - ); - }); - - describe('getToken', () => { - it('uses default sw if none was registered nor provided', async () => { - expect(windowController.getSwReg()).to.be.undefined; - - await windowController.getToken({}); - - expect(registerStub).to.have.been.calledOnceWith(DEFAULT_SW_PATH, { - scope: DEFAULT_SW_SCOPE - }); - }); - - it('uses option-provided swReg if non was registered', async () => { - expect(windowController.getSwReg()).to.be.undefined; - - await windowController.getToken({ - serviceWorkerRegistration: swRegistration - }); - - expect(getTokenStub).to.have.been.calledOnceWith( - firebaseDependencies, - swRegistration, - DEFAULT_VAPID_KEY - ); - }); - - it('uses previously stored sw if non is provided in the option parameter', async () => { - windowController.useServiceWorker(swRegistration); - expect(windowController.getSwReg()).to.be.deep.equal(swRegistration); - - await windowController.getToken({}); - - expect(getTokenStub).to.have.been.calledOnceWith( - firebaseDependencies, - swRegistration, - DEFAULT_VAPID_KEY - ); - }); - - it('new swReg overrides existing swReg ', async () => { - windowController.useServiceWorker(swRegistration); - expect(windowController.getSwReg()).to.be.deep.equal(swRegistration); - - const otherSwReg = new FakeServiceWorkerRegistration(); - - await windowController.getToken({ - serviceWorkerRegistration: otherSwReg - }); - - expect(getTokenStub).to.have.been.calledOnceWith( - firebaseDependencies, - otherSwReg, - DEFAULT_VAPID_KEY - ); - }); - - it('uses default VAPID if: a) no VAPID was stored and b) none is provided in option', async () => { - expect(windowController.getVapidKey()).is.null; - - await windowController.getToken({}); - - expect(windowController.getVapidKey()).to.equal(DEFAULT_VAPID_KEY); - - expect(getTokenStub).to.have.been.calledOnceWith( - firebaseDependencies, - swRegistration, - DEFAULT_VAPID_KEY - ); - }); - - it('uses option-provided VAPID if no VAPID has been registered', async () => { - expect(windowController.getVapidKey()).is.null; - - await windowController.getToken({ vapidKey: 'test_vapid_key' }); - - expect(windowController.getVapidKey()).to.equal('test_vapid_key'); - expect(getTokenStub).to.have.been.calledOnceWith( - firebaseDependencies, - swRegistration, - 'test_vapid_key' - ); - }); - - it('uses option-provided VAPID if it is different from currently registered VAPID', async () => { - windowController.usePublicVapidKey('old_key'); - expect(windowController.getVapidKey()).to.equal('old_key'); - - await windowController.getToken({ vapidKey: 'new_key' }); - - expect(windowController.getVapidKey()).to.equal('new_key'); - expect(getTokenStub).to.have.been.calledOnceWith( - firebaseDependencies, - swRegistration, - 'new_key' - ); - }); - - it('uses existing VAPID if newly provided has the same value', async () => { - windowController.usePublicVapidKey('key'); - expect(windowController.getVapidKey()).to.equal('key'); - - await windowController.getToken({ vapidKey: 'key' }); - - expect(windowController.getVapidKey()).to.equal('key'); - expect(getTokenStub).to.have.been.calledOnceWith( - firebaseDependencies, - swRegistration, - 'key' - ); - }); - - it('uses existing VAPID if non is provided in the option parameter', async () => { - windowController.usePublicVapidKey('key'); - expect(windowController.getVapidKey()).to.equal('key'); - - await windowController.getToken({}); - - expect(windowController.getVapidKey()).to.equal('key'); - expect(getTokenStub).to.have.been.calledOnceWith( - firebaseDependencies, - swRegistration, - 'key' - ); - }); - - it('throws if permission is denied', async () => { - stub(Notification, 'permission').value('denied'); - - try { - await windowController.getToken(); - throw new Error('should have thrown'); - } catch (err) { - expect(err.code).to.equal(`messaging/${ErrorCode.PERMISSION_BLOCKED}`); - } - }); - - it('asks for permission if permission is default', async () => { - stub(Notification, 'permission').value('default'); - const requestPermissionStub = stub( - Notification, - 'requestPermission' - ).resolves('denied'); - - try { - await windowController.getToken(); - throw new Error('should have thrown'); - } catch (err) { - expect(err.code).to.equal(`messaging/${ErrorCode.PERMISSION_BLOCKED}`); - } - - expect(requestPermissionStub).to.have.been.calledOnce; - }); - - it('registers the default SW', async () => { - await windowController.getToken(); - - expect(registerStub).to.have.been.calledOnceWith(DEFAULT_SW_PATH, { - scope: DEFAULT_SW_SCOPE - }); - }); - - it('throws if there is a failure to get SW registration', async () => { - registerStub.rejects(); - - try { - await windowController.getToken(); - throw new Error('should have thrown'); - } catch (err) { - expect(err.code).to.equal( - `messaging/${ErrorCode.FAILED_DEFAULT_REGISTRATION}` - ); - } - }); - - it('calls tokenManagement.getToken with the default SW and VAPID key', async () => { - await windowController.getToken(); - - expect(getTokenStub).to.have.been.calledOnceWith( - firebaseDependencies, - swRegistration, - DEFAULT_VAPID_KEY - ); - }); - - it('calls tokenManagement.getToken with the specified SW and VAPID key', async () => { - const differentSwRegistration = new FakeServiceWorkerRegistration(); - differentSwRegistration.scope = '/different-scope'; - - windowController.usePublicVapidKey('newVapidKey'); - windowController.useServiceWorker(differentSwRegistration); - await windowController.getToken(); - - expect(getTokenStub).to.have.been.calledOnceWith( - firebaseDependencies, - differentSwRegistration, - 'newVapidKey' - ); - }); - }); - - describe('deleteToken', () => { - it('calls tokenManagement.deleteToken with the default SW', async () => { - await windowController.deleteToken(); - - expect(deleteTokenStub).to.have.been.calledOnceWith( - firebaseDependencies, - swRegistration - ); - }); - - it('calls tokenManagement.deleteToken with the specified SW', async () => { - const differentSwRegistration = new FakeServiceWorkerRegistration(); - differentSwRegistration.scope = '/different-scope'; - - windowController.useServiceWorker(differentSwRegistration); - await windowController.deleteToken(); - - expect(deleteTokenStub).to.have.been.calledOnceWith( - firebaseDependencies, - differentSwRegistration - ); - }); - }); - - describe('requestPermission', () => { - it('should resolve if the permission is already granted', async () => { - stub(Notification, 'permission').value('granted'); - - return windowController.requestPermission(); - }); - - it('should reject if requestPermission resolves with "denied"', async () => { - stub(Notification, 'permission').value('default'); - stub(Notification, 'requestPermission').resolves('denied'); - - try { - await windowController.requestPermission(); - throw new Error('Expected an error.'); - } catch (err) { - expect(err.code).to.equal('messaging/permission-blocked'); - } - }); - - it('should reject if requestPermission resolves with "default"', async () => { - stub(Notification, 'permission').value('default'); - stub(Notification, 'requestPermission').resolves('default'); - - try { - await windowController.requestPermission(); - throw new Error('Expected an error.'); - } catch (err) { - expect(err.code).to.equal('messaging/permission-default'); - } - }); - - it('should resolve if requestPermission resolves with "granted"', async () => { - stub(Notification, 'permission').value('default'); - stub(Notification, 'requestPermission').resolves('granted'); - - return windowController.requestPermission(); - }); - }); - - describe('onMessage', () => { - it('sets the onMessage callback', async () => { - const onMessageCallback = spy(); - windowController.onMessage(onMessageCallback); - - const internalPayload: MessagePayloadInternal = { - notification: { title: 'hello', body: 'world' }, - messageType: MessageType.PUSH_RECEIVED, - isFirebaseMessaging: true, - from: 'from', - // eslint-disable-next-line camelcase - collapse_key: 'collapse', - // eslint-disable-next-line camelcase - fcm_message_id: 'mid' - }; - - await messageEventListener( - new MessageEvent('message', { data: internalPayload }) - ); - - expect(onMessageCallback).to.have.been.called; - }); - - it('works with an observer', async () => { - const onMessageCallback = spy(); - windowController.onMessage({ - next: onMessageCallback, - error: () => {}, - complete: () => {} - }); - - const internalPayload: MessagePayloadInternal = { - notification: { title: 'hello', body: 'world' }, - messageType: MessageType.PUSH_RECEIVED, - isFirebaseMessaging: true, - from: 'from', - // eslint-disable-next-line camelcase - collapse_key: 'collapse', - // eslint-disable-next-line camelcase - fcm_message_id: 'mid' - }; - - await messageEventListener( - new MessageEvent('message', { data: internalPayload }) - ); - - expect(onMessageCallback).to.have.been.called; - }); - - it('returns a function that clears the onMessage callback', async () => { - const onMessageCallback = spy(); - const unsubscribe = windowController.onMessage(onMessageCallback); - unsubscribe(); - - const internalPayload: MessagePayloadInternal = { - notification: { title: 'hello', body: 'world' }, - messageType: MessageType.PUSH_RECEIVED, - isFirebaseMessaging: true, - from: 'from', - // eslint-disable-next-line camelcase - collapse_key: 'collapse', - // eslint-disable-next-line camelcase - fcm_message_id: 'mid' - }; - - await messageEventListener( - new MessageEvent('message', { data: internalPayload }) - ); - - expect(onMessageCallback).not.to.have.been.called; - }); - }); - - describe('usePublicVapidKey', () => { - it('throws on invalid input', () => { - expect(() => - windowController.usePublicVapidKey(null as unknown as string) - ).to.throw('messaging/invalid-vapid-key'); - - expect(() => windowController.usePublicVapidKey('')).to.throw( - 'messaging/invalid-vapid-key' - ); - }); - - it('throws if called twice', () => { - windowController.usePublicVapidKey('dmFwaWQta2V5LXZhbHVl'); - expect(() => - windowController.usePublicVapidKey('dmFwaWQta2V5LXZhbHVl') - ).to.throw('messaging/use-vapid-key-after-get-token'); - }); - - it('throws if called after getToken', async () => { - await windowController.getToken(); - - expect(() => - windowController.usePublicVapidKey('dmFwaWQta2V5LXZhbHVl') - ).to.throw('messaging/use-vapid-key-after-get-token'); - }); - }); - - describe('useServiceWorker', () => { - it('throws on invalid input', () => { - expect(() => - windowController.useServiceWorker( - {} as unknown as ServiceWorkerRegistration - ) - ).to.throw('messaging/invalid-sw-registration'); - }); - - it('throws if called twice', () => { - windowController.useServiceWorker(swRegistration); - expect(() => windowController.useServiceWorker(swRegistration)).to.throw( - 'messaging/use-sw-after-get-token' - ); - }); - - it('throws if called after getToken', async () => { - await windowController.getToken(); - - expect(() => windowController.useServiceWorker(swRegistration)).to.throw( - 'messaging/use-sw-after-get-token' - ); - }); - }); - - describe('SW message event handler', () => { - let clock: SinonFakeTimers; - let onMessageSpy: SinonSpy; - let logEventSpy: Spy; - - beforeEach(() => { - clock = useFakeTimers(); - - const analytics = firebaseDependencies.analyticsProvider.getImmediate(); - logEventSpy = spy(analytics, 'logEvent'); - - onMessageSpy = spy(); - windowController.onMessage(onMessageSpy); - }); - - it('does nothing when non-fcm message is passed in', async () => { - await messageEventListener( - new MessageEvent('message', { data: 'non-fcm-message' }) - ); - - expect(onMessageSpy).not.to.have.been.called; - expect(logEventSpy).not.to.have.been.called; - }); - - it('calls onMessage callback when it receives a PUSH_RECEIVED message', async () => { - const internalPayload: MessagePayloadInternal = { - notification: { title: 'hello', body: 'world' }, - messageType: MessageType.PUSH_RECEIVED, - isFirebaseMessaging: true, - from: 'from', - // eslint-disable-next-line camelcase - collapse_key: 'collapse', - // eslint-disable-next-line camelcase - fcm_message_id: 'mid' - }; - - await messageEventListener( - new MessageEvent('message', { data: internalPayload }) - ); - - expect(onMessageSpy).to.have.been.calledOnceWith({ - notification: { title: 'hello', body: 'world' }, - from: 'from', - // eslint-disable-next-line camelcase - collapse_key: 'collapse', - // eslint-disable-next-line camelcase - fcm_message_id: 'mid' - }); - expect(logEventSpy).not.to.have.been.called; - }); - - it('does not call onMessage callback when it receives a NOTIFICATION_CLICKED message', async () => { - const internalPayload: MessagePayloadInternal = { - notification: { title: 'hello', body: 'world' }, - messageType: MessageType.NOTIFICATION_CLICKED, - isFirebaseMessaging: true, - from: 'from', - // eslint-disable-next-line camelcase - collapse_key: 'collapse', - // eslint-disable-next-line camelcase - fcm_message_id: 'mid' - }; - - await messageEventListener( - new MessageEvent('message', { data: internalPayload }) - ); - - expect(onMessageSpy).not.to.have.been.called; - expect(logEventSpy).not.to.have.been.called; - }); - - it('calls analytics.logEvent if the message has analytics enabled for PUSH_RECEIVED', async () => { - const internalPayload: MessagePayloadInternal = { - notification: { title: 'hello', body: 'world' }, - data: { - [CONSOLE_CAMPAIGN_ID]: '123456', - [CONSOLE_CAMPAIGN_NAME]: 'Campaign Name', - [CONSOLE_CAMPAIGN_TIME]: '1234567890', - [CONSOLE_CAMPAIGN_ANALYTICS_ENABLED]: '1' - }, - messageType: MessageType.PUSH_RECEIVED, - isFirebaseMessaging: true, - from: 'from', - // eslint-disable-next-line camelcase - collapse_key: 'collapse', - // eslint-disable-next-line camelcase - fcm_message_id: 'mid' - }; - - await messageEventListener( - new MessageEvent('message', { data: internalPayload }) - ); - - expect(onMessageSpy).to.have.been.calledOnceWith({ - notification: { title: 'hello', body: 'world' }, - data: { - [CONSOLE_CAMPAIGN_ID]: '123456', - [CONSOLE_CAMPAIGN_NAME]: 'Campaign Name', - [CONSOLE_CAMPAIGN_TIME]: '1234567890', - [CONSOLE_CAMPAIGN_ANALYTICS_ENABLED]: '1' - }, - from: 'from', - // eslint-disable-next-line camelcase - collapse_key: 'collapse', - // eslint-disable-next-line camelcase - fcm_message_id: 'mid' - }); - expect(logEventSpy).to.have.been.calledOnceWith( - 'notification_foreground', - { - /* eslint-disable camelcase */ - message_id: '123456', - message_name: 'Campaign Name', - message_time: '1234567890', - message_device_time: clock.now - /* eslint-enable camelcase */ - } - ); - }); - - it('calls analytics.logEvent if the message has analytics enabled for NOTIFICATION_CLICKED', async () => { - const internalPayload: MessagePayloadInternal = { - notification: { title: 'hello', body: 'world' }, - data: { - [CONSOLE_CAMPAIGN_ID]: '123456', - [CONSOLE_CAMPAIGN_NAME]: 'Campaign Name', - [CONSOLE_CAMPAIGN_TIME]: '1234567890', - [CONSOLE_CAMPAIGN_ANALYTICS_ENABLED]: '1' - }, - messageType: MessageType.NOTIFICATION_CLICKED, - isFirebaseMessaging: true, - from: 'from', - // eslint-disable-next-line camelcase - collapse_key: 'collapse', - // eslint-disable-next-line camelcase - fcm_message_id: 'mid' - }; - - await messageEventListener( - new MessageEvent('message', { data: internalPayload }) - ); - - expect(onMessageSpy).not.to.have.been.called; - expect(logEventSpy).to.have.been.calledOnceWith('notification_open', { - /* eslint-disable camelcase */ - message_id: '123456', - message_name: 'Campaign Name', - message_time: '1234567890', - message_device_time: clock.now - /* eslint-enable camelcase */ - }); - }); - }); - - describe('onTokenRefresh', () => { - it('returns an unsubscribe function that does nothing', () => { - const unsubscribe = windowController.onTokenRefresh(); - expect(unsubscribe).not.to.throw; - }); - }); -}); diff --git a/packages-old/messaging/src/controllers/window-controller.ts b/packages-old/messaging/src/controllers/window-controller.ts deleted file mode 100644 index 0ac24de9fe4..00000000000 --- a/packages-old/messaging/src/controllers/window-controller.ts +++ /dev/null @@ -1,298 +0,0 @@ -/** - * @license - * Copyright 2017 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { - CONSOLE_CAMPAIGN_ANALYTICS_ENABLED, - CONSOLE_CAMPAIGN_ID, - CONSOLE_CAMPAIGN_NAME, - CONSOLE_CAMPAIGN_TIME, - DEFAULT_SW_PATH, - DEFAULT_SW_SCOPE, - DEFAULT_VAPID_KEY -} from '../util/constants'; -import { - ConsoleMessageData, - MessagePayloadInternal, - MessageType -} from '../interfaces/internal-message-payload'; -import { ERROR_FACTORY, ErrorCode } from '../util/errors'; -import { NextFn, Observer, Unsubscribe } from '@firebase/util'; -import { deleteToken, getToken } from '../core/token-management'; - -import { FirebaseApp } from '@firebase/app-types'; -import { FirebaseInternalDependencies } from '../interfaces/internal-dependencies'; -import { FirebaseMessaging } from '@firebase/messaging-types'; -import { FirebaseService } from '@firebase/app-types/private'; -import { isConsoleMessage } from '../helpers/is-console-message'; - -export class WindowController implements FirebaseMessaging, FirebaseService { - private vapidKey: string | null = null; - private swRegistration?: ServiceWorkerRegistration; - private onMessageCallback: NextFn | Observer | null = null; - - constructor( - private readonly firebaseDependencies: FirebaseInternalDependencies - ) { - navigator.serviceWorker.addEventListener('message', e => - this.messageEventListener(e) - ); - } - - get app(): FirebaseApp { - return this.firebaseDependencies.app; - } - - private async messageEventListener(event: MessageEvent): Promise { - const internalPayload = event.data as MessagePayloadInternal; - - if (!internalPayload.isFirebaseMessaging) { - return; - } - - // onMessageCallback is either a function or observer/subscriber. - // TODO: in the modularization release, have onMessage handle type MessagePayload as supposed to - // the legacy payload where some fields are in snake cases. - if ( - this.onMessageCallback && - internalPayload.messageType === MessageType.PUSH_RECEIVED - ) { - if (typeof this.onMessageCallback === 'function') { - this.onMessageCallback( - stripInternalFields(Object.assign({}, internalPayload)) - ); - } else { - this.onMessageCallback.next(Object.assign({}, internalPayload)); - } - } - - const dataPayload = internalPayload.data; - - if ( - isConsoleMessage(dataPayload) && - dataPayload[CONSOLE_CAMPAIGN_ANALYTICS_ENABLED] === '1' - ) { - await this.logEvent(internalPayload.messageType!, dataPayload); - } - } - - getVapidKey(): string | null { - return this.vapidKey; - } - - getSwReg(): ServiceWorkerRegistration | undefined { - return this.swRegistration; - } - - async getToken(options?: { - vapidKey?: string; - serviceWorkerRegistration?: ServiceWorkerRegistration; - }): Promise { - if (Notification.permission === 'default') { - await Notification.requestPermission(); - } - - if (Notification.permission !== 'granted') { - throw ERROR_FACTORY.create(ErrorCode.PERMISSION_BLOCKED); - } - - await this.updateVapidKey(options?.vapidKey); - await this.updateSwReg(options?.serviceWorkerRegistration); - - return getToken( - this.firebaseDependencies, - this.swRegistration!, - this.vapidKey! - ); - } - - async updateVapidKey(vapidKey?: string | undefined): Promise { - if (!!vapidKey) { - this.vapidKey = vapidKey; - } else if (!this.vapidKey) { - this.vapidKey = DEFAULT_VAPID_KEY; - } - } - - async updateSwReg( - swRegistration?: ServiceWorkerRegistration | undefined - ): Promise { - if (!swRegistration && !this.swRegistration) { - await this.registerDefaultSw(); - } - - if (!swRegistration && !!this.swRegistration) { - return; - } - - if (!(swRegistration instanceof ServiceWorkerRegistration)) { - throw ERROR_FACTORY.create(ErrorCode.INVALID_SW_REGISTRATION); - } - - this.swRegistration = swRegistration; - } - - private async registerDefaultSw(): Promise { - try { - this.swRegistration = await navigator.serviceWorker.register( - DEFAULT_SW_PATH, - { - scope: DEFAULT_SW_SCOPE - } - ); - - // The timing when browser updates sw when sw has an update is unreliable by my experiment. It - // leads to version conflict when the SDK upgrades to a newer version in the main page, but sw - // is stuck with the old version. For example, - // https://github.com/firebase/firebase-js-sdk/issues/2590 The following line reliably updates - // sw if there was an update. - this.swRegistration.update().catch(() => { - /* it is non blocking and we don't care if it failed */ - }); - } catch (e) { - throw ERROR_FACTORY.create(ErrorCode.FAILED_DEFAULT_REGISTRATION, { - browserErrorMessage: e.message - }); - } - } - - async deleteToken(): Promise { - if (!this.swRegistration) { - await this.registerDefaultSw(); - } - - return deleteToken(this.firebaseDependencies, this.swRegistration!); - } - - /** - * Request permission if it is not currently granted. - * - * @return Resolves if the permission was granted, rejects otherwise. - * - * @deprecated Use Notification.requestPermission() instead. - * https://developer.mozilla.org/en-US/docs/Web/API/Notification/requestPermission - */ - async requestPermission(): Promise { - if (Notification.permission === 'granted') { - return; - } - - const permissionResult = await Notification.requestPermission(); - if (permissionResult === 'granted') { - return; - } else if (permissionResult === 'denied') { - throw ERROR_FACTORY.create(ErrorCode.PERMISSION_BLOCKED); - } else { - throw ERROR_FACTORY.create(ErrorCode.PERMISSION_DEFAULT); - } - } - - /** - * @deprecated. Use getToken(options?: {vapidKey?: string; serviceWorkerRegistration?: - * ServiceWorkerRegistration;}): Promise instead. - */ - usePublicVapidKey(vapidKey: string): void { - if (this.vapidKey !== null) { - throw ERROR_FACTORY.create(ErrorCode.USE_VAPID_KEY_AFTER_GET_TOKEN); - } - - if (typeof vapidKey !== 'string' || vapidKey.length === 0) { - throw ERROR_FACTORY.create(ErrorCode.INVALID_VAPID_KEY); - } - - this.vapidKey = vapidKey; - } - - /** - * @deprecated. Use getToken(options?: {vapidKey?: string; serviceWorkerRegistration?: - * ServiceWorkerRegistration;}): Promise instead. - */ - useServiceWorker(swRegistration: ServiceWorkerRegistration): void { - if (!(swRegistration instanceof ServiceWorkerRegistration)) { - throw ERROR_FACTORY.create(ErrorCode.INVALID_SW_REGISTRATION); - } - - if (this.swRegistration) { - throw ERROR_FACTORY.create(ErrorCode.USE_SW_AFTER_GET_TOKEN); - } - - this.swRegistration = swRegistration; - } - - /** - * @param nextOrObserver An observer object or a function triggered on message. - * - * @return The unsubscribe function for the observer. - */ - onMessage(nextOrObserver: NextFn | Observer): Unsubscribe { - this.onMessageCallback = nextOrObserver; - - return () => { - this.onMessageCallback = null; - }; - } - - setBackgroundMessageHandler(): void { - throw ERROR_FACTORY.create(ErrorCode.AVAILABLE_IN_SW); - } - - onBackgroundMessage(): Unsubscribe { - throw ERROR_FACTORY.create(ErrorCode.AVAILABLE_IN_SW); - } - - /** - * @deprecated No-op. It was initially designed with token rotation requests from server in mind. - * However, the plan to implement such feature was abandoned. - */ - onTokenRefresh(): Unsubscribe { - return () => {}; - } - - private async logEvent( - messageType: MessageType, - data: ConsoleMessageData - ): Promise { - const eventType = getEventType(messageType); - const analytics = await this.firebaseDependencies.analyticsProvider.get(); - analytics.logEvent(eventType, { - /* eslint-disable camelcase */ - message_id: data[CONSOLE_CAMPAIGN_ID], - message_name: data[CONSOLE_CAMPAIGN_NAME], - message_time: data[CONSOLE_CAMPAIGN_TIME], - message_device_time: Math.floor(Date.now() / 1000) - /* eslint-enable camelcase */ - }); - } -} - -function getEventType(messageType: MessageType): string { - switch (messageType) { - case MessageType.NOTIFICATION_CLICKED: - return 'notification_open'; - case MessageType.PUSH_RECEIVED: - return 'notification_foreground'; - default: - throw new Error(); - } -} - -function stripInternalFields( - internalPayload: MessagePayloadInternal -): MessagePayloadInternal { - delete internalPayload.messageType; - delete internalPayload.isFirebaseMessaging; - return internalPayload; -} diff --git a/packages-old/messaging/src/core/api.test.ts b/packages-old/messaging/src/core/api.test.ts deleted file mode 100644 index da3368191c8..00000000000 --- a/packages-old/messaging/src/core/api.test.ts +++ /dev/null @@ -1,217 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import '../testing/setup'; - -import { - ApiRequestBody, - requestDeleteToken, - requestGetToken, - requestUpdateToken -} from './api'; - -import { ENDPOINT } from '../util/constants'; -import { FirebaseInternalDependencies } from '../interfaces/internal-dependencies'; -import { Stub } from '../testing/sinon-types'; -import { TokenDetails } from '../interfaces/token-details'; -import { compareHeaders } from '../testing/compare-headers'; -import { expect } from 'chai'; -import { getFakeFirebaseDependencies } from '../testing/fakes/firebase-dependencies'; -import { getFakeTokenDetails } from '../testing/fakes/token-details'; -import { stub } from 'sinon'; - -describe('API', () => { - let tokenDetails: TokenDetails; - let firebaseDependencies: FirebaseInternalDependencies; - let fetchStub: Stub; - - beforeEach(() => { - tokenDetails = getFakeTokenDetails(); - firebaseDependencies = getFakeFirebaseDependencies(); - fetchStub = stub(self, 'fetch'); - }); - - describe('getToken', () => { - it('calls the createRegistration server API with correct parameters', async () => { - fetchStub.resolves( - new Response(JSON.stringify({ token: 'fcm-token-from-server' })) - ); - - const response = await requestGetToken( - firebaseDependencies, - tokenDetails.subscriptionOptions! - ); - - const expectedHeaders = new Headers({ - 'Content-Type': 'application/json', - Accept: 'application/json', - 'x-goog-api-key': 'apiKey', - 'x-goog-firebase-installations-auth': `FIS authToken` - }); - const expectedBody: ApiRequestBody = { - web: { - endpoint: 'https://example.org', - auth: 'YXV0aC12YWx1ZQ', - p256dh: 'cDI1Ni12YWx1ZQ', - applicationPubKey: 'dmFwaWQta2V5LXZhbHVl' - } - }; - const expectedRequest: RequestInit = { - method: 'POST', - headers: expectedHeaders, - body: JSON.stringify(expectedBody) - }; - const expectedEndpoint = `${ENDPOINT}/projects/projectId/registrations`; - - expect(response).to.equal('fcm-token-from-server'); - expect(fetchStub).to.be.calledOnceWith(expectedEndpoint, expectedRequest); - const actualHeaders = fetchStub.lastCall.lastArg.headers; - compareHeaders(expectedHeaders, actualHeaders); - }); - - it('throws if there is a problem with the response', async () => { - fetchStub.rejects(new Error('Fetch failed')); - await expect( - requestGetToken(firebaseDependencies, tokenDetails.subscriptionOptions!) - ).to.be.rejectedWith('Fetch failed'); - - fetchStub.resolves( - new Response(JSON.stringify({ error: { message: 'error message' } })) - ); - await expect( - requestGetToken(firebaseDependencies, tokenDetails.subscriptionOptions!) - ).to.be.rejectedWith('messaging/token-subscribe-failed'); - - fetchStub.resolves( - new Response( - JSON.stringify({ - /* no token */ - }) - ) - ); - await expect( - requestGetToken(firebaseDependencies, tokenDetails.subscriptionOptions!) - ).to.be.rejectedWith('messaging/token-subscribe-no-token'); - }); - }); - - describe('updateToken', () => { - it('calls the updateRegistration server API with correct parameters', async () => { - fetchStub.resolves( - new Response(JSON.stringify({ token: 'fcm-token-from-server' })) - ); - - const response = await requestUpdateToken( - firebaseDependencies, - tokenDetails - ); - - const expectedHeaders = new Headers({ - 'Content-Type': 'application/json', - Accept: 'application/json', - 'x-goog-api-key': 'apiKey', - 'x-goog-firebase-installations-auth': `FIS authToken` - }); - const expectedBody: ApiRequestBody = { - web: { - endpoint: 'https://example.org', - auth: 'YXV0aC12YWx1ZQ', - p256dh: 'cDI1Ni12YWx1ZQ', - applicationPubKey: 'dmFwaWQta2V5LXZhbHVl' - } - }; - const expectedRequest: RequestInit = { - method: 'PATCH', - headers: expectedHeaders, - body: JSON.stringify(expectedBody) - }; - const expectedEndpoint = `${ENDPOINT}/projects/projectId/registrations/token-value`; - - expect(response).to.equal('fcm-token-from-server'); - expect(fetchStub).to.be.calledOnceWith(expectedEndpoint, expectedRequest); - const actualHeaders = fetchStub.lastCall.lastArg.headers; - compareHeaders(expectedHeaders, actualHeaders); - }); - - it('throws if there is a problem with the response', async () => { - fetchStub.rejects(new Error('Fetch failed')); - await expect( - requestUpdateToken(firebaseDependencies, tokenDetails) - ).to.be.rejectedWith('Fetch failed'); - - fetchStub.resolves( - new Response(JSON.stringify({ error: { message: 'error message' } })) - ); - await expect( - requestUpdateToken(firebaseDependencies, tokenDetails) - ).to.be.rejectedWith('messaging/token-update-failed'); - - fetchStub.resolves( - new Response( - JSON.stringify({ - /* no token */ - }) - ) - ); - await expect( - requestUpdateToken(firebaseDependencies, tokenDetails) - ).to.be.rejectedWith('messaging/token-update-no-token'); - }); - }); - - describe('deleteToken', () => { - it('calls the deleteRegistration server API with correct parameters', async () => { - fetchStub.resolves(new Response(JSON.stringify({}))); - - const response = await requestDeleteToken( - firebaseDependencies, - tokenDetails.token - ); - - const expectedHeaders = new Headers({ - 'Content-Type': 'application/json', - Accept: 'application/json', - 'x-goog-api-key': 'apiKey', - 'x-goog-firebase-installations-auth': `FIS authToken` - }); - const expectedRequest: RequestInit = { - method: 'DELETE', - headers: expectedHeaders - }; - const expectedEndpoint = `${ENDPOINT}/projects/projectId/registrations/token-value`; - - expect(response).to.be.undefined; - expect(fetchStub).to.be.calledOnceWith(expectedEndpoint, expectedRequest); - const actualHeaders = fetchStub.lastCall.lastArg.headers; - compareHeaders(expectedHeaders, actualHeaders); - }); - - it('throws if there is a problem with the response', async () => { - fetchStub.rejects(new Error('Fetch failed')); - await expect( - requestDeleteToken(firebaseDependencies, tokenDetails.token) - ).to.be.rejectedWith('Fetch failed'); - - fetchStub.resolves( - new Response(JSON.stringify({ error: { message: 'error message' } })) - ); - await expect( - requestDeleteToken(firebaseDependencies, tokenDetails.token) - ).to.be.rejectedWith('messaging/token-unsubscribe-failed'); - }); - }); -}); diff --git a/packages-old/messaging/src/core/api.ts b/packages-old/messaging/src/core/api.ts deleted file mode 100644 index b93f8623601..00000000000 --- a/packages-old/messaging/src/core/api.ts +++ /dev/null @@ -1,186 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { DEFAULT_VAPID_KEY, ENDPOINT } from '../util/constants'; -import { ERROR_FACTORY, ErrorCode } from '../util/errors'; -import { SubscriptionOptions, TokenDetails } from '../interfaces/token-details'; - -import { AppConfig } from '../interfaces/app-config'; -import { FirebaseInternalDependencies } from '../interfaces/internal-dependencies'; - -export interface ApiResponse { - token?: string; - error?: { message: string }; -} - -export interface ApiRequestBody { - web: { - endpoint: string; - p256dh: string; - auth: string; - applicationPubKey?: string; - }; -} - -export async function requestGetToken( - firebaseDependencies: FirebaseInternalDependencies, - subscriptionOptions: SubscriptionOptions -): Promise { - const headers = await getHeaders(firebaseDependencies); - const body = getBody(subscriptionOptions); - - const subscribeOptions = { - method: 'POST', - headers, - body: JSON.stringify(body) - }; - - let responseData: ApiResponse; - try { - const response = await fetch( - getEndpoint(firebaseDependencies.appConfig), - subscribeOptions - ); - responseData = await response.json(); - } catch (err) { - throw ERROR_FACTORY.create(ErrorCode.TOKEN_SUBSCRIBE_FAILED, { - errorInfo: err - }); - } - - if (responseData.error) { - const message = responseData.error.message; - throw ERROR_FACTORY.create(ErrorCode.TOKEN_SUBSCRIBE_FAILED, { - errorInfo: message - }); - } - - if (!responseData.token) { - throw ERROR_FACTORY.create(ErrorCode.TOKEN_SUBSCRIBE_NO_TOKEN); - } - - return responseData.token; -} - -export async function requestUpdateToken( - firebaseDependencies: FirebaseInternalDependencies, - tokenDetails: TokenDetails -): Promise { - const headers = await getHeaders(firebaseDependencies); - const body = getBody(tokenDetails.subscriptionOptions!); - - const updateOptions = { - method: 'PATCH', - headers, - body: JSON.stringify(body) - }; - - let responseData: ApiResponse; - try { - const response = await fetch( - `${getEndpoint(firebaseDependencies.appConfig)}/${tokenDetails.token}`, - updateOptions - ); - responseData = await response.json(); - } catch (err) { - throw ERROR_FACTORY.create(ErrorCode.TOKEN_UPDATE_FAILED, { - errorInfo: err - }); - } - - if (responseData.error) { - const message = responseData.error.message; - throw ERROR_FACTORY.create(ErrorCode.TOKEN_UPDATE_FAILED, { - errorInfo: message - }); - } - - if (!responseData.token) { - throw ERROR_FACTORY.create(ErrorCode.TOKEN_UPDATE_NO_TOKEN); - } - - return responseData.token; -} - -export async function requestDeleteToken( - firebaseDependencies: FirebaseInternalDependencies, - token: string -): Promise { - const headers = await getHeaders(firebaseDependencies); - - const unsubscribeOptions = { - method: 'DELETE', - headers - }; - - try { - const response = await fetch( - `${getEndpoint(firebaseDependencies.appConfig)}/${token}`, - unsubscribeOptions - ); - const responseData: ApiResponse = await response.json(); - if (responseData.error) { - const message = responseData.error.message; - throw ERROR_FACTORY.create(ErrorCode.TOKEN_UNSUBSCRIBE_FAILED, { - errorInfo: message - }); - } - } catch (err) { - throw ERROR_FACTORY.create(ErrorCode.TOKEN_UNSUBSCRIBE_FAILED, { - errorInfo: err - }); - } -} - -function getEndpoint({ projectId }: AppConfig): string { - return `${ENDPOINT}/projects/${projectId!}/registrations`; -} - -async function getHeaders({ - appConfig, - installations -}: FirebaseInternalDependencies): Promise { - const authToken = await installations.getToken(); - - return new Headers({ - 'Content-Type': 'application/json', - Accept: 'application/json', - 'x-goog-api-key': appConfig.apiKey!, - 'x-goog-firebase-installations-auth': `FIS ${authToken}` - }); -} - -function getBody({ - p256dh, - auth, - endpoint, - vapidKey -}: SubscriptionOptions): ApiRequestBody { - const body: ApiRequestBody = { - web: { - endpoint, - auth, - p256dh - } - }; - - if (vapidKey !== DEFAULT_VAPID_KEY) { - body.web.applicationPubKey = vapidKey; - } - - return body; -} diff --git a/packages-old/messaging/src/core/token-management.test.ts b/packages-old/messaging/src/core/token-management.test.ts deleted file mode 100644 index db9f3e39268..00000000000 --- a/packages-old/messaging/src/core/token-management.test.ts +++ /dev/null @@ -1,296 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import '../testing/setup'; - -import * as apiModule from './api'; - -import { SubscriptionOptions, TokenDetails } from '../interfaces/token-details'; -import { dbGet, dbSet } from '../helpers/idb-manager'; -import { deleteToken, getToken } from './token-management'; -import { spy, stub, useFakeTimers } from 'sinon'; - -import { DEFAULT_VAPID_KEY } from '../util/constants'; -import { ErrorCode } from '../util/errors'; -import { FakeServiceWorkerRegistration } from '../testing/fakes/service-worker'; -import { FirebaseInternalDependencies } from '../interfaces/internal-dependencies'; -import { Stub } from '../testing/sinon-types'; -import { arrayToBase64 } from '../helpers/array-base64-translator'; -import { expect } from 'chai'; -import { getFakeFirebaseDependencies } from '../testing/fakes/firebase-dependencies'; -import { getFakeTokenDetails } from '../testing/fakes/token-details'; - -describe('Token Management', () => { - let tokenDetails: TokenDetails; - let firebaseDependencies: FirebaseInternalDependencies; - let swRegistration: FakeServiceWorkerRegistration; - let requestGetTokenStub: Stub; - let requestUpdateTokenStub: Stub; - let requestDeleteTokenStub: Stub; - - beforeEach(() => { - useFakeTimers({ now: 1234567890 }); - - tokenDetails = getFakeTokenDetails(); - firebaseDependencies = getFakeFirebaseDependencies(); - swRegistration = new FakeServiceWorkerRegistration(); - - requestGetTokenStub = stub(apiModule, 'requestGetToken').resolves( - 'token-from-server' // new token. - ); - requestUpdateTokenStub = stub(apiModule, 'requestUpdateToken').resolves( - tokenDetails.token // same as current token. - ); - requestDeleteTokenStub = stub(apiModule, 'requestDeleteToken').resolves(); - }); - - describe('getToken', () => { - it("throws if notification permission isn't granted", async () => { - stub(Notification, 'permission').value('denied'); - - try { - await getToken(firebaseDependencies, swRegistration, DEFAULT_VAPID_KEY); - throw new Error('should have thrown'); - } catch (err) { - expect(err.code).to.equal(`messaging/${ErrorCode.PERMISSION_BLOCKED}`); - } - - expect(requestGetTokenStub).not.to.have.been.called; - expect(requestUpdateTokenStub).not.to.have.been.called; - expect(requestDeleteTokenStub).not.to.have.been.called; - }); - - it('gets a new token if there is none', async () => { - stub(Notification, 'permission').value('granted'); - - const token = await getToken( - firebaseDependencies, - swRegistration, - tokenDetails.subscriptionOptions!.vapidKey - ); - - expect(token).to.equal('token-from-server'); - expect(requestGetTokenStub).to.have.been.calledOnceWith( - firebaseDependencies, - tokenDetails.subscriptionOptions - ); - expect(requestUpdateTokenStub).not.to.have.been.called; - expect(requestDeleteTokenStub).not.to.have.been.called; - - const tokenFromDb = await dbGet(firebaseDependencies); - expect(token).to.equal(tokenFromDb!.token); - expect(tokenFromDb).to.deep.equal({ - ...tokenDetails, - token: 'token-from-server' - }); - }); - - it('deletes the token and requests a new one if the token is invalid', async () => { - stub(Notification, 'permission').value('granted'); - - await dbSet(firebaseDependencies, tokenDetails); - - // Change the auth in the Push subscription, invalidating the token. - const subscription = await swRegistration.pushManager.subscribe(); - subscription.auth = 'different-auth'; - const newAuth = arrayToBase64(subscription.getKey('auth')); - - const token = await getToken( - firebaseDependencies, - swRegistration, - tokenDetails.subscriptionOptions!.vapidKey - ); - - const expectedSubscriptionOptions: SubscriptionOptions = { - ...tokenDetails.subscriptionOptions!, - auth: newAuth - }; - - expect(token).to.equal('token-from-server'); - expect(requestGetTokenStub).to.have.been.calledOnceWith( - firebaseDependencies, - expectedSubscriptionOptions - ); - expect(requestUpdateTokenStub).not.to.have.been.called; - expect(requestDeleteTokenStub).to.have.been.calledOnceWith( - firebaseDependencies, - tokenDetails.token - ); - - const tokenFromDb = await dbGet(firebaseDependencies); - expect(token).to.equal(tokenFromDb!.token); - expect(tokenFromDb).to.deep.equal({ - ...tokenDetails, - token, - subscriptionOptions: expectedSubscriptionOptions - }); - }); - - it('deletes the token and requests a new one if the VAPID key changes', async () => { - stub(Notification, 'permission').value('granted'); - - await dbSet(firebaseDependencies, tokenDetails); - - const token = await getToken( - firebaseDependencies, - swRegistration, - 'some-other-vapid-key' - ); - - const expectedSubscriptionOptions: SubscriptionOptions = { - ...tokenDetails.subscriptionOptions!, - vapidKey: 'some-other-vapid-key' - }; - - expect(token).to.equal('token-from-server'); - expect(requestGetTokenStub).to.have.been.calledOnceWith( - firebaseDependencies, - expectedSubscriptionOptions - ); - expect(requestUpdateTokenStub).not.to.have.been.called; - expect(requestDeleteTokenStub).to.have.been.calledOnceWith( - firebaseDependencies, - tokenDetails.token - ); - - const tokenFromDb = await dbGet(firebaseDependencies); - expect(token).to.equal(tokenFromDb!.token); - expect(tokenFromDb).to.deep.equal({ - ...tokenDetails, - token, - subscriptionOptions: expectedSubscriptionOptions - }); - }); - - it('updates the token if it was last updated more than a week ago', async () => { - stub(Notification, 'permission').value('granted'); - - // Change create time to be older than a week. - tokenDetails.createTime = Date.now() - 8 * 24 * 60 * 60 * 1000; // 8 days - - await dbSet(firebaseDependencies, tokenDetails); - - const token = await getToken( - firebaseDependencies, - swRegistration, - tokenDetails.subscriptionOptions!.vapidKey - ); - const expectedTokenDetails: TokenDetails = { - ...tokenDetails, - createTime: Date.now() - }; - - expect(token).to.equal(tokenDetails.token); // Same token. - expect(requestGetTokenStub).not.to.have.been.called; - expect(requestUpdateTokenStub).to.have.been.calledOnceWith( - firebaseDependencies, - expectedTokenDetails - ); - expect(requestDeleteTokenStub).not.to.have.been.called; - - const tokenFromDb = await dbGet(firebaseDependencies); - expect(token).to.equal(tokenFromDb!.token); - expect(tokenFromDb).to.deep.equal(expectedTokenDetails); - }); - - it('deletes the token if the update fails', async () => { - stub(Notification, 'permission').value('granted'); - - // Change create time to be older than a week. - tokenDetails.createTime = Date.now() - 8 * 24 * 60 * 60 * 1000; // 8 days - - await dbSet(firebaseDependencies, tokenDetails); - - requestUpdateTokenStub.rejects(new Error('Update failed.')); - - await expect( - getToken( - firebaseDependencies, - swRegistration, - tokenDetails.subscriptionOptions!.vapidKey - ) - ).to.be.rejectedWith('Update failed.'); - - const expectedTokenDetails: TokenDetails = { - ...tokenDetails, - createTime: Date.now() - }; - - expect(requestGetTokenStub).not.to.have.been.called; - expect(requestUpdateTokenStub).to.have.been.calledOnceWith( - firebaseDependencies, - expectedTokenDetails - ); - expect(requestDeleteTokenStub).to.have.been.calledOnceWith( - firebaseDependencies, - tokenDetails.token - ); - - const tokenFromDb = await dbGet(firebaseDependencies); - expect(tokenFromDb).to.be.undefined; - }); - - it('returns the token if it is valid', async () => { - stub(Notification, 'permission').value('granted'); - - await dbSet(firebaseDependencies, tokenDetails); - - const token = await getToken( - firebaseDependencies, - swRegistration, - tokenDetails.subscriptionOptions!.vapidKey - ); - - expect(token).to.equal(tokenDetails.token); - expect(requestGetTokenStub).not.to.have.been.called; - expect(requestUpdateTokenStub).not.to.have.been.called; - expect(requestDeleteTokenStub).not.to.have.been.called; - - const tokenFromDb = await dbGet(firebaseDependencies); - expect(tokenFromDb).to.deep.equal(tokenDetails); - }); - }); - - describe('deleteToken', () => { - it('returns if there is no token in the db', async () => { - await deleteToken(firebaseDependencies, swRegistration); - - expect(requestGetTokenStub).not.to.have.been.called; - expect(requestUpdateTokenStub).not.to.have.been.called; - expect(requestDeleteTokenStub).not.to.have.been.called; - }); - - it('removes token from the db, calls requestDeleteToken and unsubscribes the push subscription', async () => { - const unsubscribeSpy = spy( - await swRegistration.pushManager.subscribe(), - 'unsubscribe' - ); - await dbSet(firebaseDependencies, tokenDetails); - - await deleteToken(firebaseDependencies, swRegistration); - - expect(await dbGet(firebaseDependencies)).to.be.undefined; - expect(requestGetTokenStub).not.to.have.been.called; - expect(requestUpdateTokenStub).not.to.have.been.called; - expect(requestDeleteTokenStub).not.to.have.been.calledOnceWith( - firebaseDependencies, - tokenDetails - ); - expect(unsubscribeSpy).to.have.been.called; - }); - }); -}); diff --git a/packages-old/messaging/src/core/token-management.ts b/packages-old/messaging/src/core/token-management.ts deleted file mode 100644 index b314c89fc77..00000000000 --- a/packages-old/messaging/src/core/token-management.ts +++ /dev/null @@ -1,184 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { ERROR_FACTORY, ErrorCode } from '../util/errors'; -import { SubscriptionOptions, TokenDetails } from '../interfaces/token-details'; -import { - arrayToBase64, - base64ToArray -} from '../helpers/array-base64-translator'; -import { dbGet, dbRemove, dbSet } from '../helpers/idb-manager'; -import { requestDeleteToken, requestGetToken, requestUpdateToken } from './api'; - -import { FirebaseInternalDependencies } from '../interfaces/internal-dependencies'; - -/** UpdateRegistration will be called once every week. */ -const TOKEN_EXPIRATION_MS = 7 * 24 * 60 * 60 * 1000; // 7 days - -export async function getToken( - firebaseDependencies: FirebaseInternalDependencies, - swRegistration: ServiceWorkerRegistration, - vapidKey: string -): Promise { - if (Notification.permission !== 'granted') { - throw ERROR_FACTORY.create(ErrorCode.PERMISSION_BLOCKED); - } - - // If a PushSubscription exists it's returned, otherwise a new subscription is generated and - // returned. - const pushSubscription = await getPushSubscription(swRegistration, vapidKey); - const tokenDetails = await dbGet(firebaseDependencies); - - const subscriptionOptions: SubscriptionOptions = { - vapidKey, - swScope: swRegistration.scope, - endpoint: pushSubscription.endpoint, - auth: arrayToBase64(pushSubscription.getKey('auth')!), - p256dh: arrayToBase64(pushSubscription.getKey('p256dh')!) - }; - - if (!tokenDetails) { - // No token, get a new one. - return getNewToken(firebaseDependencies, subscriptionOptions); - } else if ( - !isTokenValid(tokenDetails.subscriptionOptions!, subscriptionOptions) - ) { - // Invalid token, get a new one. - try { - await requestDeleteToken(firebaseDependencies, tokenDetails.token); - } catch (e) { - // Suppress errors because of #2364 - console.warn(e); - } - - return getNewToken(firebaseDependencies, subscriptionOptions); - } else if (Date.now() >= tokenDetails.createTime + TOKEN_EXPIRATION_MS) { - // Weekly token refresh - return updateToken( - { - token: tokenDetails.token, - createTime: Date.now(), - subscriptionOptions - }, - firebaseDependencies, - swRegistration - ); - } else { - // Valid token, nothing to do. - return tokenDetails.token; - } -} - -/** - * This method deletes the token from the database, unsubscribes the token from FCM, and unregisters - * the push subscription if it exists. - */ -export async function deleteToken( - firebaseDependencies: FirebaseInternalDependencies, - swRegistration: ServiceWorkerRegistration -): Promise { - const tokenDetails = await dbGet(firebaseDependencies); - if (tokenDetails) { - await requestDeleteToken(firebaseDependencies, tokenDetails.token); - await dbRemove(firebaseDependencies); - } - - // Unsubscribe from the push subscription. - const pushSubscription = await swRegistration.pushManager.getSubscription(); - if (pushSubscription) { - return pushSubscription.unsubscribe(); - } - - // If there's no SW, consider it a success. - return true; -} - -async function updateToken( - tokenDetails: TokenDetails, - firebaseDependencies: FirebaseInternalDependencies, - swRegistration: ServiceWorkerRegistration -): Promise { - try { - const updatedToken = await requestUpdateToken( - firebaseDependencies, - tokenDetails - ); - - const updatedTokenDetails: TokenDetails = { - ...tokenDetails, - token: updatedToken, - createTime: Date.now() - }; - - await dbSet(firebaseDependencies, updatedTokenDetails); - return updatedToken; - } catch (e) { - await deleteToken(firebaseDependencies, swRegistration); - throw e; - } -} - -async function getNewToken( - firebaseDependencies: FirebaseInternalDependencies, - subscriptionOptions: SubscriptionOptions -): Promise { - const token = await requestGetToken( - firebaseDependencies, - subscriptionOptions - ); - const tokenDetails: TokenDetails = { - token, - createTime: Date.now(), - subscriptionOptions - }; - await dbSet(firebaseDependencies, tokenDetails); - return tokenDetails.token; -} - -/** - * Gets a PushSubscription for the current user. - */ -async function getPushSubscription( - swRegistration: ServiceWorkerRegistration, - vapidKey: string -): Promise { - const subscription = await swRegistration.pushManager.getSubscription(); - if (subscription) { - return subscription; - } - return swRegistration.pushManager.subscribe({ - userVisibleOnly: true, - // Chrome <= 75 doesn't support base64-encoded VAPID key. For backward compatibility, VAPID key - // submitted to pushManager#subscribe must be of type Uint8Array. - applicationServerKey: base64ToArray(vapidKey) - }); -} - -/** - * Checks if the saved tokenDetails object matches the configuration provided. - */ -function isTokenValid( - dbOptions: SubscriptionOptions, - currentOptions: SubscriptionOptions -): boolean { - const isVapidKeyEqual = currentOptions.vapidKey === dbOptions.vapidKey; - const isEndpointEqual = currentOptions.endpoint === dbOptions.endpoint; - const isAuthEqual = currentOptions.auth === dbOptions.auth; - const isP256dhEqual = currentOptions.p256dh === dbOptions.p256dh; - - return isVapidKeyEqual && isEndpointEqual && isAuthEqual && isP256dhEqual; -} diff --git a/packages-old/messaging/src/helpers/array-base64-translator.test.ts b/packages-old/messaging/src/helpers/array-base64-translator.test.ts deleted file mode 100644 index c161b365dbc..00000000000 --- a/packages-old/messaging/src/helpers/array-base64-translator.test.ts +++ /dev/null @@ -1,84 +0,0 @@ -/** - * @license - * Copyright 2017 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import '../testing/setup'; - -import { arrayToBase64, base64ToArray } from './array-base64-translator'; - -import { expect } from 'chai'; - -// prettier-ignore -const TEST_P256_ARRAY = new Uint8Array([ - 4, 181, 98, 240, 48, 62, 75, 119, 193, 227, 154, 69, 250, 216, 53, 110, - 157, 120, 62, 76, 213, 249, 11, 62, 12, 19, 149, 36, 5, 82, 140, 37, 141, - 134, 132, 98, 87, 152, 175, 98, 53, 83, 196, 242, 202, 155, 19, 173, 157, - 216, 45, 147, 20, 12, 151, 160, 147, 159, 205, 219, 75, 133, 156, 129, 152 -]); -const TEST_P256_BASE64 = - 'BLVi8DA-S3fB45pF-tg1bp14PkzV-Qs-DBOVJAVSjCWNhoRi' + - 'V5ivYjVTxPLKmxOtndgtkxQMl6CTn83bS4WcgZg'; - -// prettier-ignore -const TEST_AUTH_ARRAY = new Uint8Array([ - 255, 237, 107, 177, 171, 78, 84, 131, 221, 231, 87, 188, 22, 232, 71, 15 -]); -const TEST_AUTH_BASE64 = '_-1rsatOVIPd51e8FuhHDw'; - -// prettier-ignore -const TEST_VAPID_ARRAY = new Uint8Array([4, 48, 191, 217, 11, 218, 74, 124, 103, 143, 63, 182, 203, - 91, 0, 68, 221, 68, 172, 74, 89, 133, 198, 252, 145, 164, 136, 243, 186, 75, 198, 32, 45, 64, 240, - 120, 141, 173, 240, 131, 253, 83, 209, 193, 129, 50, 155, 126, 189, 23, 127, 232, 109, 75, 101, - 229, 92, 85, 137, 80, 121, 35, 229, 118, 207]); -const TEST_VAPID_BASE64 = - 'BDC_2QvaSnxnjz-2y1sARN1ErEpZhcb8kaSI87pLxiAtQPB4ja3wg_1T0cGBMpt' + - '-vRd_6G1LZeVcVYlQeSPlds8'; - -describe('arrayToBase64', () => { - it('array to base64 translation succeed', () => { - expect(arrayToBase64(TEST_P256_ARRAY)).to.equal(TEST_P256_BASE64); - expect(arrayToBase64(TEST_AUTH_ARRAY)).to.equal(TEST_AUTH_BASE64); - expect(arrayToBase64(TEST_VAPID_ARRAY)).to.equal(TEST_VAPID_BASE64); - }); -}); - -describe('base64ToArray', () => { - it('base64 to array translation succeed', () => { - expect(isEqual(base64ToArray(TEST_P256_BASE64), TEST_P256_ARRAY)).to.equal( - true - ); - expect(isEqual(base64ToArray(TEST_AUTH_BASE64), TEST_AUTH_ARRAY)).to.equal( - true - ); - expect( - isEqual(base64ToArray(TEST_VAPID_BASE64), TEST_VAPID_ARRAY) - ).to.equal(true); - }); -}); - -function isEqual(a: Uint8Array, b: Uint8Array): boolean { - if (a.length !== b.length) { - return false; - } - - for (let i = 0; i < a.length; i++) { - if (a[i] !== b[i]) { - return false; - } - } - - return true; -} diff --git a/packages-old/messaging/src/helpers/array-base64-translator.ts b/packages-old/messaging/src/helpers/array-base64-translator.ts deleted file mode 100644 index bbade845ae4..00000000000 --- a/packages-old/messaging/src/helpers/array-base64-translator.ts +++ /dev/null @@ -1,37 +0,0 @@ -/** - * @license - * Copyright 2017 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -export function arrayToBase64(array: Uint8Array | ArrayBuffer): string { - const uint8Array = new Uint8Array(array); - const base64String = btoa(String.fromCharCode(...uint8Array)); - return base64String.replace(/=/g, '').replace(/\+/g, '-').replace(/\//g, '_'); -} - -export function base64ToArray(base64String: string): Uint8Array { - const padding = '='.repeat((4 - (base64String.length % 4)) % 4); - const base64 = (base64String + padding) - .replace(/\-/g, '+') - .replace(/_/g, '/'); - - const rawData = atob(base64); - const outputArray = new Uint8Array(rawData.length); - - for (let i = 0; i < rawData.length; ++i) { - outputArray[i] = rawData.charCodeAt(i); - } - return outputArray; -} diff --git a/packages-old/messaging/src/helpers/externalizePayload.test.ts b/packages-old/messaging/src/helpers/externalizePayload.test.ts deleted file mode 100644 index a209006b85b..00000000000 --- a/packages-old/messaging/src/helpers/externalizePayload.test.ts +++ /dev/null @@ -1,115 +0,0 @@ -/** - * @license - * Copyright 2020 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { MessagePayload } from '@firebase/messaging-types'; -import { MessagePayloadInternal } from '../interfaces/internal-message-payload'; -import { expect } from 'chai'; -import { externalizePayload } from './externalizePayload'; - -describe('externalizePayload', () => { - it('externalizes internalMessage with only notification payload', () => { - const internalPayload: MessagePayloadInternal = { - notification: { - title: 'title', - body: 'body', - image: 'image' - }, - from: 'from', - // eslint-disable-next-line camelcase - collapse_key: 'collapse', - // eslint-disable-next-line camelcase - fcm_message_id: 'mid' - }; - - const expected: MessagePayload = { - notification: { title: 'title', body: 'body', image: 'image' }, - from: 'from', - collapseKey: 'collapse', - messageId: 'mid' - }; - expect(externalizePayload(internalPayload)).to.deep.equal(expected); - }); - - it('externalizes internalMessage with only data payload', () => { - const internalPayload: MessagePayloadInternal = { - data: { - foo: 'foo', - bar: 'bar', - baz: 'baz' - }, - from: 'from', - // eslint-disable-next-line camelcase - collapse_key: 'collapse', - // eslint-disable-next-line camelcase - fcm_message_id: 'mid' - }; - - const expected: MessagePayload = { - data: { foo: 'foo', bar: 'bar', baz: 'baz' }, - from: 'from', - collapseKey: 'collapse', - messageId: 'mid' - }; - expect(externalizePayload(internalPayload)).to.deep.equal(expected); - }); - - it('externalizes internalMessage with all three payloads', () => { - const internalPayload: MessagePayloadInternal = { - notification: { - title: 'title', - body: 'body', - image: 'image' - }, - data: { - foo: 'foo', - bar: 'bar', - baz: 'baz' - }, - fcmOptions: { - link: 'link', - // eslint-disable-next-line camelcase - analytics_label: 'label' - }, - from: 'from', - // eslint-disable-next-line camelcase - collapse_key: 'collapse', - // eslint-disable-next-line camelcase - fcm_message_id: 'mid' - }; - - const expected: MessagePayload = { - notification: { - title: 'title', - body: 'body', - image: 'image' - }, - data: { - foo: 'foo', - bar: 'bar', - baz: 'baz' - }, - fcmOptions: { - link: 'link', - analyticsLabel: 'label' - }, - from: 'from', - collapseKey: 'collapse', - messageId: 'mid' - }; - expect(externalizePayload(internalPayload)).to.deep.equal(expected); - }); -}); diff --git a/packages-old/messaging/src/helpers/externalizePayload.ts b/packages-old/messaging/src/helpers/externalizePayload.ts deleted file mode 100644 index 60f93327e34..00000000000 --- a/packages-old/messaging/src/helpers/externalizePayload.ts +++ /dev/null @@ -1,96 +0,0 @@ -/** - * @license - * Copyright 2020 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { MessagePayload } from '@firebase/messaging-types'; -import { MessagePayloadInternal } from '../interfaces/internal-message-payload'; - -export function externalizePayload( - internalPayload: MessagePayloadInternal -): MessagePayload { - const payload: MessagePayload = { - from: internalPayload.from, - // eslint-disable-next-line camelcase - collapseKey: internalPayload.collapse_key, - // eslint-disable-next-line camelcase - messageId: internalPayload.fcm_message_id - } as MessagePayload; - - propagateNotificationPayload(payload, internalPayload); - propagateDataPayload(payload, internalPayload); - propagateFcmOptions(payload, internalPayload); - - return payload; -} - -function propagateNotificationPayload( - payload: MessagePayload, - messagePayloadInternal: MessagePayloadInternal -): void { - if (!messagePayloadInternal.notification) { - return; - } - - payload.notification = {}; - - const title = messagePayloadInternal.notification!.title; - if (!!title) { - payload.notification!.title = title; - } - - const body = messagePayloadInternal.notification!.body; - if (!!body) { - payload.notification!.body = body; - } - - const image = messagePayloadInternal.notification!.image; - if (!!image) { - payload.notification!.image = image; - } -} - -function propagateDataPayload( - payload: MessagePayload, - messagePayloadInternal: MessagePayloadInternal -): void { - if (!messagePayloadInternal.data) { - return; - } - - payload.data = messagePayloadInternal.data as { [key: string]: string }; -} - -function propagateFcmOptions( - payload: MessagePayload, - messagePayloadInternal: MessagePayloadInternal -): void { - if (!messagePayloadInternal.fcmOptions) { - return; - } - - payload.fcmOptions = {}; - - const link = messagePayloadInternal.fcmOptions!.link; - if (!!link) { - payload.fcmOptions!.link = link; - } - - // eslint-disable-next-line camelcase - const analyticsLabel = messagePayloadInternal.fcmOptions!.analytics_label; - if (!!analyticsLabel) { - payload.fcmOptions!.analyticsLabel = analyticsLabel; - } -} diff --git a/packages-old/messaging/src/helpers/extract-app-config.test.ts b/packages-old/messaging/src/helpers/extract-app-config.test.ts deleted file mode 100644 index 27d27c18aee..00000000000 --- a/packages-old/messaging/src/helpers/extract-app-config.test.ts +++ /dev/null @@ -1,82 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import '../testing/setup'; - -import { AppConfig } from '../interfaces/app-config'; -import { FirebaseApp } from '@firebase/app-types'; -import { expect } from 'chai'; -import { extractAppConfig } from './extract-app-config'; -import { getFakeApp } from '../testing/fakes/firebase-dependencies'; - -describe('extractAppConfig', () => { - it('returns AppConfig if the argument is a FirebaseApp object that includes an appId', () => { - const firebaseApp = getFakeApp(); - const expected: AppConfig = { - appName: 'appName', - apiKey: 'apiKey', - projectId: 'projectId', - appId: '1:777777777777:web:d93b5ca1475efe57', - senderId: '1234567890' - }; - expect(extractAppConfig(firebaseApp)).to.deep.equal(expected); - }); - - it('throws if a necessary value is missing', () => { - expect(() => - extractAppConfig((undefined as unknown) as FirebaseApp) - ).to.throw('Missing App configuration value: "App Configuration Object"'); - - let firebaseApp = getFakeApp(); - // @ts-expect-error - delete firebaseApp.options; - expect(() => extractAppConfig(firebaseApp)).to.throw( - 'Missing App configuration value: "App Configuration Object"' - ); - - firebaseApp = getFakeApp(); - // @ts-expect-error - delete firebaseApp.name; - expect(() => extractAppConfig(firebaseApp)).to.throw( - 'Missing App configuration value: "App Name"' - ); - - firebaseApp = getFakeApp(); - delete firebaseApp.options.projectId; - expect(() => extractAppConfig(firebaseApp)).to.throw( - 'Missing App configuration value: "projectId"' - ); - - firebaseApp = getFakeApp(); - delete firebaseApp.options.apiKey; - expect(() => extractAppConfig(firebaseApp)).to.throw( - 'Missing App configuration value: "apiKey"' - ); - - firebaseApp = getFakeApp(); - delete firebaseApp.options.appId; - expect(() => extractAppConfig(firebaseApp)).to.throw( - 'Missing App configuration value: "appId"' - ); - - firebaseApp = getFakeApp(); - delete firebaseApp.options.messagingSenderId; - expect(() => extractAppConfig(firebaseApp)).to.throw( - 'Missing App configuration value: "messagingSenderId"' - ); - }); -}); diff --git a/packages-old/messaging/src/helpers/extract-app-config.ts b/packages-old/messaging/src/helpers/extract-app-config.ts deleted file mode 100644 index e95a45ced7e..00000000000 --- a/packages-old/messaging/src/helpers/extract-app-config.ts +++ /dev/null @@ -1,61 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { ERROR_FACTORY, ErrorCode } from '../util/errors'; -import { FirebaseApp, FirebaseOptions } from '@firebase/app-types'; - -import { AppConfig } from '../interfaces/app-config'; -import { FirebaseError } from '@firebase/util'; - -export function extractAppConfig(app: FirebaseApp): AppConfig { - if (!app || !app.options) { - throw getMissingValueError('App Configuration Object'); - } - - if (!app.name) { - throw getMissingValueError('App Name'); - } - - // Required app config keys - const configKeys: ReadonlyArray = [ - 'projectId', - 'apiKey', - 'appId', - 'messagingSenderId' - ]; - - const { options } = app; - for (const keyName of configKeys) { - if (!options[keyName]) { - throw getMissingValueError(keyName); - } - } - - return { - appName: app.name, - projectId: options.projectId!, - apiKey: options.apiKey!, - appId: options.appId!, - senderId: options.messagingSenderId! - }; -} - -function getMissingValueError(valueName: string): FirebaseError { - return ERROR_FACTORY.create(ErrorCode.MISSING_APP_CONFIG_VALUES, { - valueName - }); -} diff --git a/packages-old/messaging/src/helpers/idb-manager.test.ts b/packages-old/messaging/src/helpers/idb-manager.test.ts deleted file mode 100644 index b98ad933378..00000000000 --- a/packages-old/messaging/src/helpers/idb-manager.test.ts +++ /dev/null @@ -1,124 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import '../testing/setup'; - -import * as migrateOldDatabaseModule from './migrate-old-database'; - -import { dbGet, dbRemove, dbSet } from './idb-manager'; - -import { FirebaseInternalDependencies } from '../interfaces/internal-dependencies'; -import { Stub } from '../testing/sinon-types'; -import { TokenDetails } from '../interfaces/token-details'; -import { expect } from 'chai'; -import { getFakeFirebaseDependencies } from '../testing/fakes/firebase-dependencies'; -import { getFakeTokenDetails } from '../testing/fakes/token-details'; -import { stub } from 'sinon'; - -describe('idb manager', () => { - let firebaseDependencies: FirebaseInternalDependencies; - let tokenDetailsA: TokenDetails; - let tokenDetailsB: TokenDetails; - - beforeEach(() => { - firebaseDependencies = getFakeFirebaseDependencies(); - tokenDetailsA = getFakeTokenDetails(); - tokenDetailsB = getFakeTokenDetails(); - tokenDetailsA.token = 'TOKEN_A'; - tokenDetailsB.token = 'TOKEN_B'; - }); - - describe('get / set', () => { - it('sets a value and then gets the same value back', async () => { - await dbSet(firebaseDependencies, tokenDetailsA); - const value = await dbGet(firebaseDependencies); - expect(value).to.deep.equal(tokenDetailsA); - }); - - it('gets undefined for a key that does not exist', async () => { - const value = await dbGet(firebaseDependencies); - expect(value).to.be.undefined; - }); - - it('sets and gets multiple values with different keys', async () => { - const firebaseDependenciesB = getFakeFirebaseDependencies({ - appId: 'different-app-id' - }); - await dbSet(firebaseDependencies, tokenDetailsA); - await dbSet(firebaseDependenciesB, tokenDetailsB); - expect(await dbGet(firebaseDependencies)).to.deep.equal(tokenDetailsA); - expect(await dbGet(firebaseDependenciesB)).to.deep.equal(tokenDetailsB); - }); - - it('overwrites a value', async () => { - await dbSet(firebaseDependencies, tokenDetailsA); - await dbSet(firebaseDependencies, tokenDetailsB); - expect(await dbGet(firebaseDependencies)).to.deep.equal(tokenDetailsB); - }); - - describe('old DB migration', () => { - let migrateOldDatabaseStub: Stub< - typeof migrateOldDatabaseModule['migrateOldDatabase'] - >; - - beforeEach(() => { - migrateOldDatabaseStub = stub( - migrateOldDatabaseModule, - 'migrateOldDatabase' - ).resolves(tokenDetailsA); - }); - - it('gets value from old DB if there is one', async () => { - await dbGet(firebaseDependencies); - - expect(migrateOldDatabaseStub).to.have.been.calledOnceWith( - firebaseDependencies.appConfig.senderId - ); - }); - - it('does not call migrateOldDatabase a second time', async () => { - await dbGet(firebaseDependencies); - await dbGet(firebaseDependencies); - - expect(migrateOldDatabaseStub).to.have.been.calledOnceWith( - firebaseDependencies.appConfig.senderId - ); - }); - - it('does not call migrateOldDatabase if there is already a value in the DB', async () => { - await dbSet(firebaseDependencies, tokenDetailsA); - - await dbGet(firebaseDependencies); - - expect(migrateOldDatabaseStub).not.to.have.been.called; - }); - }); - }); - - describe('remove', () => { - it('deletes a key', async () => { - await dbSet(firebaseDependencies, tokenDetailsA); - await dbRemove(firebaseDependencies); - expect(await dbGet(firebaseDependencies)).to.be.undefined; - }); - - it('does not throw if key does not exist', async () => { - await dbRemove(firebaseDependencies); - expect(await dbGet(firebaseDependencies)).to.be.undefined; - }); - }); -}); diff --git a/packages-old/messaging/src/helpers/idb-manager.ts b/packages-old/messaging/src/helpers/idb-manager.ts deleted file mode 100644 index dbe957de244..00000000000 --- a/packages-old/messaging/src/helpers/idb-manager.ts +++ /dev/null @@ -1,106 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { DB, deleteDb, openDb } from 'idb'; - -import { FirebaseInternalDependencies } from '../interfaces/internal-dependencies'; -import { TokenDetails } from '../interfaces/token-details'; -import { migrateOldDatabase } from './migrate-old-database'; - -// Exported for tests. -export const DATABASE_NAME = 'firebase-messaging-database'; -const DATABASE_VERSION = 1; -const OBJECT_STORE_NAME = 'firebase-messaging-store'; - -let dbPromise: Promise | null = null; -function getDbPromise(): Promise { - if (!dbPromise) { - dbPromise = openDb(DATABASE_NAME, DATABASE_VERSION, upgradeDb => { - // We don't use 'break' in this switch statement, the fall-through behavior is what we want, - // because if there are multiple versions between the old version and the current version, we - // want ALL the migrations that correspond to those versions to run, not only the last one. - // eslint-disable-next-line default-case - switch (upgradeDb.oldVersion) { - case 0: - upgradeDb.createObjectStore(OBJECT_STORE_NAME); - } - }); - } - return dbPromise; -} - -/** Gets record(s) from the objectStore that match the given key. */ -export async function dbGet( - firebaseDependencies: FirebaseInternalDependencies -): Promise { - const key = getKey(firebaseDependencies); - const db = await getDbPromise(); - const tokenDetails = await db - .transaction(OBJECT_STORE_NAME) - .objectStore(OBJECT_STORE_NAME) - .get(key); - - if (tokenDetails) { - return tokenDetails; - } else { - // Check if there is a tokenDetails object in the old DB. - const oldTokenDetails = await migrateOldDatabase( - firebaseDependencies.appConfig.senderId - ); - if (oldTokenDetails) { - await dbSet(firebaseDependencies, oldTokenDetails); - return oldTokenDetails; - } - } -} - -/** Assigns or overwrites the record for the given key with the given value. */ -export async function dbSet( - firebaseDependencies: FirebaseInternalDependencies, - tokenDetails: TokenDetails -): Promise { - const key = getKey(firebaseDependencies); - const db = await getDbPromise(); - const tx = db.transaction(OBJECT_STORE_NAME, 'readwrite'); - await tx.objectStore(OBJECT_STORE_NAME).put(tokenDetails, key); - await tx.complete; - return tokenDetails; -} - -/** Removes record(s) from the objectStore that match the given key. */ -export async function dbRemove( - firebaseDependencies: FirebaseInternalDependencies -): Promise { - const key = getKey(firebaseDependencies); - const db = await getDbPromise(); - const tx = db.transaction(OBJECT_STORE_NAME, 'readwrite'); - await tx.objectStore(OBJECT_STORE_NAME).delete(key); - await tx.complete; -} - -/** Deletes the DB. Useful for tests. */ -export async function dbDelete(): Promise { - if (dbPromise) { - (await dbPromise).close(); - await deleteDb(DATABASE_NAME); - dbPromise = null; - } -} - -function getKey({ appConfig }: FirebaseInternalDependencies): string { - return appConfig.appId; -} diff --git a/packages-old/messaging/src/helpers/is-console-message.ts b/packages-old/messaging/src/helpers/is-console-message.ts deleted file mode 100644 index 151713be132..00000000000 --- a/packages-old/messaging/src/helpers/is-console-message.ts +++ /dev/null @@ -1,24 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { CONSOLE_CAMPAIGN_ID } from '../util/constants'; -import { ConsoleMessageData } from '../interfaces/internal-message-payload'; - -export function isConsoleMessage(data: unknown): data is ConsoleMessageData { - // This message has a campaign ID, meaning it was sent using the Firebase Console. - return typeof data === 'object' && !!data && CONSOLE_CAMPAIGN_ID in data; -} diff --git a/packages-old/messaging/src/helpers/migrate-old-database.test.ts b/packages-old/messaging/src/helpers/migrate-old-database.test.ts deleted file mode 100644 index 020295ca2fd..00000000000 --- a/packages-old/messaging/src/helpers/migrate-old-database.test.ts +++ /dev/null @@ -1,204 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import '../testing/setup'; - -import { - V2TokenDetails, - V3TokenDetails, - V4TokenDetails, - migrateOldDatabase -} from './migrate-old-database'; - -import { FakePushSubscription } from '../testing/fakes/service-worker'; -import { base64ToArray } from './array-base64-translator'; -import { expect } from 'chai'; -import { getFakeTokenDetails } from '../testing/fakes/token-details'; -import { openDb } from 'idb'; - -describe('migrateOldDb', () => { - it("does nothing if old DB didn't exist", async () => { - const tokenDetails = await migrateOldDatabase('1234567890'); - expect(tokenDetails).to.be.null; - }); - - it('does nothing if old DB was too old', async () => { - await put(1, { - swScope: '/scope-value', - fcmSenderId: '1234567890', - fcmToken: 'token-value' - }); - - const tokenDetails = await migrateOldDatabase('1234567890'); - expect(tokenDetails).to.be.null; - }); - - describe('version 2', () => { - beforeEach(async () => { - const v2TokenDetails: V2TokenDetails = { - fcmToken: 'token-value', - swScope: '/scope-value', - vapidKey: base64ToArray('dmFwaWQta2V5LXZhbHVl'), - fcmSenderId: '1234567890', - fcmPushSet: '7654321', - auth: 'YXV0aC12YWx1ZQ', - p256dh: 'cDI1Ni12YWx1ZQ', - endpoint: 'https://example.org', - subscription: new FakePushSubscription() - }; - - await put(2, v2TokenDetails); - }); - - it('can get a value from old DB', async () => { - const tokenDetails = await migrateOldDatabase('1234567890'); - - const expectedTokenDetails = getFakeTokenDetails(); - // Ignore createTime difference. - expectedTokenDetails.createTime = tokenDetails!.createTime; - - expect(tokenDetails).to.deep.equal(expectedTokenDetails); - }); - - it('only migrates once', async () => { - await migrateOldDatabase('1234567890'); - const tokenDetails = await migrateOldDatabase('1234567890'); - - expect(tokenDetails).to.be.null; - }); - - it('does not get a value that has a different sender ID', async () => { - const tokenDetails = await migrateOldDatabase('321321321'); - expect(tokenDetails).to.be.null; - }); - - it('does not migrate an entry with missing optional values', async () => { - const v2TokenDetails: V2TokenDetails = { - fcmToken: 'token-value', - swScope: '/scope-value', - vapidKey: base64ToArray('dmFwaWQta2V5LXZhbHVl'), - fcmSenderId: '1234567890', - fcmPushSet: '7654321', - subscription: new FakePushSubscription() - }; - await put(2, v2TokenDetails); - - const tokenDetails = await migrateOldDatabase('1234567890'); - expect(tokenDetails).to.be.null; - }); - }); - - describe('version 3', () => { - beforeEach(async () => { - const v3TokenDetails: V3TokenDetails = { - createTime: 1234567890, - fcmToken: 'token-value', - swScope: '/scope-value', - vapidKey: base64ToArray('dmFwaWQta2V5LXZhbHVl'), - fcmSenderId: '1234567890', - fcmPushSet: '7654321', - auth: base64ToArray('YXV0aC12YWx1ZQ'), - p256dh: base64ToArray('cDI1Ni12YWx1ZQ'), - endpoint: 'https://example.org' - }; - - await put(3, v3TokenDetails); - }); - - it('can get a value from old DB', async () => { - const tokenDetails = await migrateOldDatabase('1234567890'); - - const expectedTokenDetails = getFakeTokenDetails(); - - expect(tokenDetails).to.deep.equal(expectedTokenDetails); - }); - - it('only migrates once', async () => { - await migrateOldDatabase('1234567890'); - const tokenDetails = await migrateOldDatabase('1234567890'); - - expect(tokenDetails).to.be.null; - }); - - it('does not get a value that has a different sender ID', async () => { - const tokenDetails = await migrateOldDatabase('321321321'); - expect(tokenDetails).to.be.null; - }); - }); - - describe('version 4', () => { - beforeEach(async () => { - const v4TokenDetails: V4TokenDetails = { - createTime: 1234567890, - fcmToken: 'token-value', - swScope: '/scope-value', - vapidKey: base64ToArray('dmFwaWQta2V5LXZhbHVl'), - fcmSenderId: '1234567890', - auth: base64ToArray('YXV0aC12YWx1ZQ'), - p256dh: base64ToArray('cDI1Ni12YWx1ZQ'), - endpoint: 'https://example.org' - }; - - await put(4, v4TokenDetails); - }); - - it('can get a value from old DB', async () => { - const tokenDetails = await migrateOldDatabase('1234567890'); - - const expectedTokenDetails = getFakeTokenDetails(); - - expect(tokenDetails).to.deep.equal(expectedTokenDetails); - }); - - it('only migrates once', async () => { - await migrateOldDatabase('1234567890'); - const tokenDetails = await migrateOldDatabase('1234567890'); - - expect(tokenDetails).to.be.null; - }); - - it('does not get a value that has a different sender ID', async () => { - const tokenDetails = await migrateOldDatabase('321321321'); - expect(tokenDetails).to.be.null; - }); - }); -}); - -async function put(version: number, value: object): Promise { - const db = await openDb('fcm_token_details_db', version, upgradeDb => { - if (upgradeDb.oldVersion === 0) { - const objectStore = upgradeDb.createObjectStore( - 'fcm_token_object_Store', - { - keyPath: 'swScope' - } - ); - objectStore.createIndex('fcmSenderId', 'fcmSenderId', { - unique: false - }); - objectStore.createIndex('fcmToken', 'fcmToken', { unique: true }); - } - }); - - try { - const tx = db.transaction('fcm_token_object_Store', 'readwrite'); - await tx.objectStore('fcm_token_object_Store').put(value); - await tx.complete; - } finally { - db.close(); - } -} diff --git a/packages-old/messaging/src/helpers/migrate-old-database.ts b/packages-old/messaging/src/helpers/migrate-old-database.ts deleted file mode 100644 index 40fdece6171..00000000000 --- a/packages-old/messaging/src/helpers/migrate-old-database.ts +++ /dev/null @@ -1,193 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { deleteDb, openDb } from 'idb'; - -import { TokenDetails } from '../interfaces/token-details'; -import { arrayToBase64 } from './array-base64-translator'; - -// https://github.com/firebase/firebase-js-sdk/blob/7857c212f944a2a9eb421fd4cb7370181bc034b5/packages/messaging/src/interfaces/token-details.ts -export interface V2TokenDetails { - fcmToken: string; - swScope: string; - vapidKey: string | Uint8Array; - subscription: PushSubscription; - fcmSenderId: string; - fcmPushSet: string; - createTime?: number; - endpoint?: string; - auth?: string; - p256dh?: string; -} - -// https://github.com/firebase/firebase-js-sdk/blob/6b5b15ce4ea3df5df5df8a8b33a4e41e249c7715/packages/messaging/src/interfaces/token-details.ts -export interface V3TokenDetails { - fcmToken: string; - swScope: string; - vapidKey: Uint8Array; - fcmSenderId: string; - fcmPushSet: string; - endpoint: string; - auth: ArrayBuffer; - p256dh: ArrayBuffer; - createTime: number; -} - -// https://github.com/firebase/firebase-js-sdk/blob/9567dba664732f681fa7fe60f5b7032bb1daf4c9/packages/messaging/src/interfaces/token-details.ts -export interface V4TokenDetails { - fcmToken: string; - swScope: string; - vapidKey: Uint8Array; - fcmSenderId: string; - endpoint: string; - auth: ArrayBufferLike; - p256dh: ArrayBufferLike; - createTime: number; -} - -const OLD_DB_NAME = 'fcm_token_details_db'; -/** - * The last DB version of 'fcm_token_details_db' was 4. This is one higher, so that the upgrade - * callback is called for all versions of the old DB. - */ -const OLD_DB_VERSION = 5; -const OLD_OBJECT_STORE_NAME = 'fcm_token_object_Store'; - -export async function migrateOldDatabase( - senderId: string -): Promise { - if ('databases' in indexedDB) { - // indexedDb.databases() is an IndexedDB v3 API and does not exist in all browsers. TODO: Remove - // typecast when it lands in TS types. - const databases = await (indexedDB as { - databases(): Promise>; - }).databases(); - const dbNames = databases.map(db => db.name); - - if (!dbNames.includes(OLD_DB_NAME)) { - // old DB didn't exist, no need to open. - return null; - } - } - - let tokenDetails: TokenDetails | null = null; - - const db = await openDb(OLD_DB_NAME, OLD_DB_VERSION, async db => { - if (db.oldVersion < 2) { - // Database too old, skip migration. - return; - } - - if (!db.objectStoreNames.contains(OLD_OBJECT_STORE_NAME)) { - // Database did not exist. Nothing to do. - return; - } - - const objectStore = db.transaction.objectStore(OLD_OBJECT_STORE_NAME); - const value = await objectStore.index('fcmSenderId').get(senderId); - await objectStore.clear(); - - if (!value) { - // No entry in the database, nothing to migrate. - return; - } - - if (db.oldVersion === 2) { - const oldDetails = value as V2TokenDetails; - - if (!oldDetails.auth || !oldDetails.p256dh || !oldDetails.endpoint) { - return; - } - - tokenDetails = { - token: oldDetails.fcmToken, - createTime: oldDetails.createTime ?? Date.now(), - subscriptionOptions: { - auth: oldDetails.auth, - p256dh: oldDetails.p256dh, - endpoint: oldDetails.endpoint, - swScope: oldDetails.swScope, - vapidKey: - typeof oldDetails.vapidKey === 'string' - ? oldDetails.vapidKey - : arrayToBase64(oldDetails.vapidKey) - } - }; - } else if (db.oldVersion === 3) { - const oldDetails = value as V3TokenDetails; - - tokenDetails = { - token: oldDetails.fcmToken, - createTime: oldDetails.createTime, - subscriptionOptions: { - auth: arrayToBase64(oldDetails.auth), - p256dh: arrayToBase64(oldDetails.p256dh), - endpoint: oldDetails.endpoint, - swScope: oldDetails.swScope, - vapidKey: arrayToBase64(oldDetails.vapidKey) - } - }; - } else if (db.oldVersion === 4) { - const oldDetails = value as V4TokenDetails; - - tokenDetails = { - token: oldDetails.fcmToken, - createTime: oldDetails.createTime, - subscriptionOptions: { - auth: arrayToBase64(oldDetails.auth), - p256dh: arrayToBase64(oldDetails.p256dh), - endpoint: oldDetails.endpoint, - swScope: oldDetails.swScope, - vapidKey: arrayToBase64(oldDetails.vapidKey) - } - }; - } - }); - db.close(); - - // Delete all old databases. - await deleteDb(OLD_DB_NAME); - await deleteDb('fcm_vapid_details_db'); - await deleteDb('undefined'); - - return checkTokenDetails(tokenDetails) ? tokenDetails : null; -} - -function checkTokenDetails( - tokenDetails: TokenDetails | null -): tokenDetails is TokenDetails { - if (!tokenDetails || !tokenDetails.subscriptionOptions) { - return false; - } - const { subscriptionOptions } = tokenDetails; - return ( - typeof tokenDetails.createTime === 'number' && - tokenDetails.createTime > 0 && - typeof tokenDetails.token === 'string' && - tokenDetails.token.length > 0 && - typeof subscriptionOptions.auth === 'string' && - subscriptionOptions.auth.length > 0 && - typeof subscriptionOptions.p256dh === 'string' && - subscriptionOptions.p256dh.length > 0 && - typeof subscriptionOptions.endpoint === 'string' && - subscriptionOptions.endpoint.length > 0 && - typeof subscriptionOptions.swScope === 'string' && - subscriptionOptions.swScope.length > 0 && - typeof subscriptionOptions.vapidKey === 'string' && - subscriptionOptions.vapidKey.length > 0 - ); -} diff --git a/packages-old/messaging/src/helpers/sleep.test.ts b/packages-old/messaging/src/helpers/sleep.test.ts deleted file mode 100644 index b7c4e228f10..00000000000 --- a/packages-old/messaging/src/helpers/sleep.test.ts +++ /dev/null @@ -1,39 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import '../testing/setup'; - -import { SinonFakeTimers, useFakeTimers } from 'sinon'; - -import { expect } from 'chai'; -import { sleep } from './sleep'; - -describe('sleep', () => { - let clock: SinonFakeTimers; - - beforeEach(() => { - clock = useFakeTimers({ shouldAdvanceTime: true }); - }); - - it('returns a promise that resolves after a given amount of time', async () => { - const t0 = clock.now; - await sleep(100); - const t1 = clock.now; - - expect(t1 - t0).to.equal(100); - }); -}); diff --git a/packages-old/messaging/src/helpers/sleep.ts b/packages-old/messaging/src/helpers/sleep.ts deleted file mode 100644 index 2bd1eb9283b..00000000000 --- a/packages-old/messaging/src/helpers/sleep.ts +++ /dev/null @@ -1,23 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** Returns a promise that resolves after given time passes. */ -export function sleep(ms: number): Promise { - return new Promise(resolve => { - setTimeout(resolve, ms); - }); -} diff --git a/packages-old/messaging/src/index.ts b/packages-old/messaging/src/index.ts deleted file mode 100644 index 4b0ba76a7c5..00000000000 --- a/packages-old/messaging/src/index.ts +++ /dev/null @@ -1,134 +0,0 @@ -/** - * @license - * Copyright 2017 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import '@firebase/installations'; - -import { - Component, - ComponentContainer, - ComponentType -} from '@firebase/component'; -import { ERROR_FACTORY, ErrorCode } from './util/errors'; -import { - FirebaseService, - _FirebaseNamespace -} from '@firebase/app-types/private'; - -import { FirebaseInternalDependencies } from './interfaces/internal-dependencies'; -import { FirebaseMessaging } from '@firebase/messaging-types'; -import { SwController } from './controllers/sw-controller'; -import { WindowController } from './controllers/window-controller'; -import { extractAppConfig } from './helpers/extract-app-config'; -import firebase from '@firebase/app'; - -const MESSAGING_NAME = 'messaging'; -function factoryMethod( - container: ComponentContainer -): FirebaseService & FirebaseMessaging { - // Dependencies. - const app = container.getProvider('app').getImmediate(); - const appConfig = extractAppConfig(app); - const installations = container.getProvider('installations').getImmediate(); - const analyticsProvider = container.getProvider('analytics-internal'); - - const firebaseDependencies: FirebaseInternalDependencies = { - app, - appConfig, - installations, - analyticsProvider - }; - - if (!isSupported()) { - throw ERROR_FACTORY.create(ErrorCode.UNSUPPORTED_BROWSER); - } - - if (self && 'ServiceWorkerGlobalScope' in self) { - // Running in ServiceWorker context - return new SwController(firebaseDependencies); - } else { - // Assume we are in the window context. - return new WindowController(firebaseDependencies); - } -} - -const NAMESPACE_EXPORTS = { - isSupported -}; - -(firebase as _FirebaseNamespace).INTERNAL.registerComponent( - new Component( - MESSAGING_NAME, - factoryMethod, - ComponentType.PUBLIC - ).setServiceProps(NAMESPACE_EXPORTS) -); - -/** - * Define extension behavior of `registerMessaging` - */ -declare module '@firebase/app-types' { - interface FirebaseNamespace { - messaging: { - (app?: FirebaseApp): FirebaseMessaging; - isSupported(): boolean; - }; - } - interface FirebaseApp { - messaging(): FirebaseMessaging; - } -} - -function isSupported(): boolean { - if (self && 'ServiceWorkerGlobalScope' in self) { - // Running in ServiceWorker context - return isSWControllerSupported(); - } else { - // Assume we are in the window context. - return isWindowControllerSupported(); - } -} - -/** - * Checks to see if the required APIs exist. - */ -function isWindowControllerSupported(): boolean { - return ( - 'indexedDB' in window && - indexedDB !== null && - navigator.cookieEnabled && - 'serviceWorker' in navigator && - 'PushManager' in window && - 'Notification' in window && - 'fetch' in window && - ServiceWorkerRegistration.prototype.hasOwnProperty('showNotification') && - PushSubscription.prototype.hasOwnProperty('getKey') - ); -} - -/** - * Checks to see if the required APIs exist within SW Context. - */ -function isSWControllerSupported(): boolean { - return ( - 'indexedDB' in self && - indexedDB !== null && - 'PushManager' in self && - 'Notification' in self && - ServiceWorkerRegistration.prototype.hasOwnProperty('showNotification') && - PushSubscription.prototype.hasOwnProperty('getKey') - ); -} diff --git a/packages-old/messaging/src/interfaces/app-config.ts b/packages-old/messaging/src/interfaces/app-config.ts deleted file mode 100644 index 4a887eeb3cc..00000000000 --- a/packages-old/messaging/src/interfaces/app-config.ts +++ /dev/null @@ -1,25 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -export interface AppConfig { - readonly appName: string; - readonly projectId: string; - readonly apiKey: string; - readonly appId: string; - /** Only used for old DB migration. */ - readonly senderId: string; -} diff --git a/packages-old/messaging/src/interfaces/internal-dependencies.ts b/packages-old/messaging/src/interfaces/internal-dependencies.ts deleted file mode 100644 index ecc380f2089..00000000000 --- a/packages-old/messaging/src/interfaces/internal-dependencies.ts +++ /dev/null @@ -1,29 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { AppConfig } from './app-config'; -import { FirebaseAnalyticsInternalName } from '@firebase/analytics-interop-types'; -import { FirebaseApp } from '@firebase/app-types'; -import { FirebaseInstallations } from '@firebase/installations-types'; -import { Provider } from '@firebase/component'; - -export interface FirebaseInternalDependencies { - app: FirebaseApp; - appConfig: AppConfig; - installations: FirebaseInstallations; - analyticsProvider: Provider; -} diff --git a/packages-old/messaging/src/interfaces/internal-message-payload.ts b/packages-old/messaging/src/interfaces/internal-message-payload.ts deleted file mode 100644 index 940982a912c..00000000000 --- a/packages-old/messaging/src/interfaces/internal-message-payload.ts +++ /dev/null @@ -1,66 +0,0 @@ -/** - * @license - * Copyright 2018 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software distributed under the License - * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express - * or implied. See the License for the specific language governing permissions and limitations under - * the License. - */ - -import { - CONSOLE_CAMPAIGN_ANALYTICS_ENABLED, - CONSOLE_CAMPAIGN_ID, - CONSOLE_CAMPAIGN_NAME, - CONSOLE_CAMPAIGN_TIME -} from '../util/constants'; - -export interface MessagePayloadInternal { - notification?: NotificationPayloadInternal; - data?: unknown; - fcmOptions?: FcmOptionsInternal; - messageType?: MessageType; - isFirebaseMessaging?: boolean; - from: string; - // eslint-disable-next-line camelcase - collapse_key: string; - // eslint-disable-next-line camelcase - fcm_message_id: string; -} - -export interface NotificationPayloadInternal extends NotificationOptions { - title: string; - // Supported in the Legacy Send API. - // See:https://firebase.google.com/docs/cloud-messaging/xmpp-server-ref. - // eslint-disable-next-line camelcase - click_action?: string; -} - -// Defined in -// https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages#webpushfcmoptions. Note -// that the keys are sent to the clients in snake cases which we need to convert to camel so it can -// be exposed as a type to match the Firebase API convention. -export interface FcmOptionsInternal { - link?: string; - - // eslint-disable-next-line camelcase - analytics_label?: string; -} - -export enum MessageType { - PUSH_RECEIVED = 'push-received', - NOTIFICATION_CLICKED = 'notification-clicked' -} - -/** Additional data of a message sent from the FN Console. */ -export interface ConsoleMessageData { - [CONSOLE_CAMPAIGN_ID]: string; - [CONSOLE_CAMPAIGN_TIME]: string; - [CONSOLE_CAMPAIGN_NAME]?: string; - [CONSOLE_CAMPAIGN_ANALYTICS_ENABLED]?: '1'; -} diff --git a/packages-old/messaging/src/interfaces/token-details.ts b/packages-old/messaging/src/interfaces/token-details.ts deleted file mode 100644 index 791c94d267b..00000000000 --- a/packages-old/messaging/src/interfaces/token-details.ts +++ /dev/null @@ -1,34 +0,0 @@ -/** - * @license - * Copyright 2018 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -export interface TokenDetails { - token: string; - createTime: number; - /** Does not exist in Safari since it's not using Push API. */ - subscriptionOptions?: SubscriptionOptions; -} - -/** - * Additional options and values required by a Push API subscription. - */ -export interface SubscriptionOptions { - vapidKey: string; - swScope: string; - endpoint: string; - auth: string; - p256dh: string; -} diff --git a/packages-old/messaging/src/testing/compare-headers.test.ts b/packages-old/messaging/src/testing/compare-headers.test.ts deleted file mode 100644 index 21fe9551874..00000000000 --- a/packages-old/messaging/src/testing/compare-headers.test.ts +++ /dev/null @@ -1,46 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import '../testing/setup'; - -import { AssertionError, expect } from 'chai'; - -import { compareHeaders } from './compare-headers'; - -describe('compareHeaders', () => { - it("doesn't fail if headers contain the same entries", () => { - const headers1 = new Headers({ a: '123', b: '456' }); - const headers2 = new Headers({ a: '123', b: '456' }); - compareHeaders(headers1, headers2); - }); - - it('fails if headers contain different keys', () => { - const headers1 = new Headers({ a: '123', b: '456', extraKey: '789' }); - const headers2 = new Headers({ a: '123', b: '456' }); - expect(() => { - compareHeaders(headers1, headers2); - }).to.throw(AssertionError); - }); - - it('fails if headers contain different values', () => { - const headers1 = new Headers({ a: '123', b: '456' }); - const headers2 = new Headers({ a: '123', b: 'differentValue' }); - expect(() => { - compareHeaders(headers1, headers2); - }).to.throw(AssertionError); - }); -}); diff --git a/packages-old/messaging/src/testing/compare-headers.ts b/packages-old/messaging/src/testing/compare-headers.ts deleted file mode 100644 index 98bb73259df..00000000000 --- a/packages-old/messaging/src/testing/compare-headers.ts +++ /dev/null @@ -1,40 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import '../testing/setup'; - -import { expect } from 'chai'; - -// Trick TS since it's set to target ES5. -declare class HeadersWithEntries extends Headers { - entries?(): Iterable<[string, string]>; -} - -// Chai doesn't check if Headers objects contain the same entries, so we need to do that manually. -export function compareHeaders( - expectedHeaders: HeadersWithEntries, - actualHeaders: HeadersWithEntries -): void { - const expected = makeMap(expectedHeaders); - const actual = makeMap(actualHeaders); - expect(actual).to.deep.equal(expected); -} - -function makeMap(headers: HeadersWithEntries): Map { - expect(headers.entries).not.to.be.undefined; - return new Map(headers.entries!()); -} diff --git a/packages-old/messaging/src/testing/fakes/firebase-dependencies.ts b/packages-old/messaging/src/testing/fakes/firebase-dependencies.ts deleted file mode 100644 index 58b0a6812c1..00000000000 --- a/packages-old/messaging/src/testing/fakes/firebase-dependencies.ts +++ /dev/null @@ -1,80 +0,0 @@ -/** - * @license - * Copyright 2017 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { - FirebaseAnalyticsInternal, - FirebaseAnalyticsInternalName -} from '@firebase/analytics-interop-types'; -import { FirebaseApp, FirebaseOptions } from '@firebase/app-types'; - -import { FirebaseInstallations } from '@firebase/installations-types'; -import { FirebaseInternalDependencies } from '../../interfaces/internal-dependencies'; -import { Provider } from '@firebase/component'; -import { extractAppConfig } from '../../helpers/extract-app-config'; - -export function getFakeFirebaseDependencies( - options: FirebaseOptions = {} -): FirebaseInternalDependencies { - const app = getFakeApp(options); - return { - app, - appConfig: extractAppConfig(app), - installations: getFakeInstallations(), - analyticsProvider: getFakeAnalyticsProvider() - }; -} - -export function getFakeApp(options: FirebaseOptions = {}): FirebaseApp { - options = { - apiKey: 'apiKey', - projectId: 'projectId', - authDomain: 'authDomain', - messagingSenderId: '1234567890', - databaseURL: 'databaseUrl', - storageBucket: 'storageBucket', - appId: '1:777777777777:web:d93b5ca1475efe57', - ...options - }; - return { - name: 'appName', - options, - automaticDataCollectionEnabled: true, - delete: async () => {}, - messaging: (() => null as unknown) as FirebaseApp['messaging'], - installations: () => getFakeInstallations() - }; -} - -function getFakeInstallations(): FirebaseInstallations { - return { - getId: async () => 'FID', - getToken: async () => 'authToken', - delete: async () => undefined, - onIdChange: () => () => {} - }; -} - -function getFakeAnalyticsProvider(): Provider { - const analytics: FirebaseAnalyticsInternal = { - logEvent() {} - }; - - return ({ - get: async () => analytics, - getImmediate: () => analytics - } as unknown) as Provider; -} diff --git a/packages-old/messaging/src/testing/fakes/service-worker.ts b/packages-old/messaging/src/testing/fakes/service-worker.ts deleted file mode 100644 index 0e3f27c4da5..00000000000 --- a/packages-old/messaging/src/testing/fakes/service-worker.ts +++ /dev/null @@ -1,212 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { Writable } from 'ts-essentials'; - -// Add fake SW types. -declare const self: Window & Writable; - -// When trying to stub self.clients self.registration, Sinon complains that these properties do not -// exist. This is because we're not actually running these tests in a service worker context. - -// Here we're adding placeholders for Sinon to overwrite, which prevents the "Cannot stub -// non-existent own property" errors. - -// Casting to any is needed because TS also thinks that we're in a SW context and considers these -// properties readonly. - -// Missing function types are implemented from interfaces, so types are actually defined. -/* eslint-disable @typescript-eslint/explicit-function-return-type */ - -// const originalSwRegistration = ServiceWorkerRegistration; -export function mockServiceWorker(): void { - self.clients = new FakeClients(); - self.registration = new FakeServiceWorkerRegistration(); -} - -export function restoreServiceWorker(): void { - delete self.clients; - delete self.registration; -} - -class FakeClients implements Clients { - private readonly clients: Client[] = []; - - async get(id: string) { - return this.clients.find(c => id === c.id) ?? null; - } - - async matchAll({ type = 'all' } = {}) { - if (type === 'all') { - return this.clients; - } - return this.clients.filter(c => c.type === type); - } - - async openWindow(url: string) { - const windowClient = new FakeWindowClient(); - windowClient.url = url; - this.clients.push(windowClient); - return windowClient; - } - - async claim() {} -} - -let currentId = 0; -class FakeWindowClient implements WindowClient { - readonly id: string; - readonly type = 'window'; - focused = false; - visibilityState: VisibilityState = 'hidden'; - url = 'https://example.org'; - - constructor() { - this.id = (currentId++).toString(); - } - - async focus() { - this.focused = true; - return this; - } - - async navigate(url: string) { - this.url = url; - return this; - } - - postMessage() {} -} - -export class FakeServiceWorkerRegistration - implements ServiceWorkerRegistration -{ - active = null; - installing = null; - waiting = null; - onupdatefound = null; - pushManager = new FakePushManager(); - scope = '/scope-value'; - - // Unused in FCM Web SDK, no need to mock these. - navigationPreload = null as unknown as NavigationPreloadManager; - sync = null as unknown as SyncManager; - updateViaCache = null as unknown as ServiceWorkerUpdateViaCache; - - async getNotifications() { - return []; - } - - async showNotification() {} - - async update() {} - - async unregister() { - return true; - } - - addEventListener() {} - removeEventListener() {} - dispatchEvent() { - return true; - } -} - -class FakePushManager implements PushManager { - private subscription: FakePushSubscription | null = null; - - async permissionState() { - return 'granted' as const; - } - - async getSubscription() { - return this.subscription; - } - - async subscribe() { - if (!this.subscription) { - this.subscription = new FakePushSubscription(); - } - return this.subscription!; - } -} - -export class FakePushSubscription implements PushSubscription { - endpoint = 'https://example.org'; - expirationTime = 1234567890; - auth = 'auth-value'; // Encoded: 'YXV0aC12YWx1ZQ' - p256 = 'p256-value'; // Encoded: 'cDI1Ni12YWx1ZQ' - - getKey(name: PushEncryptionKeyName) { - const encoder = new TextEncoder(); - return encoder.encode(name === 'auth' ? this.auth : this.p256); - } - - async unsubscribe() { - return true; - } - - // Unused in FCM - toJSON = null as unknown as () => PushSubscriptionJSON; - options = null as unknown as PushSubscriptionOptions; -} - -/** - * Most of the fields in here are unused / deprecated. They are only added here to match the TS - * Event interface. - */ -export class FakeEvent implements ExtendableEvent { - NONE = Event.NONE; - AT_TARGET = Event.AT_TARGET; - BUBBLING_PHASE = Event.BUBBLING_PHASE; - CAPTURING_PHASE = Event.CAPTURING_PHASE; - bubbles: boolean; - cancelable: boolean; - composed: boolean; - timeStamp = 123456; - isTrusted = true; - eventPhase = Event.NONE; - target = null; - currentTarget = null; - srcElement = null; - cancelBubble = false; - defaultPrevented = false; - returnValue = false; - - preventDefault() { - this.defaultPrevented = true; - this.returnValue = true; - } - - stopPropagation() {} - - stopImmediatePropagation() {} - - initEvent() {} - - waitUntil() {} - - composedPath() { - return []; - } - - constructor(public type: string, options: EventInit = {}) { - this.bubbles = options.bubbles ?? false; - this.cancelable = options.cancelable ?? false; - this.composed = options.composed ?? false; - } -} diff --git a/packages-old/messaging/src/testing/fakes/token-details.ts b/packages-old/messaging/src/testing/fakes/token-details.ts deleted file mode 100644 index 73eea06b2e5..00000000000 --- a/packages-old/messaging/src/testing/fakes/token-details.ts +++ /dev/null @@ -1,36 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { FakePushSubscription } from './service-worker'; -import { TokenDetails } from '../../interfaces/token-details'; -import { arrayToBase64 } from '../../helpers/array-base64-translator'; - -export function getFakeTokenDetails(): TokenDetails { - const subscription = new FakePushSubscription(); - - return { - token: 'token-value', - createTime: 1234567890, - subscriptionOptions: { - swScope: '/scope-value', - vapidKey: arrayToBase64(new TextEncoder().encode('vapid-key-value')), // 'dmFwaWQta2V5LXZhbHVl', - endpoint: subscription.endpoint, - auth: arrayToBase64(subscription.getKey('auth')), // 'YXV0aC12YWx1ZQ' - p256dh: arrayToBase64(subscription.getKey('p256dh')) // 'cDI1Ni12YWx1ZQ' - } - }; -} diff --git a/packages-old/messaging/src/testing/setup.ts b/packages-old/messaging/src/testing/setup.ts deleted file mode 100644 index 0d55cf43ef2..00000000000 --- a/packages-old/messaging/src/testing/setup.ts +++ /dev/null @@ -1,33 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import * as chaiAsPromised from 'chai-as-promised'; -import * as sinonChai from 'sinon-chai'; - -import { dbDelete } from '../helpers/idb-manager'; -import { deleteDb } from 'idb'; -import { restore } from 'sinon'; -import { use } from 'chai'; - -use(chaiAsPromised); -use(sinonChai); - -afterEach(async () => { - restore(); - await dbDelete(); - await deleteDb('fcm_token_details_db'); -}); diff --git a/packages-old/messaging/src/testing/sinon-types.ts b/packages-old/messaging/src/testing/sinon-types.ts deleted file mode 100644 index 13eafbac969..00000000000 --- a/packages-old/messaging/src/testing/sinon-types.ts +++ /dev/null @@ -1,30 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { SinonSpy, SinonStub } from 'sinon'; - -// Helper types for Sinon stubs and spies. - -export type Stub any> = SinonStub< - Parameters, - ReturnType ->; - -export type Spy any> = SinonSpy< - Parameters, - ReturnType ->; diff --git a/packages-old/messaging/src/util/constants.ts b/packages-old/messaging/src/util/constants.ts deleted file mode 100644 index 3a10bab3361..00000000000 --- a/packages-old/messaging/src/util/constants.ts +++ /dev/null @@ -1,43 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -export const DEFAULT_SW_PATH = '/firebase-messaging-sw.js'; -export const DEFAULT_SW_SCOPE = '/firebase-cloud-messaging-push-scope'; - -export const DEFAULT_VAPID_KEY = - 'BDOU99-h67HcA6JeFXHbSNMu7e2yNNu3RzoMj8TM4W88jITfq7ZmPvIM1Iv-4_l2LxQcYwhqby2xGpWwzjfAnG4'; - -export const ENDPOINT = 'https://fcmregistrations.googleapis.com/v1'; - -// Key of FCM Payload in Notification's data field. -export const FCM_MSG = 'FCM_MSG'; -export const TAG = 'FirebaseMessaging: '; - -// Set to '1' if Analytics is enabled for the campaign -export const CONSOLE_CAMPAIGN_ANALYTICS_ENABLED = 'google.c.a.e'; -export const CONSOLE_CAMPAIGN_ID = 'google.c.a.c_id'; -export const CONSOLE_CAMPAIGN_TIME = 'google.c.a.ts'; -export const CONSOLE_CAMPAIGN_NAME = 'google.c.a.c_l'; - -// Due to the fact that onBackgroundMessage can't be awaited (to support rxjs), a silent push -// warning might be shown by the browser if the callback fails to completes by the end of onPush. -// Experiments were ran to determine the majority onBackground message clock time. This brief -// blocking time would allow majority of the onBackgroundMessage callback to finish. -export const BACKGROUND_HANDLE_EXECUTION_TIME_LIMIT_MS = 1000; - -// Preparation time for client to initialize and set up the message handler. -export const FOREGROUND_HANDLE_PREPARATION_TIME_MS = 3000; diff --git a/packages-old/messaging/src/util/errors.ts b/packages-old/messaging/src/util/errors.ts deleted file mode 100644 index 6a8fca2fdef..00000000000 --- a/packages-old/messaging/src/util/errors.ts +++ /dev/null @@ -1,93 +0,0 @@ -/** - * @license - * Copyright 2017 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { ErrorFactory, ErrorMap } from '@firebase/util'; - -export const enum ErrorCode { - MISSING_APP_CONFIG_VALUES = 'missing-app-config-values', - AVAILABLE_IN_WINDOW = 'only-available-in-window', - AVAILABLE_IN_SW = 'only-available-in-sw', - PERMISSION_DEFAULT = 'permission-default', - PERMISSION_BLOCKED = 'permission-blocked', - UNSUPPORTED_BROWSER = 'unsupported-browser', - FAILED_DEFAULT_REGISTRATION = 'failed-service-worker-registration', - TOKEN_SUBSCRIBE_FAILED = 'token-subscribe-failed', - TOKEN_SUBSCRIBE_NO_TOKEN = 'token-subscribe-no-token', - TOKEN_UNSUBSCRIBE_FAILED = 'token-unsubscribe-failed', - TOKEN_UPDATE_FAILED = 'token-update-failed', - TOKEN_UPDATE_NO_TOKEN = 'token-update-no-token', - INVALID_BG_HANDLER = 'invalid-bg-handler', - USE_SW_AFTER_GET_TOKEN = 'use-sw-after-get-token', - INVALID_SW_REGISTRATION = 'invalid-sw-registration', - USE_VAPID_KEY_AFTER_GET_TOKEN = 'use-vapid-key-after-get-token', - INVALID_VAPID_KEY = 'invalid-vapid-key' -} - -export const ERROR_MAP: ErrorMap = { - [ErrorCode.MISSING_APP_CONFIG_VALUES]: - 'Missing App configuration value: "{$valueName}"', - [ErrorCode.AVAILABLE_IN_WINDOW]: - 'This method is available in a Window context.', - [ErrorCode.AVAILABLE_IN_SW]: - 'This method is available in a service worker context.', - [ErrorCode.PERMISSION_DEFAULT]: - 'The notification permission was not granted and dismissed instead.', - [ErrorCode.PERMISSION_BLOCKED]: - 'The notification permission was not granted and blocked instead.', - [ErrorCode.UNSUPPORTED_BROWSER]: - "This browser doesn't support the API's required to use the firebase SDK.", - [ErrorCode.FAILED_DEFAULT_REGISTRATION]: - 'We are unable to register the default service worker. {$browserErrorMessage}', - [ErrorCode.TOKEN_SUBSCRIBE_FAILED]: - 'A problem occurred while subscribing the user to FCM: {$errorInfo}', - [ErrorCode.TOKEN_SUBSCRIBE_NO_TOKEN]: - 'FCM returned no token when subscribing the user to push.', - [ErrorCode.TOKEN_UNSUBSCRIBE_FAILED]: - 'A problem occurred while unsubscribing the ' + - 'user from FCM: {$errorInfo}', - [ErrorCode.TOKEN_UPDATE_FAILED]: - 'A problem occurred while updating the user from FCM: {$errorInfo}', - [ErrorCode.TOKEN_UPDATE_NO_TOKEN]: - 'FCM returned no token when updating the user to push.', - [ErrorCode.USE_SW_AFTER_GET_TOKEN]: - 'The useServiceWorker() method may only be called once and must be ' + - 'called before calling getToken() to ensure your service worker is used.', - [ErrorCode.INVALID_SW_REGISTRATION]: - 'The input to useServiceWorker() must be a ServiceWorkerRegistration.', - [ErrorCode.INVALID_BG_HANDLER]: - 'The input to setBackgroundMessageHandler() must be a function.', - [ErrorCode.INVALID_VAPID_KEY]: 'The public VAPID key must be a string.', - [ErrorCode.USE_VAPID_KEY_AFTER_GET_TOKEN]: - 'The usePublicVapidKey() method may only be called once and must be ' + - 'called before calling getToken() to ensure your VAPID key is used.' -}; - -interface ErrorParams { - [ErrorCode.MISSING_APP_CONFIG_VALUES]: { - valueName: string; - }; - [ErrorCode.FAILED_DEFAULT_REGISTRATION]: { browserErrorMessage: string }; - [ErrorCode.TOKEN_SUBSCRIBE_FAILED]: { errorInfo: string }; - [ErrorCode.TOKEN_UNSUBSCRIBE_FAILED]: { errorInfo: string }; - [ErrorCode.TOKEN_UPDATE_FAILED]: { errorInfo: string }; -} - -export const ERROR_FACTORY = new ErrorFactory( - 'messaging', - 'Messaging', - ERROR_MAP -); diff --git a/packages-old/messaging/src/util/sw-types.ts b/packages-old/messaging/src/util/sw-types.ts deleted file mode 100644 index 341ba64e5d1..00000000000 --- a/packages-old/messaging/src/util/sw-types.ts +++ /dev/null @@ -1,132 +0,0 @@ -/** - * @license - * Copyright 2018 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * Subset of Web Worker types from lib.webworker.d.ts - * https://github.com/Microsoft/TypeScript/blob/master/lib/lib.webworker.d.ts - * - * Since it's not possible to have both "dom" and "webworker" libs in a single project, we have to - * manually declare the web worker types we need. - */ - -/* eslint-disable @typescript-eslint/no-explicit-any */ // These types are from TS - -// Not the whole interface, just the parts we're currently using. If TS claims that something does -// not exist on this, feel free to add it. -// eslint-disable-next-line @typescript-eslint/no-unused-vars -interface ServiceWorkerGlobalScope { - readonly location: WorkerLocation; - readonly clients: Clients; - readonly registration: ServiceWorkerRegistration; - addEventListener( - type: K, - listener: ( - this: ServiceWorkerGlobalScope, - ev: ServiceWorkerGlobalScopeEventMap[K] - ) => any, - options?: boolean | AddEventListenerOptions - ): void; -} - -// Only makes `clients` and `registration` optional because in tests, we reset them by calling -// `delete` and TS2790 enforces The operand of a `delete'` operator must be optional. -// eslint-disable-next-line @typescript-eslint/no-unused-vars -interface ServiceWorkerGlobalScopeForTesting { - readonly location: WorkerLocation; - readonly clients?: Clients; - readonly registration?: ServiceWorkerRegistration; - addEventListener( - type: K, - listener: ( - this: ServiceWorkerGlobalScope, - ev: ServiceWorkerGlobalScopeEventMap[K] - ) => any, - options?: boolean | AddEventListenerOptions - ): void; -} - -// Same as the previous interface -interface ServiceWorkerGlobalScopeEventMap { - notificationclick: NotificationEvent; - push: PushEvent; - pushsubscriptionchange: PushSubscriptionChangeEvent; -} - -interface Client { - readonly id: string; - readonly type: ClientTypes; - readonly url: string; - postMessage(message: any, transfer?: Transferable[]): void; -} - -interface ClientQueryOptions { - includeReserved?: boolean; - includeUncontrolled?: boolean; - type?: ClientTypes; -} - -interface WindowClient extends Client { - readonly focused: boolean; - readonly visibilityState: VisibilityState; - focus(): Promise; - navigate(url: string): Promise; -} - -interface Clients { - claim(): Promise; - get(id: string): Promise; - matchAll(options?: ClientQueryOptions): Promise; - openWindow(url: string): Promise; -} - -interface ExtendableEvent extends Event { - waitUntil(f: Promise): void; -} - -interface NotificationEvent extends ExtendableEvent { - readonly action: string; - readonly notification: Notification; -} - -interface PushMessageData { - arrayBuffer(): ArrayBuffer; - blob(): Blob; - json(): any; - text(): string; -} - -interface PushEvent extends ExtendableEvent { - readonly data: PushMessageData | null; -} - -interface PushSubscriptionChangeEvent extends ExtendableEvent { - readonly newSubscription: PushSubscription | null; - readonly oldSubscription: PushSubscription | null; -} - -interface WorkerLocation { - readonly hash: string; - readonly host: string; - readonly hostname: string; - readonly href: string; - readonly origin: string; - readonly pathname: string; - readonly port: string; - readonly protocol: string; - readonly search: string; - toString(): string; -} diff --git a/packages-old/messaging/tsconfig.json b/packages-old/messaging/tsconfig.json deleted file mode 100644 index 4b63b47c5b5..00000000000 --- a/packages-old/messaging/tsconfig.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "extends": "../../config/tsconfig.base.json", - "compilerOptions": { - "outDir": "dist", - "noUnusedLocals": true, - "lib": [ - "dom", - "es2017" - ], - "downlevelIteration": true - }, - "exclude": [ - "dist/**/*" - ] -} diff --git a/packages-old/performance/.eslintrc.js b/packages-old/performance/.eslintrc.js deleted file mode 100644 index 16276950320..00000000000 --- a/packages-old/performance/.eslintrc.js +++ /dev/null @@ -1,9 +0,0 @@ -module.exports = { - extends: '../../config/.eslintrc.js', - parserOptions: { - project: 'tsconfig.json', - // to make vscode-eslint work with monorepo - // https://github.com/typescript-eslint/typescript-eslint/issues/251#issuecomment-463943250 - tsconfigRootDir: __dirname - } -}; diff --git a/packages-old/performance/CHANGELOG.md b/packages-old/performance/CHANGELOG.md deleted file mode 100644 index 5ba99854221..00000000000 --- a/packages-old/performance/CHANGELOG.md +++ /dev/null @@ -1,200 +0,0 @@ -# @firebase/performance - -## 0.4.17 - -### Patch Changes - -- Updated dependencies [[`a3cbe719b`](https://github.com/firebase/firebase-js-sdk/commit/a3cbe719b1bd733a5c4c15ee0d0e6388d512054c)]: - - @firebase/util@1.2.0 - - @firebase/component@0.5.5 - - @firebase/installations@0.4.31 - -## 0.4.16 - -### Patch Changes - -- Updated dependencies [[`56a6a9d4a`](https://github.com/firebase/firebase-js-sdk/commit/56a6a9d4af2766154584a0f66d3c4d8024d74ba5)]: - - @firebase/component@0.5.4 - - @firebase/installations@0.4.30 - -## 0.4.15 - -### Patch Changes - -- Updated dependencies [[`725ab4684`](https://github.com/firebase/firebase-js-sdk/commit/725ab4684ef0999a12f71e704c204a00fb030e5d)]: - - @firebase/component@0.5.3 - - @firebase/installations@0.4.29 - -## 0.4.14 - -### Patch Changes - -- Updated dependencies [[`4c4b6aed9`](https://github.com/firebase/firebase-js-sdk/commit/4c4b6aed9757c9a7e75fb698a15e53274f93880b)]: - - @firebase/component@0.5.2 - - @firebase/installations@0.4.28 - -## 0.4.13 - -### Patch Changes - -- Updated dependencies [[`5fbc5fb01`](https://github.com/firebase/firebase-js-sdk/commit/5fbc5fb0140d7da980fd7ebbfbae810f8c64ae19)]: - - @firebase/component@0.5.1 - - @firebase/installations@0.4.27 - -## 0.4.12 - -### Patch Changes - -- Updated dependencies [[`c34ac7a92`](https://github.com/firebase/firebase-js-sdk/commit/c34ac7a92a616915f38d192654db7770d81747ae), [`ac4ad08a2`](https://github.com/firebase/firebase-js-sdk/commit/ac4ad08a284397ec966e991dd388bb1fba857467)]: - - @firebase/component@0.5.0 - - @firebase/util@1.1.0 - - @firebase/installations@0.4.26 - -## 0.4.11 - -### Patch Changes - -- Updated dependencies [[`7354a0ed4`](https://github.com/firebase/firebase-js-sdk/commit/7354a0ed438f4e3df6577e4927e8c8f8f1fbbfda)]: - - @firebase/util@1.0.0 - - @firebase/component@0.4.1 - - @firebase/installations@0.4.25 - -## 0.4.10 - -### Patch Changes - -- Updated dependencies [[`f24d8961b`](https://github.com/firebase/firebase-js-sdk/commit/f24d8961b3b87821413297688803fc85113086b3)]: - - @firebase/component@0.4.0 - - @firebase/installations@0.4.24 - -## 0.4.9 - -### Patch Changes - -- Updated dependencies [[`de5f90501`](https://github.com/firebase/firebase-js-sdk/commit/de5f9050137acc9ed1490082e5aa429b5de3cb2a)]: - - @firebase/util@0.4.1 - - @firebase/component@0.3.1 - - @firebase/installations@0.4.23 - -## 0.4.8 - -### Patch Changes - -- Updated dependencies [[`5c1a83ed7`](https://github.com/firebase/firebase-js-sdk/commit/5c1a83ed70bae979322bd8751c0885d683ce4bf3)]: - - @firebase/component@0.3.0 - - @firebase/installations@0.4.22 - -## 0.4.7 - -### Patch Changes - -- Updated dependencies [[`ec95df3d0`](https://github.com/firebase/firebase-js-sdk/commit/ec95df3d07e5f091f2a7f7327e46417f64d04b4e)]: - - @firebase/util@0.4.0 - - @firebase/component@0.2.1 - - @firebase/installations@0.4.21 - -## 0.4.6 - -### Patch Changes - -- Updated dependencies [[`6afe42613`](https://github.com/firebase/firebase-js-sdk/commit/6afe42613ed3d7a842d378dc1a09a795811db2ac)]: - - @firebase/component@0.2.0 - - @firebase/installations@0.4.20 - -## 0.4.5 - -### Patch Changes - -- [`6f2c7b7aa`](https://github.com/firebase/firebase-js-sdk/commit/6f2c7b7aae72d7be88c7a477f1a5d38bd5e8dfe4) [#3896](https://github.com/firebase/firebase-js-sdk/pull/3896) - Dispatch up to 1000 events for each network request when collecting performance events. - -## 0.4.4 - -### Patch Changes - -- Updated dependencies [[`9cf727fcc`](https://github.com/firebase/firebase-js-sdk/commit/9cf727fcc3d049551b16ae0698ac33dc2fe45ada)]: - - @firebase/util@0.3.4 - - @firebase/component@0.1.21 - - @firebase/installations@0.4.19 - -## 0.4.3 - -### Patch Changes - -- [`a5768b0aa`](https://github.com/firebase/firebase-js-sdk/commit/a5768b0aa7d7ce732279931aa436e988c9f36487) [#3932](https://github.com/firebase/firebase-js-sdk/pull/3932) - Point browser field to esm build. Now you need to use default import instead of namespace import to import firebase. - - Before this change - - ``` - import * as firebase from 'firebase/app'; - ``` - - After this change - - ``` - import firebase from 'firebase/app'; - ``` - -- Updated dependencies [[`a5768b0aa`](https://github.com/firebase/firebase-js-sdk/commit/a5768b0aa7d7ce732279931aa436e988c9f36487), [`7d916d905`](https://github.com/firebase/firebase-js-sdk/commit/7d916d905ba16816ac8ac7c8748c83831ff614ce)]: - - @firebase/component@0.1.20 - - @firebase/util@0.3.3 - - @firebase/installations@0.4.18 - -## 0.4.2 - -### Patch Changes - -- [`48b0b0f7c`](https://github.com/firebase/firebase-js-sdk/commit/48b0b0f7c9137652f438cf04395debddeb3711d0) [#3850](https://github.com/firebase/firebase-js-sdk/pull/3850) - Moved `loggingEnabled` check to wait until performance initialization finishes, thus avoid dropping custom traces right after getting `performance` object. - -* [`8728e1a0f`](https://github.com/firebase/firebase-js-sdk/commit/8728e1a0fc9027a21e3b77e4a058a7e8513a4646) [#3866](https://github.com/firebase/firebase-js-sdk/pull/3866) - Throws exception when startTime or duration is not positive value in `trace.record()` API. - -## 0.4.1 - -### Patch Changes - -- Updated dependencies [[`da1c7df79`](https://github.com/firebase/firebase-js-sdk/commit/da1c7df7982b08bbef82fcc8d93255f3e2d23cca), [`fb3b095e4`](https://github.com/firebase/firebase-js-sdk/commit/fb3b095e4b7c8f57fdb3172bc039c84576abf290)]: - - @firebase/component@0.1.19 - - @firebase/util@0.3.2 - - @firebase/installations@0.4.17 - -## 0.4.0 - -### Minor Changes - -- [`67501b980`](https://github.com/firebase/firebase-js-sdk/commit/67501b9806c7014738080bc0be945b2c0748c17e) [#3424](https://github.com/firebase/firebase-js-sdk/pull/3424) - Issue 2393 - Add environment check to Performance Module - -## 0.3.11 - -### Patch Changes - -- Updated dependencies [[`d4ca3da0`](https://github.com/firebase/firebase-js-sdk/commit/d4ca3da0a59fcea1261ba69d7eb663bba38d3089)]: - - @firebase/util@0.3.1 - - @firebase/component@0.1.18 - - @firebase/installations@0.4.16 - -## 0.3.10 - -### Patch Changes - -- Updated dependencies [[`a87676b8`](https://github.com/firebase/firebase-js-sdk/commit/a87676b84b78ccc2f057a22eb947a5d13402949c)]: - - @firebase/util@0.3.0 - - @firebase/component@0.1.17 - - @firebase/installations@0.4.15 - -## 0.3.9 - -### Patch Changes - -- [`a754645e`](https://github.com/firebase/firebase-js-sdk/commit/a754645ec2be1b8c205f25f510196eee298b0d6e) [#3297](https://github.com/firebase/firebase-js-sdk/pull/3297) Thanks [@renovate](https://github.com/apps/renovate)! - Update dependency typescript to v3.9.5 - -- Updated dependencies [[`a754645e`](https://github.com/firebase/firebase-js-sdk/commit/a754645ec2be1b8c205f25f510196eee298b0d6e)]: - - @firebase/component@0.1.16 - - @firebase/installations@0.4.14 - - @firebase/logger@0.2.6 - -## 0.3.0 - -- [changed] Updated internal performance event transport mechanism. - -## 0.2.30 - -- [changed] Internal transport protocol update from proto2 to proto3. diff --git a/packages-old/performance/README.md b/packages-old/performance/README.md deleted file mode 100644 index 5c83dbc51b7..00000000000 --- a/packages-old/performance/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# @firebase/performance - -This is the Firebase Performance component of the Firebase JS SDK. - -**This package is not intended for direct usage, and should only be used via the officially supported [firebase](https://www.npmjs.com/package/firebase) package.** diff --git a/packages-old/performance/index.ts b/packages-old/performance/index.ts deleted file mode 100644 index 6829a9154a1..00000000000 --- a/packages-old/performance/index.ts +++ /dev/null @@ -1,83 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import firebase from '@firebase/app'; -import '@firebase/installations'; -import { FirebaseApp, FirebaseNamespace } from '@firebase/app-types'; -import { _FirebaseNamespace } from '@firebase/app-types/private'; -import { PerformanceController } from './src/controllers/perf'; -import { setupApi } from './src/services/api_service'; -import { SettingsService } from './src/services/settings_service'; -import { ERROR_FACTORY, ErrorCode } from './src/utils/errors'; -import { FirebasePerformance } from '@firebase/performance-types'; -import { Component, ComponentType } from '@firebase/component'; -import { FirebaseInstallations } from '@firebase/installations-types'; -import { name, version } from './package.json'; - -const DEFAULT_ENTRY_NAME = '[DEFAULT]'; - -export function registerPerformance(instance: FirebaseNamespace): void { - const factoryMethod = ( - app: FirebaseApp, - installations: FirebaseInstallations - ): PerformanceController => { - if (app.name !== DEFAULT_ENTRY_NAME) { - throw ERROR_FACTORY.create(ErrorCode.FB_NOT_DEFAULT); - } - if (typeof window === 'undefined') { - throw ERROR_FACTORY.create(ErrorCode.NO_WINDOW); - } - setupApi(window); - SettingsService.getInstance().firebaseAppInstance = app; - SettingsService.getInstance().installationsService = installations; - return new PerformanceController(app); - }; - - // Register performance with firebase-app. - (instance as _FirebaseNamespace).INTERNAL.registerComponent( - new Component( - 'performance', - container => { - /* Dependencies */ - // getImmediate for FirebaseApp will always succeed - const app = container.getProvider('app').getImmediate(); - // The following call will always succeed because perf has `import '@firebase/installations'` - const installations = container - .getProvider('installations') - .getImmediate(); - - return factoryMethod(app, installations); - }, - ComponentType.PUBLIC - ) - ); - - instance.registerVersion(name, version); -} - -registerPerformance(firebase); - -declare module '@firebase/app-types' { - interface FirebaseNamespace { - performance?: { - (app?: FirebaseApp): FirebasePerformance; - }; - } - interface FirebaseApp { - performance?(): FirebasePerformance; - } -} diff --git a/packages-old/performance/karma.conf.js b/packages-old/performance/karma.conf.js deleted file mode 100644 index 7d6d24d6c2b..00000000000 --- a/packages-old/performance/karma.conf.js +++ /dev/null @@ -1,34 +0,0 @@ -/** - * @license - * Copyright 2017 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -const karmaBase = require('../../config/karma.base'); - -const files = [`test/**/*`, 'src/**/*.test.ts']; - -module.exports = function (config) { - config.set({ - ...karmaBase, - // files to load into karma - files, - preprocessors: { '**/*.ts': ['webpack', 'sourcemap'] }, - // frameworks to use - // available frameworks: https://npmjs.org/browse/keyword/karma-adapter - frameworks: ['mocha'] - }); -}; - -module.exports.files = files; diff --git a/packages-old/performance/package.json b/packages-old/performance/package.json deleted file mode 100644 index 3fe86b84d56..00000000000 --- a/packages-old/performance/package.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "name": "@firebase/performance", - "version": "0.4.17", - "description": "Firebase performance for web", - "author": "Firebase (https://firebase.google.com/)", - "main": "dist/index.cjs.js", - "browser": "dist/index.esm.js", - "module": "dist/index.esm.js", - "esm2017": "dist/index.esm2017.js", - "files": [ - "dist" - ], - "scripts": { - "lint": "eslint -c .eslintrc.js '**/*.ts' --ignore-path '../../.gitignore'", - "lint:fix": "eslint --fix -c .eslintrc.js '**/*.ts' --ignore-path '../../.gitignore'", - "build": "rollup -c", - "build:deps": "lerna run --scope @firebase/performance --include-dependencies build", - "dev": "rollup -c -w", - "test": "run-p lint test:browser", - "test:ci": "node ../../scripts/run_tests_in_ci.js -s test:browser", - "test:browser": "karma start --single-run", - "test:debug": "karma start --browsers=Chrome --auto-watch", - "prettier": "prettier --write '{src,test}/**/*.{js,ts}'" - }, - "peerDependencies": { - "@firebase/app": "0.x", - "@firebase/app-types": "0.x" - }, - "dependencies": { - "@firebase/logger": "0.2.6", - "@firebase/installations": "0.4.31", - "@firebase/util": "1.2.0", - "@firebase/performance-types": "0.0.13", - "@firebase/component": "0.5.5", - "tslib": "^2.1.0" - }, - "license": "Apache-2.0", - "devDependencies": { - "@firebase/app": "0.6.29", - "rollup": "2.52.2", - "@rollup/plugin-json": "4.1.0", - "rollup-plugin-typescript2": "0.30.0", - "typescript": "4.2.2" - }, - "repository": { - "directory": "packages/performance", - "type": "git", - "url": "https://github.com/firebase/firebase-js-sdk.git" - }, - "bugs": { - "url": "https://github.com/firebase/firebase-js-sdk/issues" - }, - "typings": "dist/index.d.ts", - "nyc": { - "extension": [ - ".ts" - ], - "reportDir": "./coverage/node" - } -} diff --git a/packages-old/performance/rollup.config.js b/packages-old/performance/rollup.config.js deleted file mode 100644 index bff20f3d6ca..00000000000 --- a/packages-old/performance/rollup.config.js +++ /dev/null @@ -1,69 +0,0 @@ -/** - * @license - * Copyright 2018 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import json from '@rollup/plugin-json'; -import typescriptPlugin from 'rollup-plugin-typescript2'; -import typescript from 'typescript'; -import pkg from './package.json'; - -const deps = Object.keys( - Object.assign({}, pkg.peerDependencies, pkg.dependencies) -); - -/** - * ES5 Builds - */ -const es5BuildPlugins = [typescriptPlugin({ typescript }), json()]; - -const es5Builds = [ - { - input: 'index.ts', - output: [ - { file: pkg.main, format: 'cjs', sourcemap: true }, - { file: pkg.module, format: 'es', sourcemap: true } - ], - plugins: es5BuildPlugins, - external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)) - } -]; - -/** - * ES2017 Builds - */ - -const es2017BuildPlugins = [ - typescriptPlugin({ - typescript, - tsconfigOverride: { - compilerOptions: { - target: 'es2017' - } - } - }), - json({ preferConst: true }) -]; - -const es2017Builds = [ - { - input: 'index.ts', - output: [{ file: pkg.esm2017, format: 'es', sourcemap: true }], - plugins: es2017BuildPlugins, - external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)) - } -]; - -export default [...es5Builds, ...es2017Builds]; diff --git a/packages-old/performance/src/constants.ts b/packages-old/performance/src/constants.ts deleted file mode 100644 index b0566a2a8be..00000000000 --- a/packages-old/performance/src/constants.ts +++ /dev/null @@ -1,42 +0,0 @@ -/** - * @license - * Copyright 2017 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { version } from '../package.json'; - -export const SDK_VERSION = version; -/** The prefix for start User Timing marks used for creating Traces. */ -export const TRACE_START_MARK_PREFIX = 'FB-PERF-TRACE-START'; -/** The prefix for stop User Timing marks used for creating Traces. */ -export const TRACE_STOP_MARK_PREFIX = 'FB-PERF-TRACE-STOP'; -/** The prefix for User Timing measure used for creating Traces. */ -export const TRACE_MEASURE_PREFIX = 'FB-PERF-TRACE-MEASURE'; -/** The prefix for out of the box page load Trace name. */ -export const OOB_TRACE_PAGE_LOAD_PREFIX = '_wt_'; - -export const FIRST_PAINT_COUNTER_NAME = '_fp'; - -export const FIRST_CONTENTFUL_PAINT_COUNTER_NAME = '_fcp'; - -export const FIRST_INPUT_DELAY_COUNTER_NAME = '_fid'; - -export const CONFIG_LOCAL_STORAGE_KEY = '@firebase/performance/config'; - -export const CONFIG_EXPIRY_LOCAL_STORAGE_KEY = - '@firebase/performance/configexpire'; - -export const SERVICE = 'performance'; -export const SERVICE_NAME = 'Performance'; diff --git a/packages-old/performance/src/controllers/perf.test.ts b/packages-old/performance/src/controllers/perf.test.ts deleted file mode 100644 index 6d3a24e723f..00000000000 --- a/packages-old/performance/src/controllers/perf.test.ts +++ /dev/null @@ -1,137 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { expect } from 'chai'; -import { stub } from 'sinon'; -import { PerformanceController } from '../controllers/perf'; -import { Trace } from '../resources/trace'; -import { Api, setupApi } from '../services/api_service'; -import { FirebaseApp } from '@firebase/app-types'; -import * as initializationService from '../services/initialization_service'; -import * as FirebaseUtil from '@firebase/util'; -import { consoleLogger } from '../utils/console_logger'; -import '../../test/setup'; - -describe('Firebase Performance Test', () => { - setupApi(window); - - const fakeFirebaseConfig = { - apiKey: 'api-key', - authDomain: 'project-id.firebaseapp.com', - databaseURL: 'https://project-id.firebaseio.com', - projectId: 'project-id', - storageBucket: 'project-id.appspot.com', - messagingSenderId: 'sender-id', - appId: '1:111:web:a1234' - }; - - const fakeFirebaseApp = ({ - options: fakeFirebaseConfig - } as unknown) as FirebaseApp; - - describe('#constructor', () => { - it('does not initialize performance if the required apis are not available', () => { - stub(Api.prototype, 'requiredApisAvailable').returns(false); - stub(initializationService, 'getInitializationPromise'); - new PerformanceController(fakeFirebaseApp); - expect(initializationService.getInitializationPromise).not.be.called; - }); - it('does not initialize performance if validateIndexedDBOpenable return false', async () => { - stub(Api.prototype, 'requiredApisAvailable').returns(true); - const validateStub = stub( - FirebaseUtil, - 'validateIndexedDBOpenable' - ).resolves(false); - stub(initializationService, 'getInitializationPromise'); - new PerformanceController(fakeFirebaseApp); - await validateStub; - expect(initializationService.getInitializationPromise).not.be.called; - }); - - it('does not initialize performance if validateIndexedDBOpenable throws an error', async () => { - stub(Api.prototype, 'requiredApisAvailable').returns(true); - const validateStub = stub( - FirebaseUtil, - 'validateIndexedDBOpenable' - ).rejects(); - - stub(initializationService, 'getInitializationPromise'); - stub(consoleLogger, 'info'); - new PerformanceController(fakeFirebaseApp); - try { - await validateStub; - expect(initializationService.getInitializationPromise).not.be.called; - expect(consoleLogger.info).be.called; - } catch (ignored) {} - }); - }); - - describe('#trace', () => { - it('creates a custom trace', () => { - const controller = new PerformanceController(fakeFirebaseApp); - const myTrace = controller.trace('myTrace'); - - expect(myTrace).to.be.instanceOf(Trace); - }); - - it('custom trace has the correct name', () => { - const controller = new PerformanceController(fakeFirebaseApp); - const myTrace = controller.trace('myTrace'); - - expect(myTrace.name).is.equal('myTrace'); - }); - - it('custom trace is not auto', () => { - const controller = new PerformanceController(fakeFirebaseApp); - const myTrace = controller.trace('myTrace'); - - expect(myTrace.isAuto).is.equal(false); - }); - }); - - describe('#instrumentationEnabled', () => { - it('sets instrumentationEnabled to enabled', async () => { - const controller = new PerformanceController(fakeFirebaseApp); - - controller.instrumentationEnabled = true; - expect(controller.instrumentationEnabled).is.equal(true); - }); - - it('sets instrumentationEnabled to disabled', async () => { - const controller = new PerformanceController(fakeFirebaseApp); - - controller.instrumentationEnabled = false; - expect(controller.instrumentationEnabled).is.equal(false); - }); - }); - - describe('#dataCollectionEnabled', () => { - it('sets dataCollectionEnabled to enabled', async () => { - const controller = new PerformanceController(fakeFirebaseApp); - - controller.dataCollectionEnabled = true; - expect(controller.dataCollectionEnabled).is.equal(true); - }); - - it('sets dataCollectionEnabled to disabled', () => { - const controller = new PerformanceController(fakeFirebaseApp); - - controller.dataCollectionEnabled = false; - expect(controller.dataCollectionEnabled).is.equal(false); - }); - }); -}); diff --git a/packages-old/performance/src/controllers/perf.ts b/packages-old/performance/src/controllers/perf.ts deleted file mode 100644 index 9793f614dd4..00000000000 --- a/packages-old/performance/src/controllers/perf.ts +++ /dev/null @@ -1,63 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import { Trace } from '../resources/trace'; -import { setupOobResources } from '../services/oob_resources_service'; -import { SettingsService } from '../services/settings_service'; -import { getInitializationPromise } from '../services/initialization_service'; -import { Api } from '../services/api_service'; -import { FirebaseApp } from '@firebase/app-types'; -import { FirebasePerformance } from '@firebase/performance-types'; -import { setupTransportService } from '../services/transport_service'; -import { validateIndexedDBOpenable } from '@firebase/util'; -import { consoleLogger } from '../utils/console_logger'; -export class PerformanceController implements FirebasePerformance { - constructor(readonly app: FirebaseApp) { - if (Api.getInstance().requiredApisAvailable()) { - validateIndexedDBOpenable() - .then(isAvailable => { - if (isAvailable) { - setupTransportService(); - getInitializationPromise().then( - setupOobResources, - setupOobResources - ); - } - }) - .catch(error => { - consoleLogger.info(`Environment doesn't support IndexedDB: ${error}`); - }); - } - } - - trace(name: string): Trace { - return new Trace(name); - } - - set instrumentationEnabled(val: boolean) { - SettingsService.getInstance().instrumentationEnabled = val; - } - get instrumentationEnabled(): boolean { - return SettingsService.getInstance().instrumentationEnabled; - } - - set dataCollectionEnabled(val: boolean) { - SettingsService.getInstance().dataCollectionEnabled = val; - } - get dataCollectionEnabled(): boolean { - return SettingsService.getInstance().dataCollectionEnabled; - } -} diff --git a/packages-old/performance/src/resources/network_request.test.ts b/packages-old/performance/src/resources/network_request.test.ts deleted file mode 100644 index 2484b08fdf2..00000000000 --- a/packages-old/performance/src/resources/network_request.test.ts +++ /dev/null @@ -1,78 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { stub, restore } from 'sinon'; -import { createNetworkRequestEntry } from '../../src/resources/network_request'; -import { expect } from 'chai'; -import { Api, setupApi } from '../services/api_service'; -import * as perfLogger from '../services/perf_logger'; - -import '../../test/setup'; - -describe('Firebase Performance > network_request', () => { - setupApi(window); - - beforeEach(() => { - stub(Api.prototype, 'getTimeOrigin').returns(1528521843799.5032); - stub(perfLogger, 'logNetworkRequest'); - }); - - afterEach(() => { - restore(); - }); - - describe('#createNetworkRequestEntry', () => { - it('logs network request when all required fields present', () => { - const PERFORMANCE_ENTRY = ({ - name: 'http://some.test.website.com', - transferSize: 500, - startTime: 1645352.632345, - responseStart: 1645360.244323, - responseEnd: 1645360.832443 - } as unknown) as PerformanceResourceTiming; - - const EXPECTED_NETWORK_REQUEST = { - url: 'http://some.test.website.com', - responsePayloadBytes: 500, - startTimeUs: 1528523489152135, - timeToResponseInitiatedUs: 7611, - timeToResponseCompletedUs: 8200 - }; - - createNetworkRequestEntry(PERFORMANCE_ENTRY); - - expect( - (perfLogger.logNetworkRequest as any).calledWith( - EXPECTED_NETWORK_REQUEST - ) - ).to.be.true; - }); - - it('doesnt log network request when responseStart is absent', () => { - const PERFORMANCE_ENTRY = ({ - name: 'http://some.test.website.com', - transferSize: 500, - startTime: 1645352.632345, - responseEnd: 1645360.832443 - } as unknown) as PerformanceResourceTiming; - - createNetworkRequestEntry(PERFORMANCE_ENTRY); - - expect(perfLogger.logNetworkRequest).to.not.have.been.called; - }); - }); -}); diff --git a/packages-old/performance/src/resources/network_request.ts b/packages-old/performance/src/resources/network_request.ts deleted file mode 100644 index ac7cfe114fe..00000000000 --- a/packages-old/performance/src/resources/network_request.ts +++ /dev/null @@ -1,77 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { Api } from '../services/api_service'; -import { logNetworkRequest } from '../services/perf_logger'; - -// The order of values of this enum should not be changed. -export const enum HttpMethod { - HTTP_METHOD_UNKNOWN = 0, - GET = 1, - PUT = 2, - POST = 3, - DELETE = 4, - HEAD = 5, - PATCH = 6, - OPTIONS = 7, - TRACE = 8, - CONNECT = 9 -} - -// Durations are in microseconds. -export interface NetworkRequest { - url: string; - httpMethod?: HttpMethod; - requestPayloadBytes?: number; - responsePayloadBytes?: number; - httpResponseCode?: number; - responseContentType?: string; - startTimeUs?: number; - timeToRequestCompletedUs?: number; - timeToResponseInitiatedUs?: number; - timeToResponseCompletedUs?: number; -} - -export function createNetworkRequestEntry(entry: PerformanceEntry): void { - const performanceEntry = entry as PerformanceResourceTiming; - if (!performanceEntry || performanceEntry.responseStart === undefined) { - return; - } - const timeOrigin = Api.getInstance().getTimeOrigin(); - const startTimeUs = Math.floor( - (performanceEntry.startTime + timeOrigin) * 1000 - ); - const timeToResponseInitiatedUs = performanceEntry.responseStart - ? Math.floor( - (performanceEntry.responseStart - performanceEntry.startTime) * 1000 - ) - : undefined; - const timeToResponseCompletedUs = Math.floor( - (performanceEntry.responseEnd - performanceEntry.startTime) * 1000 - ); - // Remove the query params from logged network request url. - const url = performanceEntry.name && performanceEntry.name.split('?')[0]; - const networkRequest: NetworkRequest = { - url, - responsePayloadBytes: performanceEntry.transferSize, - startTimeUs, - timeToResponseInitiatedUs, - timeToResponseCompletedUs - }; - - logNetworkRequest(networkRequest); -} diff --git a/packages-old/performance/src/resources/trace.test.ts b/packages-old/performance/src/resources/trace.test.ts deleted file mode 100644 index 19037380762..00000000000 --- a/packages-old/performance/src/resources/trace.test.ts +++ /dev/null @@ -1,264 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { spy, stub, restore } from 'sinon'; -import { Trace } from '../resources/trace'; -import { expect } from 'chai'; -import { Api, setupApi } from '../services/api_service'; -import * as perfLogger from '../services/perf_logger'; - -import '../../test/setup'; - -describe('Firebase Performance > trace', () => { - setupApi(window); - let trace: Trace; - const createTrace = (): Trace => { - return new Trace('test'); - }; - - beforeEach(() => { - spy(Api.prototype, 'mark'); - stub(perfLogger, 'logTrace'); - trace = createTrace(); - }); - - afterEach(() => { - restore(); - }); - - describe('#start', () => { - beforeEach(() => { - trace.start(); - }); - - it('uses the underlying api method', () => { - expect(Api.getInstance().mark).to.be.calledOnce; - }); - - it('throws if a trace is started twice', () => { - expect(() => trace.start()).to.throw(); - }); - }); - - describe('#stop', () => { - it('adds a mark to the performance timeline', () => { - trace.start(); - trace.stop(); - - expect(Api.getInstance().mark).to.be.calledTwice; - }); - - it('logs the trace', () => { - trace.start(); - trace.stop(); - - expect((perfLogger.logTrace as any).calledOnceWith(trace)).to.be.true; - }); - }); - - describe('#record', () => { - it('logs a custom trace with non-positive start time value', () => { - expect(() => trace.record(0, 20)).to.throw(); - expect(() => trace.record(-100, 20)).to.throw(); - }); - - it('logs a custom trace with non-positive duration value', () => { - expect(() => trace.record(1000, 0)).to.throw(); - expect(() => trace.record(1000, -200)).to.throw(); - }); - - it('logs a trace with metrics', () => { - trace.record(1, 20, { metrics: { cacheHits: 1 } }); - - expect((perfLogger.logTrace as any).calledOnceWith(trace)).to.be.true; - expect(trace.getMetric('cacheHits')).to.eql(1); - }); - - it('logs a trace with custom attributes', () => { - trace.record(1, 20, { attributes: { level: '1' } }); - - expect((perfLogger.logTrace as any).calledOnceWith(trace)).to.be.true; - expect(trace.getAttributes()).to.eql({ level: '1' }); - }); - - it('logs a trace with custom attributes and metrics', () => { - trace.record(1, 20, { - attributes: { level: '1' }, - metrics: { cacheHits: 1 } - }); - - expect((perfLogger.logTrace as any).calledOnceWith(trace)).to.be.true; - expect(trace.getAttributes()).to.eql({ level: '1' }); - expect(trace.getMetric('cacheHits')).to.eql(1); - }); - }); - - describe('#incrementMetric', () => { - it('creates new metric if one doesnt exist.', () => { - trace.incrementMetric('cacheHits', 200); - - expect(trace.getMetric('cacheHits')).to.eql(200); - }); - - it('increments metric if it already exists.', () => { - trace.incrementMetric('cacheHits', 200); - trace.incrementMetric('cacheHits', 400); - - expect(trace.getMetric('cacheHits')).to.eql(600); - }); - - it('increments metric value as an integer even if the value is provided in float.', () => { - trace.incrementMetric('cacheHits', 200); - trace.incrementMetric('cacheHits', 400.38); - - expect(trace.getMetric('cacheHits')).to.eql(600); - }); - - it('increments metric value with a negative float.', () => { - trace.incrementMetric('cacheHits', 200); - trace.incrementMetric('cacheHits', -230.38); - - expect(trace.getMetric('cacheHits')).to.eql(-31); - }); - - it('throws error if metric doesnt exist and has invalid name', () => { - expect(() => trace.incrementMetric('_invalidMetric', 1)).to.throw(); - }); - }); - - describe('#putMetric', () => { - it('creates new metric if one doesnt exist and has valid name.', () => { - trace.putMetric('cacheHits', 200); - - expect(trace.getMetric('cacheHits')).to.eql(200); - }); - - it('sets the metric value as an integer even if the value is provided in float.', () => { - trace.putMetric('timelapse', 200.48); - - expect(trace.getMetric('timelapse')).to.eql(200); - }); - - it('replaces metric if it already exists.', () => { - trace.putMetric('cacheHits', 200); - trace.putMetric('cacheHits', 400); - - expect(trace.getMetric('cacheHits')).to.eql(400); - }); - - it('throws error if metric doesnt exist and has invalid name', () => { - expect(() => trace.putMetric('_invalidMetric', 1)).to.throw(); - expect(() => trace.putMetric('_fid', 1)).to.throw(); - }); - }); - - describe('#getMetric', () => { - it('returns 0 if metric doesnt exist', () => { - expect(trace.getMetric('doesThisExist')).to.equal(0); - }); - - it('returns 0 if it exists and equals 0', () => { - trace.putMetric('cacheHits', 0); - - expect(trace.getMetric('cacheHits')).to.equal(0); - }); - - it('returns metric if it exists', () => { - trace.putMetric('cacheHits', 200); - - expect(trace.getMetric('cacheHits')).to.equal(200); - }); - - it('returns multiple metrics if they exist', () => { - trace.putMetric('cacheHits', 200); - trace.putMetric('bytesDownloaded', 25); - - expect(trace.getMetric('cacheHits')).to.equal(200); - expect(trace.getMetric('bytesDownloaded')).to.equal(25); - }); - }); - - describe('#putAttribute', () => { - it('creates new attribute if it doesnt exist', () => { - trace.putAttribute('level', '4'); - - expect(trace.getAttributes()).to.eql({ level: '4' }); - }); - - it('replaces attribute if it exists', () => { - trace.putAttribute('level', '4'); - trace.putAttribute('level', '7'); - - expect(trace.getAttributes()).to.eql({ level: '7' }); - }); - - it('throws error if attribute name is invalid', () => { - expect(() => trace.putAttribute('_invalidAttribute', '1')).to.throw(); - }); - - it('throws error if attribute value is invalid', () => { - const longAttributeValue = - 'too-long-attribute-value-over-one-hundred-characters-too-long-attribute-value-over-one-' + - 'hundred-charac'; - expect(() => - trace.putAttribute('validName', longAttributeValue) - ).to.throw(); - }); - }); - - describe('#getAttribute', () => { - it('returns undefined for attribute that doesnt exist', () => { - expect(trace.getAttribute('level')).to.be.undefined; - }); - - it('returns attribute if it exists', () => { - trace.putAttribute('level', '4'); - expect(trace.getAttribute('level')).to.equal('4'); - }); - - it('returns separate attributes if they exist', () => { - trace.putAttribute('level', '4'); - trace.putAttribute('stage', 'beginning'); - - expect(trace.getAttribute('level')).to.equal('4'); - expect(trace.getAttribute('stage')).to.equal('beginning'); - }); - }); - - describe('#removeAttribute', () => { - it('does not throw if removing attribute that doesnt exist', () => { - expect(() => trace.removeAttribute('doesNotExist')).to.not.throw; - }); - - it('removes attribute if it exists', () => { - trace.putAttribute('level', '4'); - expect(trace.getAttribute('level')).to.equal('4'); - - trace.removeAttribute('level'); - expect(trace.getAttribute('level')).to.be.undefined; - }); - - it('retains other attributes', () => { - trace.putAttribute('level', '4'); - trace.putAttribute('stage', 'beginning'); - - trace.removeAttribute('level'); - expect(trace.getAttribute('level')).to.be.undefined; - expect(trace.getAttribute('stage')).to.equal('beginning'); - }); - }); -}); diff --git a/packages-old/performance/src/resources/trace.ts b/packages-old/performance/src/resources/trace.ts deleted file mode 100644 index 6fe565de32b..00000000000 --- a/packages-old/performance/src/resources/trace.ts +++ /dev/null @@ -1,340 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { - TRACE_START_MARK_PREFIX, - TRACE_STOP_MARK_PREFIX, - TRACE_MEASURE_PREFIX, - OOB_TRACE_PAGE_LOAD_PREFIX, - FIRST_PAINT_COUNTER_NAME, - FIRST_CONTENTFUL_PAINT_COUNTER_NAME, - FIRST_INPUT_DELAY_COUNTER_NAME -} from '../constants'; -import { Api } from '../services/api_service'; -import { logTrace } from '../services/perf_logger'; -import { ERROR_FACTORY, ErrorCode } from '../utils/errors'; -import { - isValidCustomAttributeName, - isValidCustomAttributeValue -} from '../utils/attributes_utils'; -import { - isValidMetricName, - convertMetricValueToInteger -} from '../utils/metric_utils'; -import { PerformanceTrace } from '@firebase/performance-types'; - -const enum TraceState { - UNINITIALIZED = 1, - RUNNING, - TERMINATED -} - -export class Trace implements PerformanceTrace { - private state: TraceState = TraceState.UNINITIALIZED; - startTimeUs!: number; - durationUs!: number; - private customAttributes: { [key: string]: string } = {}; - counters: { [counterName: string]: number } = {}; - private api = Api.getInstance(); - private randomId = Math.floor(Math.random() * 1000000); - private traceStartMark!: string; - private traceStopMark!: string; - private traceMeasure!: string; - - /** - * @param name The name of the trace. - * @param isAuto If the trace is auto-instrumented. - * @param traceMeasureName The name of the measure marker in user timing specification. This field - * is only set when the trace is built for logging when the user directly uses the user timing - * api (performance.mark and performance.measure). - */ - constructor( - readonly name: string, - readonly isAuto = false, - traceMeasureName?: string - ) { - if (!this.isAuto) { - this.traceStartMark = `${TRACE_START_MARK_PREFIX}-${this.randomId}-${this.name}`; - this.traceStopMark = `${TRACE_STOP_MARK_PREFIX}-${this.randomId}-${this.name}`; - this.traceMeasure = - traceMeasureName || - `${TRACE_MEASURE_PREFIX}-${this.randomId}-${this.name}`; - - if (traceMeasureName) { - // For the case of direct user timing traces, no start stop will happen. The measure object - // is already available. - this.calculateTraceMetrics(); - } - } - } - - /** - * Starts a trace. The measurement of the duration starts at this point. - */ - start(): void { - if (this.state !== TraceState.UNINITIALIZED) { - throw ERROR_FACTORY.create(ErrorCode.TRACE_STARTED_BEFORE, { - traceName: this.name - }); - } - this.api.mark(this.traceStartMark); - this.state = TraceState.RUNNING; - } - - /** - * Stops the trace. The measurement of the duration of the trace stops at this point and trace - * is logged. - */ - stop(): void { - if (this.state !== TraceState.RUNNING) { - throw ERROR_FACTORY.create(ErrorCode.TRACE_STOPPED_BEFORE, { - traceName: this.name - }); - } - this.state = TraceState.TERMINATED; - this.api.mark(this.traceStopMark); - this.api.measure( - this.traceMeasure, - this.traceStartMark, - this.traceStopMark - ); - this.calculateTraceMetrics(); - logTrace(this); - } - - /** - * Records a trace with predetermined values. If this method is used a trace is created and logged - * directly. No need to use start and stop methods. - * @param startTime Trace start time since epoch in millisec - * @param duration The duraction of the trace in millisec - * @param options An object which can optionally hold maps of custom metrics and custom attributes - */ - record( - startTime: number, - duration: number, - options?: { - metrics?: { [key: string]: number }; - attributes?: { [key: string]: string }; - } - ): void { - if (startTime <= 0) { - throw ERROR_FACTORY.create(ErrorCode.NONPOSITIVE_TRACE_START_TIME, { - traceName: this.name - }); - } - if (duration <= 0) { - throw ERROR_FACTORY.create(ErrorCode.NONPOSITIVE_TRACE_DURATION, { - traceName: this.name - }); - } - - this.durationUs = Math.floor(duration * 1000); - this.startTimeUs = Math.floor(startTime * 1000); - if (options && options.attributes) { - this.customAttributes = { ...options.attributes }; - } - if (options && options.metrics) { - for (const metric of Object.keys(options.metrics)) { - if (!isNaN(Number(options.metrics[metric]))) { - this.counters[metric] = Number(Math.floor(options.metrics[metric])); - } - } - } - logTrace(this); - } - - /** - * Increments a custom metric by a certain number or 1 if number not specified. Will create a new - * custom metric if one with the given name does not exist. The value will be floored down to an - * integer. - * @param counter Name of the custom metric - * @param numAsInteger Increment by value - */ - incrementMetric(counter: string, numAsInteger = 1): void { - if (this.counters[counter] === undefined) { - this.putMetric(counter, numAsInteger); - } else { - this.putMetric(counter, this.counters[counter] + numAsInteger); - } - } - - /** - * Sets a custom metric to a specified value. Will create a new custom metric if one with the - * given name does not exist. The value will be floored down to an integer. - * @param counter Name of the custom metric - * @param numAsInteger Set custom metric to this value - */ - putMetric(counter: string, numAsInteger: number): void { - if (isValidMetricName(counter, this.name)) { - this.counters[counter] = convertMetricValueToInteger(numAsInteger); - } else { - throw ERROR_FACTORY.create(ErrorCode.INVALID_CUSTOM_METRIC_NAME, { - customMetricName: counter - }); - } - } - - /** - * Returns the value of the custom metric by that name. If a custom metric with that name does - * not exist will return zero. - * @param counter - */ - getMetric(counter: string): number { - return this.counters[counter] || 0; - } - - /** - * Sets a custom attribute of a trace to a certain value. - * @param attr - * @param value - */ - putAttribute(attr: string, value: string): void { - const isValidName = isValidCustomAttributeName(attr); - const isValidValue = isValidCustomAttributeValue(value); - if (isValidName && isValidValue) { - this.customAttributes[attr] = value; - return; - } - // Throw appropriate error when the attribute name or value is invalid. - if (!isValidName) { - throw ERROR_FACTORY.create(ErrorCode.INVALID_ATTRIBUTE_NAME, { - attributeName: attr - }); - } - if (!isValidValue) { - throw ERROR_FACTORY.create(ErrorCode.INVALID_ATTRIBUTE_VALUE, { - attributeValue: value - }); - } - } - - /** - * Retrieves the value a custom attribute of a trace is set to. - * @param attr - */ - getAttribute(attr: string): string | undefined { - return this.customAttributes[attr]; - } - - removeAttribute(attr: string): void { - if (this.customAttributes[attr] === undefined) { - return; - } - delete this.customAttributes[attr]; - } - - getAttributes(): { [key: string]: string } { - return { ...this.customAttributes }; - } - - private setStartTime(startTime: number): void { - this.startTimeUs = startTime; - } - - private setDuration(duration: number): void { - this.durationUs = duration; - } - - /** - * Calculates and assigns the duration and start time of the trace using the measure performance - * entry. - */ - private calculateTraceMetrics(): void { - const perfMeasureEntries = this.api.getEntriesByName(this.traceMeasure); - const perfMeasureEntry = perfMeasureEntries && perfMeasureEntries[0]; - if (perfMeasureEntry) { - this.durationUs = Math.floor(perfMeasureEntry.duration * 1000); - this.startTimeUs = Math.floor( - (perfMeasureEntry.startTime + this.api.getTimeOrigin()) * 1000 - ); - } - } - - /** - * @param navigationTimings A single element array which contains the navigationTIming object of - * the page load - * @param paintTimings A array which contains paintTiming object of the page load - * @param firstInputDelay First input delay in millisec - */ - static createOobTrace( - navigationTimings: PerformanceNavigationTiming[], - paintTimings: PerformanceEntry[], - firstInputDelay?: number - ): void { - const route = Api.getInstance().getUrl(); - if (!route) { - return; - } - const trace = new Trace(OOB_TRACE_PAGE_LOAD_PREFIX + route, true); - const timeOriginUs = Math.floor(Api.getInstance().getTimeOrigin() * 1000); - trace.setStartTime(timeOriginUs); - - // navigationTimings includes only one element. - if (navigationTimings && navigationTimings[0]) { - trace.setDuration(Math.floor(navigationTimings[0].duration * 1000)); - trace.putMetric( - 'domInteractive', - Math.floor(navigationTimings[0].domInteractive * 1000) - ); - trace.putMetric( - 'domContentLoadedEventEnd', - Math.floor(navigationTimings[0].domContentLoadedEventEnd * 1000) - ); - trace.putMetric( - 'loadEventEnd', - Math.floor(navigationTimings[0].loadEventEnd * 1000) - ); - } - - const FIRST_PAINT = 'first-paint'; - const FIRST_CONTENTFUL_PAINT = 'first-contentful-paint'; - if (paintTimings) { - const firstPaint = paintTimings.find( - paintObject => paintObject.name === FIRST_PAINT - ); - if (firstPaint && firstPaint.startTime) { - trace.putMetric( - FIRST_PAINT_COUNTER_NAME, - Math.floor(firstPaint.startTime * 1000) - ); - } - const firstContentfulPaint = paintTimings.find( - paintObject => paintObject.name === FIRST_CONTENTFUL_PAINT - ); - if (firstContentfulPaint && firstContentfulPaint.startTime) { - trace.putMetric( - FIRST_CONTENTFUL_PAINT_COUNTER_NAME, - Math.floor(firstContentfulPaint.startTime * 1000) - ); - } - - if (firstInputDelay) { - trace.putMetric( - FIRST_INPUT_DELAY_COUNTER_NAME, - Math.floor(firstInputDelay * 1000) - ); - } - } - - logTrace(trace); - } - - static createUserTimingTrace(measureName: string): void { - const trace = new Trace(measureName, false, measureName); - logTrace(trace); - } -} diff --git a/packages-old/performance/src/services/api_service.test.ts b/packages-old/performance/src/services/api_service.test.ts deleted file mode 100644 index 32ac012ffc3..00000000000 --- a/packages-old/performance/src/services/api_service.test.ts +++ /dev/null @@ -1,113 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { stub } from 'sinon'; -import { expect } from 'chai'; -import { Api, setupApi } from './api_service'; -import '../../test/setup'; -describe('Firebase Performance > api_service', () => { - const PAGE_URL = 'http://www.test.com/abcd?a=2'; - const PERFORMANCE_ENTRY: PerformanceEntry = { - duration: 0, - entryType: 'paint', - name: 'first-contentful-paint', - startTime: 149.01000005193055, - toJSON: () => {} - }; - - const mockWindow = { ...self }; - // hack for IE11. self.hasOwnProperty('performance') returns false in IE11 - mockWindow.performance = self.performance; - - let api: Api; - - beforeEach(() => { - stub(mockWindow.performance, 'mark'); - stub(mockWindow.performance, 'measure'); - stub(mockWindow.performance, 'getEntriesByType').returns([ - PERFORMANCE_ENTRY - ]); - stub(mockWindow.performance, 'getEntriesByName').returns([ - PERFORMANCE_ENTRY - ]); - // This is to make sure the test page is not changed by changing the href of location object. - mockWindow.location = { ...self.location, href: PAGE_URL }; - - setupApi(mockWindow); - api = Api.getInstance(); - }); - - describe('getUrl', () => { - it('removes the query params', () => { - expect(api.getUrl()).to.equal('http://www.test.com/abcd'); - }); - }); - - describe('mark', () => { - it('creates performance mark', () => { - const MARK_NAME = 'mark1'; - api.mark(MARK_NAME); - - expect(mockWindow.performance.mark).to.be.calledOnceWith(MARK_NAME); - }); - }); - - describe('measure', () => { - it('creates a performance measure', () => { - const MEASURE_NAME = 'measure1'; - const MARK_1_NAME = 'mark1'; - const MARK_2_NAME = 'mark2'; - api.measure(MEASURE_NAME, MARK_1_NAME, MARK_2_NAME); - - expect(mockWindow.performance.measure).to.be.calledOnceWith( - MEASURE_NAME, - MARK_1_NAME, - MARK_2_NAME - ); - }); - }); - - describe('getEntriesByType', () => { - it('calls the underlying performance api', () => { - expect(api.getEntriesByType('paint')).to.deep.equal([PERFORMANCE_ENTRY]); - }); - - it('does not throw if the browser does not include underlying api', () => { - api = new Api(({ performance: undefined } as unknown) as Window); - - expect(() => { - api.getEntriesByType('paint'); - }).to.not.throw(); - expect(api.getEntriesByType('paint')).to.deep.equal([]); - }); - }); - - describe('getEntriesByName', () => { - it('calls the underlying performance api', () => { - expect(api.getEntriesByName('paint')).to.deep.equal([PERFORMANCE_ENTRY]); - }); - - it('does not throw if the browser does not include underlying api', () => { - api = new Api(({ performance: undefined } as any) as Window); - - expect(() => { - api.getEntriesByName('paint'); - }).to.not.throw(); - expect(api.getEntriesByName('paint')).to.deep.equal([]); - }); - }); -}); diff --git a/packages-old/performance/src/services/api_service.ts b/packages-old/performance/src/services/api_service.ts deleted file mode 100644 index df719e8fb16..00000000000 --- a/packages-old/performance/src/services/api_service.ts +++ /dev/null @@ -1,163 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { ERROR_FACTORY, ErrorCode } from '../utils/errors'; -import { isIndexedDBAvailable } from '@firebase/util'; -import { consoleLogger } from '../utils/console_logger'; -declare global { - interface Window { - PerformanceObserver: typeof PerformanceObserver; - // eslint-disable-next-line @typescript-eslint/ban-types - perfMetrics?: { onFirstInputDelay: Function }; - } -} - -let apiInstance: Api | undefined; -let windowInstance: Window | undefined; - -export type EntryType = - | 'mark' - | 'measure' - | 'paint' - | 'resource' - | 'frame' - | 'navigation'; - -/** - * This class holds a reference to various browser related objects injected by - * set methods. - */ -export class Api { - private readonly performance: Performance; - /** PreformanceObserver constructor function. */ - private readonly PerformanceObserver: typeof PerformanceObserver; - private readonly windowLocation: Location; - // eslint-disable-next-line @typescript-eslint/ban-types - readonly onFirstInputDelay?: Function; - readonly localStorage?: Storage; - readonly document: Document; - readonly navigator: Navigator; - - constructor(readonly window?: Window) { - if (!window) { - throw ERROR_FACTORY.create(ErrorCode.NO_WINDOW); - } - this.performance = window.performance; - this.PerformanceObserver = window.PerformanceObserver; - this.windowLocation = window.location; - this.navigator = window.navigator; - this.document = window.document; - if (this.navigator && this.navigator.cookieEnabled) { - // If user blocks cookies on the browser, accessing localStorage will - // throw an exception. - this.localStorage = window.localStorage; - } - if (window.perfMetrics && window.perfMetrics.onFirstInputDelay) { - this.onFirstInputDelay = window.perfMetrics.onFirstInputDelay; - } - } - - getUrl(): string { - // Do not capture the string query part of url. - return this.windowLocation.href.split('?')[0]; - } - - mark(name: string): void { - if (!this.performance || !this.performance.mark) { - return; - } - this.performance.mark(name); - } - - measure(measureName: string, mark1: string, mark2: string): void { - if (!this.performance || !this.performance.measure) { - return; - } - this.performance.measure(measureName, mark1, mark2); - } - - getEntriesByType(type: EntryType): PerformanceEntry[] { - if (!this.performance || !this.performance.getEntriesByType) { - return []; - } - return this.performance.getEntriesByType(type); - } - - getEntriesByName(name: string): PerformanceEntry[] { - if (!this.performance || !this.performance.getEntriesByName) { - return []; - } - return this.performance.getEntriesByName(name); - } - - getTimeOrigin(): number { - // Polyfill the time origin with performance.timing.navigationStart. - return ( - this.performance && - (this.performance.timeOrigin || this.performance.timing.navigationStart) - ); - } - - requiredApisAvailable(): boolean { - if ( - !fetch || - !Promise || - !this.navigator || - !this.navigator.cookieEnabled - ) { - consoleLogger.info( - 'Firebase Performance cannot start if browser does not support fetch and Promise or cookie is disabled.' - ); - return false; - } - - if (!isIndexedDBAvailable()) { - consoleLogger.info('IndexedDB is not supported by current browswer'); - return false; - } - return true; - } - - setupObserver( - entryType: EntryType, - callback: (entry: PerformanceEntry) => void - ): void { - if (!this.PerformanceObserver) { - return; - } - const observer = new this.PerformanceObserver(list => { - for (const entry of list.getEntries()) { - // `entry` is a PerformanceEntry instance. - callback(entry); - } - }); - - // Start observing the entry types you care about. - observer.observe({ entryTypes: [entryType] }); - } - - static getInstance(): Api { - if (apiInstance === undefined) { - apiInstance = new Api(windowInstance); - } - return apiInstance; - } -} - -export function setupApi(window: Window): void { - windowInstance = window; -} diff --git a/packages-old/performance/src/services/iid_service.test.ts b/packages-old/performance/src/services/iid_service.test.ts deleted file mode 100644 index 3a768744fa4..00000000000 --- a/packages-old/performance/src/services/iid_service.test.ts +++ /dev/null @@ -1,60 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { stub } from 'sinon'; -import { expect } from 'chai'; -import { SettingsService } from './settings_service'; -import { - getIid, - getIidPromise, - getAuthenticationToken, - getAuthTokenPromise -} from './iid_service'; -import '../../test/setup'; -import { FirebaseInstallations } from '@firebase/installations-types'; - -describe('Firebase Perofmrance > iid_service', () => { - const IID = 'fid'; - const AUTH_TOKEN = 'authToken'; - - before(() => { - const getId = stub().resolves(IID); - const getToken = stub().resolves(AUTH_TOKEN); - SettingsService.prototype.installationsService = ({ - getId, - getToken - } as unknown) as FirebaseInstallations; - }); - - describe('getIidPromise', () => { - it('provides iid', async () => { - const iid = await getIidPromise(); - - expect(iid).to.be.equal(IID); - expect(getIid()).to.be.equal(IID); - }); - }); - - describe('getAuthTokenPromise', () => { - it('provides authentication token', async () => { - const token = await getAuthTokenPromise(); - - expect(token).to.be.equal(AUTH_TOKEN); - expect(getAuthenticationToken()).to.be.equal(AUTH_TOKEN); - }); - }); -}); diff --git a/packages-old/performance/src/services/iid_service.ts b/packages-old/performance/src/services/iid_service.ts deleted file mode 100644 index 5213900ba47..00000000000 --- a/packages-old/performance/src/services/iid_service.ts +++ /dev/null @@ -1,47 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import { SettingsService } from './settings_service'; - -let iid: string | undefined; -let authToken: string | undefined; - -export function getIidPromise(): Promise { - const iidPromise = SettingsService.getInstance().installationsService.getId(); - // eslint-disable-next-line @typescript-eslint/no-floating-promises - iidPromise.then((iidVal: string) => { - iid = iidVal; - }); - return iidPromise; -} - -// This method should be used after the iid is retrieved by getIidPromise method. -export function getIid(): string | undefined { - return iid; -} - -export function getAuthTokenPromise(): Promise { - const authTokenPromise = SettingsService.getInstance().installationsService.getToken(); - // eslint-disable-next-line @typescript-eslint/no-floating-promises - authTokenPromise.then((authTokenVal: string) => { - authToken = authTokenVal; - }); - return authTokenPromise; -} - -export function getAuthenticationToken(): string | undefined { - return authToken; -} diff --git a/packages-old/performance/src/services/initialization_service.test.ts b/packages-old/performance/src/services/initialization_service.test.ts deleted file mode 100644 index 832081bdc3c..00000000000 --- a/packages-old/performance/src/services/initialization_service.test.ts +++ /dev/null @@ -1,65 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { stub } from 'sinon'; -import { expect } from 'chai'; -import { - getInitializationPromise, - isPerfInitialized -} from './initialization_service'; -import { setupApi } from './api_service'; -import { SettingsService } from './settings_service'; -import { FirebaseApp } from '@firebase/app-types'; -import '../../test/setup'; - -describe('Firebase Perofmrance > initialization_service', () => { - const IID = 'fid'; - const AUTH_TOKEN = 'authToken'; - const getId = stub(); - const getToken = stub(); - - const mockWindow = { ...self }; - mockWindow.document = { ...mockWindow.document, readyState: 'complete' }; - - beforeEach(() => { - SettingsService.prototype.firebaseAppInstance = ({ - installations: () => ({ getId, getToken }) - } as unknown) as FirebaseApp; - - stub(self, 'fetch').resolves(new Response('{}')); - mockWindow.localStorage = { ...mockWindow.localStorage, setItem: stub() }; - - setupApi(mockWindow); - }); - - it('changes initialization status after initialization is done', async () => { - getId.resolves(IID); - getToken.resolves(AUTH_TOKEN); - await getInitializationPromise(); - - expect(isPerfInitialized()).to.be.true; - }); - - it('returns initilization as not done before promise is resolved', async () => { - getId.resolves(IID); - getToken.resolves(AUTH_TOKEN); - // eslint-disable-next-line @typescript-eslint/no-floating-promises - getInitializationPromise(); - - expect(isPerfInitialized()).to.be.false; - }); -}); diff --git a/packages-old/performance/src/services/initialization_service.ts b/packages-old/performance/src/services/initialization_service.ts deleted file mode 100644 index 96226867122..00000000000 --- a/packages-old/performance/src/services/initialization_service.ts +++ /dev/null @@ -1,77 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { getIidPromise } from './iid_service'; -import { getConfig } from './remote_config_service'; -import { Api } from './api_service'; - -const enum InitializationStatus { - notInitialized = 1, - initializationPending, - initialized -} - -let initializationStatus = InitializationStatus.notInitialized; - -let initializationPromise: Promise | undefined; - -export function getInitializationPromise(): Promise { - initializationStatus = InitializationStatus.initializationPending; - - initializationPromise = initializationPromise || initializePerf(); - - return initializationPromise; -} - -export function isPerfInitialized(): boolean { - return initializationStatus === InitializationStatus.initialized; -} - -function initializePerf(): Promise { - return getDocumentReadyComplete() - .then(() => getIidPromise()) - .then(iid => getConfig(iid)) - .then( - () => changeInitializationStatus(), - () => changeInitializationStatus() - ); -} - -/** - * Returns a promise which resolves whenever the document readystate is complete or - * immediately if it is called after page load complete. - */ -function getDocumentReadyComplete(): Promise { - const document = Api.getInstance().document; - return new Promise(resolve => { - if (document && document.readyState !== 'complete') { - const handler = (): void => { - if (document.readyState === 'complete') { - document.removeEventListener('readystatechange', handler); - resolve(); - } - }; - document.addEventListener('readystatechange', handler); - } else { - resolve(); - } - }); -} - -function changeInitializationStatus(): void { - initializationStatus = InitializationStatus.initialized; -} diff --git a/packages-old/performance/src/services/oob_resources_service.test.ts b/packages-old/performance/src/services/oob_resources_service.test.ts deleted file mode 100644 index 9534d7aa087..00000000000 --- a/packages-old/performance/src/services/oob_resources_service.test.ts +++ /dev/null @@ -1,199 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { - spy, - stub, - SinonSpy, - SinonStub, - useFakeTimers, - SinonFakeTimers -} from 'sinon'; -import { expect } from 'chai'; -import { Api, setupApi, EntryType } from './api_service'; -import * as iidService from './iid_service'; -import { setupOobResources } from './oob_resources_service'; -import { createNetworkRequestEntry } from '../resources/network_request'; -import { Trace } from '../resources/trace'; -import '../../test/setup'; - -describe('Firebase Performance > oob_resources_service', () => { - const MOCK_ID = 'idasdfsffe'; - - const NAVIGATION_PERFORMANCE_ENTRY: PerformanceNavigationTiming = { - connectEnd: 2.9499998781830072, - connectStart: 2.9499998781830072, - decodedBodySize: 1519, - domComplete: 186.48499995470047, - domContentLoadedEventEnd: 64.0499999281019, - domContentLoadedEventStart: 62.440000008791685, - domInteractive: 62.42000008933246, - domainLookupEnd: 2.9499998781830072, - domainLookupStart: 2.9499998781830072, - duration: 187.7349999267608, - encodedBodySize: 732, - entryType: 'navigation', - fetchStart: 2.9499998781830072, - initiatorType: 'navigation', - loadEventEnd: 187.7349999267608, - loadEventStart: 187.72999988868833, - name: 'https://test.firebase.com/', - nextHopProtocol: 'h2', - redirectCount: 0, - redirectEnd: 0, - redirectStart: 0, - requestStart: 5.034999921917915, - responseEnd: 9.305000072345138, - responseStart: 8.940000087022781, - secureConnectionStart: 0, - startTime: 0, - transferSize: 1259, - type: 'reload', - unloadEventEnd: 14.870000071823597, - unloadEventStart: 14.870000071823597, - workerStart: 0, - toJSON: () => {} - }; - - const PAINT_PERFORMANCE_ENTRY: PerformanceEntry = { - duration: 0, - entryType: 'paint', - name: 'first-contentful-paint', - startTime: 122.18499998562038, - toJSON: () => {} - }; - - let getIidStub: SinonStub<[], string | undefined>; - let apiGetInstanceSpy: SinonSpy<[], Api>; - let getEntriesByTypeStub: SinonStub<[EntryType], PerformanceEntry[]>; - let setupObserverStub: SinonStub< - [EntryType, (entry: PerformanceEntry) => void], - void - >; - let createOobTraceStub: SinonStub< - [PerformanceNavigationTiming[], PerformanceEntry[], (number | undefined)?], - void - >; - let clock: SinonFakeTimers; - - setupApi(self); - - beforeEach(() => { - getIidStub = stub(iidService, 'getIid'); - apiGetInstanceSpy = spy(Api, 'getInstance'); - clock = useFakeTimers(); - getEntriesByTypeStub = stub(Api.prototype, 'getEntriesByType').callsFake( - entry => { - if (entry === 'navigation') { - return [NAVIGATION_PERFORMANCE_ENTRY]; - } - return [PAINT_PERFORMANCE_ENTRY]; - } - ); - setupObserverStub = stub(Api.prototype, 'setupObserver'); - createOobTraceStub = stub(Trace, 'createOobTrace'); - }); - - afterEach(() => { - clock.restore(); - }); - - describe('setupOobResources', () => { - it('does not start if there is no iid', () => { - getIidStub.returns(undefined); - setupOobResources(); - - expect(apiGetInstanceSpy).not.to.be.called; - }); - - it('sets up network request collection', () => { - getIidStub.returns(MOCK_ID); - setupOobResources(); - clock.tick(1); - - expect(apiGetInstanceSpy).to.be.called; - expect(getEntriesByTypeStub).to.be.calledWith('resource'); - expect(setupObserverStub).to.be.calledWithExactly( - 'resource', - createNetworkRequestEntry - ); - }); - - it('sets up page load trace collection', () => { - getIidStub.returns(MOCK_ID); - setupOobResources(); - clock.tick(1); - - expect(apiGetInstanceSpy).to.be.called; - expect(getEntriesByTypeStub).to.be.calledWith('navigation'); - expect(getEntriesByTypeStub).to.be.calledWith('paint'); - expect(createOobTraceStub).to.be.calledWithExactly( - [NAVIGATION_PERFORMANCE_ENTRY], - [PAINT_PERFORMANCE_ENTRY] - ); - }); - - it('waits for first input delay if polyfill is available', () => { - getIidStub.returns(MOCK_ID); - const api = Api.getInstance(); - //@ts-ignore Assignment to read-only property. - api.onFirstInputDelay = stub(); - setupOobResources(); - clock.tick(1); - - expect(api.onFirstInputDelay).to.be.called; - expect(createOobTraceStub).not.to.be.called; - clock.tick(5000); - expect(createOobTraceStub).to.be.calledWithExactly( - [NAVIGATION_PERFORMANCE_ENTRY], - [PAINT_PERFORMANCE_ENTRY] - ); - }); - - it('logs first input delay if polyfill is available and callback is called', () => { - getIidStub.returns(MOCK_ID); - const api = Api.getInstance(); - const FIRST_INPUT_DELAY = 123; - // Underscore is to avoid compiler comlaining about variable being declared but not used. - type FirstInputDelayCallback = (firstInputDelay: number) => void; - let firstInputDelayCallback: FirstInputDelayCallback = (): void => {}; - //@ts-ignore Assignment to read-only property. - api.onFirstInputDelay = (cb: FirstInputDelayCallback) => { - firstInputDelayCallback = cb; - }; - setupOobResources(); - clock.tick(1); - firstInputDelayCallback(FIRST_INPUT_DELAY); - - expect(createOobTraceStub).to.be.calledWithExactly( - [NAVIGATION_PERFORMANCE_ENTRY], - [PAINT_PERFORMANCE_ENTRY], - FIRST_INPUT_DELAY - ); - }); - - it('sets up user timing traces', () => { - getIidStub.returns(MOCK_ID); - setupOobResources(); - clock.tick(1); - - expect(apiGetInstanceSpy).to.be.called; - expect(getEntriesByTypeStub).to.be.calledWith('measure'); - expect(setupObserverStub).to.be.calledWith('measure'); - }); - }); -}); diff --git a/packages-old/performance/src/services/oob_resources_service.ts b/packages-old/performance/src/services/oob_resources_service.ts deleted file mode 100644 index 0e01236903e..00000000000 --- a/packages-old/performance/src/services/oob_resources_service.ts +++ /dev/null @@ -1,93 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import { Api } from './api_service'; -import { Trace } from '../resources/trace'; -import { createNetworkRequestEntry } from '../resources/network_request'; -import { TRACE_MEASURE_PREFIX } from '../constants'; -import { getIid } from './iid_service'; - -const FID_WAIT_TIME_MS = 5000; - -export function setupOobResources(): void { - // Do not initialize unless iid is available. - if (!getIid()) { - return; - } - // The load event might not have fired yet, and that means performance navigation timing - // object has a duration of 0. The setup should run after all current tasks in js queue. - setTimeout(() => setupOobTraces(), 0); - setTimeout(() => setupNetworkRequests(), 0); - setTimeout(() => setupUserTimingTraces(), 0); -} - -function setupNetworkRequests(): void { - const api = Api.getInstance(); - const resources = api.getEntriesByType('resource'); - for (const resource of resources) { - createNetworkRequestEntry(resource); - } - api.setupObserver('resource', createNetworkRequestEntry); -} - -function setupOobTraces(): void { - const api = Api.getInstance(); - const navigationTimings = api.getEntriesByType( - 'navigation' - ) as PerformanceNavigationTiming[]; - const paintTimings = api.getEntriesByType('paint'); - // If First Input Desly polyfill is added to the page, report the fid value. - // https://github.com/GoogleChromeLabs/first-input-delay - if (api.onFirstInputDelay) { - // If the fid call back is not called for certain time, continue without it. - // eslint-disable-next-line @typescript-eslint/no-explicit-any - let timeoutId: any = setTimeout(() => { - Trace.createOobTrace(navigationTimings, paintTimings); - timeoutId = undefined; - }, FID_WAIT_TIME_MS); - api.onFirstInputDelay((fid: number) => { - if (timeoutId) { - clearTimeout(timeoutId); - Trace.createOobTrace(navigationTimings, paintTimings, fid); - } - }); - } else { - Trace.createOobTrace(navigationTimings, paintTimings); - } -} - -function setupUserTimingTraces(): void { - const api = Api.getInstance(); - // Run through the measure performance entries collected up to this point. - const measures = api.getEntriesByType('measure'); - for (const measure of measures) { - createUserTimingTrace(measure); - } - // Setup an observer to capture the measures from this point on. - api.setupObserver('measure', createUserTimingTrace); -} - -function createUserTimingTrace(measure: PerformanceEntry): void { - const measureName = measure.name; - // Do not create a trace, if the user timing marks and measures are created by the sdk itself. - if ( - measureName.substring(0, TRACE_MEASURE_PREFIX.length) === - TRACE_MEASURE_PREFIX - ) { - return; - } - Trace.createUserTimingTrace(measureName); -} diff --git a/packages-old/performance/src/services/perf_logger.test.ts b/packages-old/performance/src/services/perf_logger.test.ts deleted file mode 100644 index e11ec7a3d34..00000000000 --- a/packages-old/performance/src/services/perf_logger.test.ts +++ /dev/null @@ -1,413 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { stub, SinonStub, useFakeTimers, SinonFakeTimers } from 'sinon'; -import { Trace } from '../resources/trace'; -import * as transportService from './transport_service'; -import * as iidService from './iid_service'; -import { expect } from 'chai'; -import { Api, setupApi } from './api_service'; -import { SettingsService } from './settings_service'; -import { FirebaseApp } from '@firebase/app-types'; -import * as initializationService from './initialization_service'; -import { SDK_VERSION } from '../constants'; -import * as attributeUtils from '../utils/attributes_utils'; -import { createNetworkRequestEntry } from '../resources/network_request'; -import '../../test/setup'; -import { mergeStrings } from '../utils/string_merger'; - -describe('Performance Monitoring > perf_logger', () => { - const IID = 'idasdfsffe'; - const PAGE_URL = 'http://mock-page.com'; - const APP_ID = '1:123:web:2er'; - const VISIBILITY_STATE = 3; - const EFFECTIVE_CONNECTION_TYPE = 2; - const SERVICE_WORKER_STATUS = 3; - const TIME_ORIGIN = 1556512199893.9033; - const TRACE_NAME = 'testTrace'; - const START_TIME = 12345; - const DURATION = 321; - // Perf event header which is constant across tests in this file. - const WEBAPP_INFO = `"application_info":{"google_app_id":"${APP_ID}",\ -"app_instance_id":"${IID}","web_app_info":{"sdk_version":"${SDK_VERSION}",\ -"page_url":"${PAGE_URL}","service_worker_status":${SERVICE_WORKER_STATUS},\ -"visibility_state":${VISIBILITY_STATE},"effective_connection_type":${EFFECTIVE_CONNECTION_TYPE}},\ -"application_process_state":0}`; - - let addToQueueStub: SinonStub< - Array<{ message: string; eventTime: number }>, - void - >; - let getIidStub: SinonStub<[], string | undefined>; - let clock: SinonFakeTimers; - - function mockTransportHandler( - serializer: (...args: any[]) => string - ): (...args: any[]) => void { - return (...args) => { - const message = serializer(...args); - addToQueueStub({ - message, - eventTime: Date.now() - }); - }; - } - - setupApi(self); - - beforeEach(() => { - getIidStub = stub(iidService, 'getIid'); - addToQueueStub = stub(); - stub(transportService, 'transportHandler').callsFake(mockTransportHandler); - stub(Api.prototype, 'getUrl').returns(PAGE_URL); - stub(Api.prototype, 'getTimeOrigin').returns(TIME_ORIGIN); - stub(attributeUtils, 'getEffectiveConnectionType').returns( - EFFECTIVE_CONNECTION_TYPE - ); - stub(attributeUtils, 'getServiceWorkerStatus').returns( - SERVICE_WORKER_STATUS - ); - SettingsService.prototype.firebaseAppInstance = ({ - options: { appId: APP_ID } - } as unknown) as FirebaseApp; - clock = useFakeTimers(); - }); - - describe('logTrace', () => { - it('will not drop custom events sent before initialization finishes', async () => { - getIidStub.returns(IID); - stub(attributeUtils, 'getVisibilityState').returns(VISIBILITY_STATE); - stub(initializationService, 'isPerfInitialized').returns(false); - - // Simulates logging being enabled after initialization completes. - const initializationPromise = Promise.resolve().then(() => { - SettingsService.getInstance().loggingEnabled = true; - SettingsService.getInstance().logTraceAfterSampling = true; - }); - stub(initializationService, 'getInitializationPromise').returns( - initializationPromise - ); - - const trace = new Trace(TRACE_NAME); - trace.record(START_TIME, DURATION); - await initializationPromise.then(() => { - clock.tick(1); - }); - - expect(addToQueueStub).to.be.called; - }); - - it('creates, serializes and sends a trace to transport service', () => { - const EXPECTED_TRACE_MESSAGE = - `{` + - WEBAPP_INFO + - `,"trace_metric":{"name":"${TRACE_NAME}","is_auto":false,\ -"client_start_time_us":${START_TIME * 1000},"duration_us":${DURATION * 1000},\ -"counters":{"counter1":3},"custom_attributes":{"attr":"val"}}}`; - getIidStub.returns(IID); - stub(attributeUtils, 'getVisibilityState').returns(VISIBILITY_STATE); - stub(initializationService, 'isPerfInitialized').returns(true); - SettingsService.getInstance().loggingEnabled = true; - SettingsService.getInstance().logTraceAfterSampling = true; - const trace = new Trace(TRACE_NAME); - trace.putAttribute('attr', 'val'); - trace.putMetric('counter1', 3); - trace.record(START_TIME, DURATION); - clock.tick(1); - - expect(addToQueueStub).to.be.called; - expect(addToQueueStub.getCall(0).args[0].message).to.be.equal( - EXPECTED_TRACE_MESSAGE - ); - }); - - it('does not log an event if cookies are disabled in the browser', () => { - stub(Api.prototype, 'requiredApisAvailable').returns(false); - stub(attributeUtils, 'getVisibilityState').returns(VISIBILITY_STATE); - stub(initializationService, 'isPerfInitialized').returns(true); - const trace = new Trace(TRACE_NAME); - trace.record(START_TIME, DURATION); - clock.tick(1); - - expect(addToQueueStub).not.to.be.called; - }); - - it('ascertains that the max number of customMetric allowed is 32', () => { - const EXPECTED_TRACE_MESSAGE = - `{` + - WEBAPP_INFO + - `,"trace_metric":{"name":"${TRACE_NAME}","is_auto":false,\ -"client_start_time_us":${START_TIME * 1000},"duration_us":${DURATION * 1000},\ -"counters":{"counter1":1,"counter2":2,"counter3":3,"counter4":4,"counter5":5,"counter6":6,\ -"counter7":7,"counter8":8,"counter9":9,"counter10":10,"counter11":11,"counter12":12,\ -"counter13":13,"counter14":14,"counter15":15,"counter16":16,"counter17":17,"counter18":18,\ -"counter19":19,"counter20":20,"counter21":21,"counter22":22,"counter23":23,"counter24":24,\ -"counter25":25,"counter26":26,"counter27":27,"counter28":28,"counter29":29,"counter30":30,\ -"counter31":31,"counter32":32}}}`; - getIidStub.returns(IID); - stub(attributeUtils, 'getVisibilityState').returns(VISIBILITY_STATE); - stub(initializationService, 'isPerfInitialized').returns(true); - SettingsService.getInstance().loggingEnabled = true; - SettingsService.getInstance().logTraceAfterSampling = true; - const trace = new Trace(TRACE_NAME); - for (let i = 1; i <= 32; i++) { - trace.putMetric('counter' + i, i); - } - trace.record(START_TIME, DURATION); - clock.tick(1); - - expect(addToQueueStub).to.be.called; - expect(addToQueueStub.getCall(0).args[0].message).to.be.equal( - EXPECTED_TRACE_MESSAGE - ); - }); - - it('ascertains that the max number of custom attributes allowed is 5', () => { - const EXPECTED_TRACE_MESSAGE = - `{` + - WEBAPP_INFO + - `,"trace_metric":{"name":"${TRACE_NAME}","is_auto":false,\ -"client_start_time_us":${START_TIME * 1000},"duration_us":${DURATION * 1000},\ -"custom_attributes":{"attr1":"val1","attr2":"val2","attr3":"val3","attr4":"val4","attr5":"val5"}}}`; - getIidStub.returns(IID); - stub(attributeUtils, 'getVisibilityState').returns(VISIBILITY_STATE); - stub(initializationService, 'isPerfInitialized').returns(true); - SettingsService.getInstance().loggingEnabled = true; - SettingsService.getInstance().logTraceAfterSampling = true; - const trace = new Trace(TRACE_NAME); - for (let i = 1; i <= 5; i++) { - trace.putAttribute('attr' + i, 'val' + i); - } - trace.record(START_TIME, DURATION); - clock.tick(1); - - expect(addToQueueStub).to.be.called; - expect(addToQueueStub.getCall(0).args[0].message).to.be.equal( - EXPECTED_TRACE_MESSAGE - ); - }); - }); - - describe('logPageLoadTrace', () => { - it('creates, serializes and sends a page load trace to cc service', () => { - const flooredStartTime = Math.floor(TIME_ORIGIN * 1000); - const EXPECTED_TRACE_MESSAGE = `{"application_info":{"google_app_id":"${APP_ID}",\ -"app_instance_id":"${IID}","web_app_info":{"sdk_version":"${SDK_VERSION}",\ -"page_url":"${PAGE_URL}","service_worker_status":${SERVICE_WORKER_STATUS},\ -"visibility_state":${ - attributeUtils.VisibilityState.VISIBLE - },"effective_connection_type":${EFFECTIVE_CONNECTION_TYPE}},\ -"application_process_state":0},"trace_metric":{"name":"_wt_${PAGE_URL}","is_auto":true,\ -"client_start_time_us":${flooredStartTime},"duration_us":${DURATION * 1000},\ -"counters":{"domInteractive":10000,"domContentLoadedEventEnd":20000,"loadEventEnd":10000,\ -"_fp":40000,"_fcp":50000,"_fid":90000}}}`; - stub(initializationService, 'isPerfInitialized').returns(true); - getIidStub.returns(IID); - SettingsService.getInstance().loggingEnabled = true; - SettingsService.getInstance().logTraceAfterSampling = true; - - stub(attributeUtils, 'getVisibilityState').returns( - attributeUtils.VisibilityState.VISIBLE - ); - - const navigationTiming: PerformanceNavigationTiming = { - domComplete: 100, - domContentLoadedEventEnd: 20, - domContentLoadedEventStart: 10, - domInteractive: 10, - loadEventEnd: 10, - loadEventStart: 10, - redirectCount: 10, - type: 'navigate', - unloadEventEnd: 10, - unloadEventStart: 10, - duration: DURATION - } as PerformanceNavigationTiming; - - const navigationTimings: PerformanceNavigationTiming[] = [ - navigationTiming - ]; - - const firstPaint: PerformanceEntry = { - name: 'first-paint', - startTime: 40, - duration: 100, - entryType: 'url', - toJSON() {} - }; - - const firstContentfulPaint: PerformanceEntry = { - name: 'first-contentful-paint', - startTime: 50, - duration: 100, - entryType: 'url', - toJSON() {} - }; - - const paintTimings: PerformanceEntry[] = [ - firstPaint, - firstContentfulPaint - ]; - - Trace.createOobTrace(navigationTimings, paintTimings, 90); - clock.tick(1); - - expect(addToQueueStub).to.be.called; - expect(addToQueueStub.getCall(0).args[0].message).to.be.equal( - EXPECTED_TRACE_MESSAGE - ); - }); - }); - - describe('logNetworkRequest', () => { - it('creates, serializes and sends a network request to transport service', () => { - const RESOURCE_PERFORMANCE_ENTRY: PerformanceResourceTiming = { - connectEnd: 0, - connectStart: 0, - decodedBodySize: 0, - domainLookupEnd: 0, - domainLookupStart: 0, - duration: 39.610000094398856, - encodedBodySize: 0, - entryType: 'resource', - fetchStart: 5645.689999917522, - initiatorType: 'fetch', - name: 'https://test.com/abc', - nextHopProtocol: 'http/2+quic/43', - redirectEnd: 0, - redirectStart: 0, - requestStart: 0, - responseEnd: 5685.300000011921, - responseStart: 0, - secureConnectionStart: 0, - startTime: 5645.689999917522, - transferSize: 0, - workerStart: 0, - toJSON: () => {} - }; - const START_TIME = Math.floor( - (TIME_ORIGIN + RESOURCE_PERFORMANCE_ENTRY.startTime) * 1000 - ); - const TIME_TO_RESPONSE_COMPLETED = Math.floor( - (RESOURCE_PERFORMANCE_ENTRY.responseEnd - - RESOURCE_PERFORMANCE_ENTRY.startTime) * - 1000 - ); - const EXPECTED_NETWORK_MESSAGE = - `{` + - WEBAPP_INFO + - `,\ -"network_request_metric":{"url":"${RESOURCE_PERFORMANCE_ENTRY.name}",\ -"http_method":0,"http_response_code":200,\ -"response_payload_bytes":${RESOURCE_PERFORMANCE_ENTRY.transferSize},\ -"client_start_time_us":${START_TIME},\ -"time_to_response_completed_us":${TIME_TO_RESPONSE_COMPLETED}}}`; - stub(initializationService, 'isPerfInitialized').returns(true); - getIidStub.returns(IID); - stub(attributeUtils, 'getVisibilityState').returns(VISIBILITY_STATE); - SettingsService.getInstance().loggingEnabled = true; - SettingsService.getInstance().logNetworkAfterSampling = true; - // Calls logNetworkRequest under the hood. - createNetworkRequestEntry(RESOURCE_PERFORMANCE_ENTRY); - clock.tick(1); - - expect(addToQueueStub).to.be.called; - expect(addToQueueStub.getCall(0).args[0].message).to.be.equal( - EXPECTED_NETWORK_MESSAGE - ); - }); - - // Performance SDK doesn't instrument requests sent from SDK itself, therefore blacklist - // requests sent to cc endpoint. - it('skips performance collection if domain is cc', () => { - const CC_NETWORK_PERFORMANCE_ENTRY: PerformanceResourceTiming = { - connectEnd: 0, - connectStart: 0, - decodedBodySize: 0, - domainLookupEnd: 0, - domainLookupStart: 0, - duration: 39.610000094398856, - encodedBodySize: 0, - entryType: 'resource', - fetchStart: 5645.689999917522, - initiatorType: 'fetch', - name: 'https://firebaselogging.googleapis.com/v0cc/log?message=a', - nextHopProtocol: 'http/2+quic/43', - redirectEnd: 0, - redirectStart: 0, - requestStart: 0, - responseEnd: 5685.300000011921, - responseStart: 0, - secureConnectionStart: 0, - startTime: 5645.689999917522, - transferSize: 0, - workerStart: 0, - toJSON: () => {} - }; - stub(initializationService, 'isPerfInitialized').returns(true); - getIidStub.returns(IID); - SettingsService.getInstance().loggingEnabled = true; - SettingsService.getInstance().logNetworkAfterSampling = true; - // Calls logNetworkRequest under the hood. - createNetworkRequestEntry(CC_NETWORK_PERFORMANCE_ENTRY); - clock.tick(1); - - expect(addToQueueStub).not.called; - }); - - // Performance SDK doesn't instrument requests sent from SDK itself, therefore blacklist - // requests sent to fl endpoint. - it('skips performance collection if domain is fl', () => { - const FL_NETWORK_PERFORMANCE_ENTRY: PerformanceResourceTiming = { - connectEnd: 0, - connectStart: 0, - decodedBodySize: 0, - domainLookupEnd: 0, - domainLookupStart: 0, - duration: 39.610000094398856, - encodedBodySize: 0, - entryType: 'resource', - fetchStart: 5645.689999917522, - initiatorType: 'fetch', - name: mergeStrings( - 'hts/frbslgigp.ogepscmv/ieo/eaylg', - 'tp:/ieaeogn-agolai.o/1frlglgc/o' - ), - nextHopProtocol: 'http/2+quic/43', - redirectEnd: 0, - redirectStart: 0, - requestStart: 0, - responseEnd: 5685.300000011921, - responseStart: 0, - secureConnectionStart: 0, - startTime: 5645.689999917522, - transferSize: 0, - workerStart: 0, - toJSON: () => {} - }; - stub(initializationService, 'isPerfInitialized').returns(true); - getIidStub.returns(IID); - SettingsService.getInstance().loggingEnabled = true; - SettingsService.getInstance().logNetworkAfterSampling = true; - // Calls logNetworkRequest under the hood. - createNetworkRequestEntry(FL_NETWORK_PERFORMANCE_ENTRY); - clock.tick(1); - - expect(addToQueueStub).not.called; - }); - }); -}); diff --git a/packages-old/performance/src/services/perf_logger.ts b/packages-old/performance/src/services/perf_logger.ts deleted file mode 100644 index 8c9053bdfea..00000000000 --- a/packages-old/performance/src/services/perf_logger.ts +++ /dev/null @@ -1,247 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { getIid } from './iid_service'; -import { NetworkRequest } from '../resources/network_request'; -import { Trace } from '../resources/trace'; -import { Api } from './api_service'; -import { SettingsService } from './settings_service'; -import { - getServiceWorkerStatus, - getVisibilityState, - VisibilityState, - getEffectiveConnectionType -} from '../utils/attributes_utils'; -import { - isPerfInitialized, - getInitializationPromise -} from './initialization_service'; -import { transportHandler } from './transport_service'; -import { SDK_VERSION } from '../constants'; - -const enum ResourceType { - NetworkRequest, - Trace -} - -/* eslint-disable camelcase */ -interface ApplicationInfo { - google_app_id: string; - app_instance_id?: string; - web_app_info: WebAppInfo; - application_process_state: number; -} - -interface WebAppInfo { - sdk_version: string; - page_url: string; - service_worker_status: number; - visibility_state: number; - effective_connection_type: number; -} - -interface PerfNetworkLog { - application_info: ApplicationInfo; - network_request_metric: NetworkRequestMetric; -} - -interface PerfTraceLog { - application_info: ApplicationInfo; - trace_metric: TraceMetric; -} - -interface NetworkRequestMetric { - url: string; - http_method: number; - http_response_code: number; - response_payload_bytes?: number; - client_start_time_us?: number; - time_to_response_initiated_us?: number; - time_to_response_completed_us?: number; -} - -interface TraceMetric { - name: string; - is_auto: boolean; - client_start_time_us: number; - duration_us: number; - counters?: { [key: string]: number }; - custom_attributes?: { [key: string]: string }; -} - -/* eslint-enble camelcase */ - -let logger: ( - resource: NetworkRequest | Trace, - resourceType: ResourceType -) => void | undefined; -// This method is not called before initialization. -function sendLog( - resource: NetworkRequest | Trace, - resourceType: ResourceType -): void { - if (!logger) { - logger = transportHandler(serializer); - } - logger(resource, resourceType); -} - -export function logTrace(trace: Trace): void { - const settingsService = SettingsService.getInstance(); - // Do not log if trace is auto generated and instrumentation is disabled. - if (!settingsService.instrumentationEnabled && trace.isAuto) { - return; - } - // Do not log if trace is custom and data collection is disabled. - if (!settingsService.dataCollectionEnabled && !trace.isAuto) { - return; - } - // Do not log if required apis are not available. - if (!Api.getInstance().requiredApisAvailable()) { - return; - } - - // Only log the page load auto traces if page is visible. - if (trace.isAuto && getVisibilityState() !== VisibilityState.VISIBLE) { - return; - } - - if (isPerfInitialized()) { - sendTraceLog(trace); - } else { - // Custom traces can be used before the initialization but logging - // should wait until after. - - getInitializationPromise().then( - () => sendTraceLog(trace), - () => sendTraceLog(trace) - ); - } -} - -function sendTraceLog(trace: Trace): void { - if (!getIid()) { - return; - } - - const settingsService = SettingsService.getInstance(); - if ( - !settingsService.loggingEnabled || - !settingsService.logTraceAfterSampling - ) { - return; - } - - setTimeout(() => sendLog(trace, ResourceType.Trace), 0); -} - -export function logNetworkRequest(networkRequest: NetworkRequest): void { - const settingsService = SettingsService.getInstance(); - // Do not log network requests if instrumentation is disabled. - if (!settingsService.instrumentationEnabled) { - return; - } - - // Do not log the js sdk's call to transport service domain to avoid unnecessary cycle. - // Need to blacklist both old and new endpoints to avoid migration gap. - const networkRequestUrl = networkRequest.url; - - // Blacklist old log endpoint and new transport endpoint. - // Because Performance SDK doesn't instrument requests sent from SDK itself. - const logEndpointUrl = settingsService.logEndPointUrl.split('?')[0]; - const flEndpointUrl = settingsService.flTransportEndpointUrl.split('?')[0]; - if ( - networkRequestUrl === logEndpointUrl || - networkRequestUrl === flEndpointUrl - ) { - return; - } - - if ( - !settingsService.loggingEnabled || - !settingsService.logNetworkAfterSampling - ) { - return; - } - - setTimeout(() => sendLog(networkRequest, ResourceType.NetworkRequest), 0); -} - -function serializer( - resource: NetworkRequest | Trace, - resourceType: ResourceType -): string { - if (resourceType === ResourceType.NetworkRequest) { - return serializeNetworkRequest(resource as NetworkRequest); - } - return serializeTrace(resource as Trace); -} - -function serializeNetworkRequest(networkRequest: NetworkRequest): string { - const networkRequestMetric: NetworkRequestMetric = { - url: networkRequest.url, - http_method: networkRequest.httpMethod || 0, - http_response_code: 200, - response_payload_bytes: networkRequest.responsePayloadBytes, - client_start_time_us: networkRequest.startTimeUs, - time_to_response_initiated_us: networkRequest.timeToResponseInitiatedUs, - time_to_response_completed_us: networkRequest.timeToResponseCompletedUs - }; - const perfMetric: PerfNetworkLog = { - application_info: getApplicationInfo(), - network_request_metric: networkRequestMetric - }; - return JSON.stringify(perfMetric); -} - -function serializeTrace(trace: Trace): string { - const traceMetric: TraceMetric = { - name: trace.name, - is_auto: trace.isAuto, - client_start_time_us: trace.startTimeUs, - duration_us: trace.durationUs - }; - - if (Object.keys(trace.counters).length !== 0) { - traceMetric.counters = trace.counters; - } - const customAttributes = trace.getAttributes(); - if (Object.keys(customAttributes).length !== 0) { - traceMetric.custom_attributes = customAttributes; - } - - const perfMetric: PerfTraceLog = { - application_info: getApplicationInfo(), - trace_metric: traceMetric - }; - return JSON.stringify(perfMetric); -} - -function getApplicationInfo(): ApplicationInfo { - return { - google_app_id: SettingsService.getInstance().getAppId(), - app_instance_id: getIid(), - web_app_info: { - sdk_version: SDK_VERSION, - page_url: Api.getInstance().getUrl(), - service_worker_status: getServiceWorkerStatus(), - visibility_state: getVisibilityState(), - effective_connection_type: getEffectiveConnectionType() - }, - application_process_state: 0 - }; -} diff --git a/packages-old/performance/src/services/remote_config_service.test.ts b/packages-old/performance/src/services/remote_config_service.test.ts deleted file mode 100644 index 7bbcf3722d5..00000000000 --- a/packages-old/performance/src/services/remote_config_service.test.ts +++ /dev/null @@ -1,274 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import { stub, useFakeTimers, SinonFakeTimers, SinonStub } from 'sinon'; -import { expect } from 'chai'; -import { SettingsService } from './settings_service'; -import { CONFIG_EXPIRY_LOCAL_STORAGE_KEY } from '../constants'; -import { setupApi, Api } from './api_service'; -import * as iidService from './iid_service'; -import { getConfig } from './remote_config_service'; -import { FirebaseApp } from '@firebase/app-types'; -import '../../test/setup'; - -describe('Performance Monitoring > remote_config_service', () => { - const IID = 'asd123'; - const AUTH_TOKEN = 'auth_token'; - const LOG_URL = 'https://firebaselogging.test.com'; - const TRANSPORT_KEY = 'pseudo-transport-key'; - const LOG_SOURCE = 2; - const NETWORK_SAMPLIG_RATE = 0.25; - const TRACE_SAMPLING_RATE = 0.5; - const GLOBAL_CLOCK_NOW = 1556524895326; - const STRINGIFIED_CONFIG = `{"entries":{"fpr_enabled":"true",\ - "fpr_log_endpoint_url":"https://firebaselogging.test.com",\ - "fpr_log_transport_key":"pseudo-transport-key",\ - "fpr_log_source":"2","fpr_vc_network_request_sampling_rate":"0.250000",\ - "fpr_vc_session_sampling_rate":"0.250000","fpr_vc_trace_sampling_rate":"0.500000"},\ - "state":"UPDATE"}`; - const PROJECT_ID = 'project1'; - const APP_ID = '1:23r:web:fewq'; - const API_KEY = 'asdfghjk'; - const NOT_VALID_CONFIG = 'not a valid config and should not be used'; - - let clock: SinonFakeTimers; - - setupApi(self); - const ApiInstance = Api.getInstance(); - - function storageGetItemFakeFactory( - expiry: string, - config: string - ): (key: string) => string { - return (key: string) => { - if (key === CONFIG_EXPIRY_LOCAL_STORAGE_KEY) { - return expiry; - } - return config; - }; - } - - function resetSettingsService(): void { - const settingsService = SettingsService.getInstance(); - settingsService.logSource = 462; - settingsService.loggingEnabled = false; - settingsService.networkRequestsSamplingRate = 1; - settingsService.tracesSamplingRate = 1; - } - - // parameterized beforeEach. Should be called at beginning of each test. - function setup( - storageConfig: { expiry: string; config: string }, - fetchConfig?: { reject: boolean; value?: Response } - ): { - storageGetItemStub: SinonStub<[string], string | null>; - fetchStub: SinonStub<[RequestInfo, RequestInit?], Promise>; - } { - const fetchStub = stub(self, 'fetch'); - - if (fetchConfig) { - fetchConfig.reject - ? fetchStub.rejects() - : fetchStub.resolves(fetchConfig.value); - } - - stub(iidService, 'getAuthTokenPromise').returns( - Promise.resolve(AUTH_TOKEN) - ); - - clock = useFakeTimers(GLOBAL_CLOCK_NOW); - SettingsService.prototype.firebaseAppInstance = ({ - options: { projectId: PROJECT_ID, appId: APP_ID, apiKey: API_KEY } - } as unknown) as FirebaseApp; - - // we need to stub the entire localStorage, because storage can't be stubbed in Firefox and IE. - // stubbing on self(window) seems to only work the first time (at least in Firefox), the subsequent - // tests will have the same stub. stub.reset() in afterEach doesn't help either. As a result, we stub on ApiInstance. - // https://github.com/sinonjs/sinon/issues/662 - const storageStub = stub(ApiInstance, 'localStorage'); - const getItemStub: SinonStub<[string], string | null> = stub(); - - storageStub.value({ - getItem: getItemStub.callsFake( - storageGetItemFakeFactory(storageConfig.expiry, storageConfig.config) - ), - setItem: () => {} - }); - - return { storageGetItemStub: getItemStub, fetchStub }; - } - - afterEach(() => { - resetSettingsService(); - clock.restore(); - }); - - describe('getConfig', () => { - it('gets the config from the local storage if available and valid', async () => { - // After global clock. Config not expired. - const EXPIRY_LOCAL_STORAGE_VALUE = '1556524895330'; - const { storageGetItemStub: getItemStub } = setup({ - expiry: EXPIRY_LOCAL_STORAGE_VALUE, - config: STRINGIFIED_CONFIG - }); - - await getConfig(IID); - - expect(getItemStub).to.be.called; - expect(SettingsService.getInstance().loggingEnabled).to.be.true; - expect(SettingsService.getInstance().logEndPointUrl).to.equal(LOG_URL); - expect(SettingsService.getInstance().transportKey).to.equal( - TRANSPORT_KEY - ); - expect(SettingsService.getInstance().logSource).to.equal(LOG_SOURCE); - expect( - SettingsService.getInstance().networkRequestsSamplingRate - ).to.equal(NETWORK_SAMPLIG_RATE); - expect(SettingsService.getInstance().tracesSamplingRate).to.equal( - TRACE_SAMPLING_RATE - ); - }); - - it('does not call remote config if a valid config is in local storage', async () => { - // After global clock. Config not expired. - const EXPIRY_LOCAL_STORAGE_VALUE = '1556524895330'; - - const { fetchStub } = setup({ - expiry: EXPIRY_LOCAL_STORAGE_VALUE, - config: STRINGIFIED_CONFIG - }); - - await getConfig(IID); - - expect(fetchStub).not.to.be.called; - }); - - it('gets the config from RC if local version is not valid', async () => { - // Expired local config. - const EXPIRY_LOCAL_STORAGE_VALUE = '1556524895320'; - - const { storageGetItemStub: getItemStub } = setup( - { expiry: EXPIRY_LOCAL_STORAGE_VALUE, config: STRINGIFIED_CONFIG }, - { reject: false, value: new Response(STRINGIFIED_CONFIG) } - ); - - await getConfig(IID); - - expect(getItemStub).to.be.calledOnce; - expect(SettingsService.getInstance().loggingEnabled).to.be.true; - expect(SettingsService.getInstance().logEndPointUrl).to.equal(LOG_URL); - expect(SettingsService.getInstance().transportKey).to.equal( - TRANSPORT_KEY - ); - expect(SettingsService.getInstance().logSource).to.equal(LOG_SOURCE); - expect( - SettingsService.getInstance().networkRequestsSamplingRate - ).to.equal(NETWORK_SAMPLIG_RATE); - expect(SettingsService.getInstance().tracesSamplingRate).to.equal( - TRACE_SAMPLING_RATE - ); - }); - - it('does not change the default config if call to RC fails', async () => { - // Expired local config. - const EXPIRY_LOCAL_STORAGE_VALUE = '1556524895320'; - - setup( - { - expiry: EXPIRY_LOCAL_STORAGE_VALUE, - config: NOT_VALID_CONFIG - }, - { reject: true } - ); - - await getConfig(IID); - - expect(SettingsService.getInstance().loggingEnabled).to.equal(false); - }); - - it('uses secondary configs if the response does not have all the fields', async () => { - // Expired local config. - const EXPIRY_LOCAL_STORAGE_VALUE = '1556524895320'; - const STRINGIFIED_PARTIAL_CONFIG = `{"entries":{\ - "fpr_vc_network_request_sampling_rate":"0.250000",\ - "fpr_vc_session_sampling_rate":"0.250000","fpr_vc_trace_sampling_rate":"0.500000"},\ - "state":"UPDATE"}`; - - setup( - { - expiry: EXPIRY_LOCAL_STORAGE_VALUE, - config: NOT_VALID_CONFIG - }, - { reject: false, value: new Response(STRINGIFIED_PARTIAL_CONFIG) } - ); - - await getConfig(IID); - - expect(SettingsService.getInstance().loggingEnabled).to.be.true; - }); - - it('uses secondary configs if the response does not have any fields', async () => { - // Expired local config. - const EXPIRY_LOCAL_STORAGE_VALUE = '1556524895320'; - const STRINGIFIED_PARTIAL_CONFIG = '{"state":"NO_TEMPLATE"}'; - - setup( - { - expiry: EXPIRY_LOCAL_STORAGE_VALUE, - config: NOT_VALID_CONFIG - }, - { reject: false, value: new Response(STRINGIFIED_PARTIAL_CONFIG) } - ); - await getConfig(IID); - - expect(SettingsService.getInstance().loggingEnabled).to.be.true; - }); - - it('gets the config from RC even with deprecated transport flag', async () => { - // Expired local config. - const EXPIRY_LOCAL_STORAGE_VALUE = '1556524895320'; - const STRINGIFIED_CUSTOM_CONFIG = `{"entries":{\ - "fpr_vc_network_request_sampling_rate":"0.250000",\ - "fpr_log_transport_web_percent":"100.0",\ - "fpr_vc_session_sampling_rate":"0.250000","fpr_vc_trace_sampling_rate":"0.500000"},\ - "state":"UPDATE"}`; - - const { storageGetItemStub: getItemStub } = setup( - { - expiry: EXPIRY_LOCAL_STORAGE_VALUE, - config: STRINGIFIED_CUSTOM_CONFIG - }, - { reject: false, value: new Response(STRINGIFIED_CONFIG) } - ); - - await getConfig(IID); - - expect(getItemStub).to.be.calledOnce; - expect(SettingsService.getInstance().loggingEnabled).to.be.true; - expect(SettingsService.getInstance().logEndPointUrl).to.equal(LOG_URL); - expect(SettingsService.getInstance().transportKey).to.equal( - TRANSPORT_KEY - ); - expect(SettingsService.getInstance().logSource).to.equal(LOG_SOURCE); - expect( - SettingsService.getInstance().networkRequestsSamplingRate - ).to.equal(NETWORK_SAMPLIG_RATE); - expect(SettingsService.getInstance().tracesSamplingRate).to.equal( - TRACE_SAMPLING_RATE - ); - }); - }); -}); diff --git a/packages-old/performance/src/services/remote_config_service.ts b/packages-old/performance/src/services/remote_config_service.ts deleted file mode 100644 index 71f5266c805..00000000000 --- a/packages-old/performance/src/services/remote_config_service.ts +++ /dev/null @@ -1,233 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { - CONFIG_EXPIRY_LOCAL_STORAGE_KEY, - CONFIG_LOCAL_STORAGE_KEY, - SDK_VERSION -} from '../constants'; -import { consoleLogger } from '../utils/console_logger'; -import { ERROR_FACTORY, ErrorCode } from '../utils/errors'; - -import { Api } from './api_service'; -import { getAuthTokenPromise } from './iid_service'; -import { SettingsService } from './settings_service'; - -const REMOTE_CONFIG_SDK_VERSION = '0.0.1'; - -interface SecondaryConfig { - loggingEnabled?: boolean; - logSource?: number; - logEndPointUrl?: string; - transportKey?: string; - tracesSamplingRate?: number; - networkRequestsSamplingRate?: number; -} - -// These values will be used if the remote config object is successfully -// retrieved, but the template does not have these fields. -const DEFAULT_CONFIGS: SecondaryConfig = { - loggingEnabled: true -}; - -/* eslint-disable camelcase */ -interface RemoteConfigTemplate { - fpr_enabled?: string; - fpr_log_source?: string; - fpr_log_endpoint_url?: string; - fpr_log_transport_key?: string; - fpr_log_transport_web_percent?: string; - fpr_vc_network_request_sampling_rate?: string; - fpr_vc_trace_sampling_rate?: string; - fpr_vc_session_sampling_rate?: string; -} -/* eslint-enable camelcase */ - -interface RemoteConfigResponse { - entries?: RemoteConfigTemplate; - state?: string; -} - -const FIS_AUTH_PREFIX = 'FIREBASE_INSTALLATIONS_AUTH'; - -export function getConfig(iid: string): Promise { - const config = getStoredConfig(); - if (config) { - processConfig(config); - return Promise.resolve(); - } - - return getRemoteConfig(iid) - .then(processConfig) - .then( - config => storeConfig(config), - /** Do nothing for error, use defaults set in settings service. */ - () => {} - ); -} - -function getStoredConfig(): RemoteConfigResponse | undefined { - const localStorage = Api.getInstance().localStorage; - if (!localStorage) { - return; - } - const expiryString = localStorage.getItem(CONFIG_EXPIRY_LOCAL_STORAGE_KEY); - if (!expiryString || !configValid(expiryString)) { - return; - } - - const configStringified = localStorage.getItem(CONFIG_LOCAL_STORAGE_KEY); - if (!configStringified) { - return; - } - try { - const configResponse: RemoteConfigResponse = JSON.parse(configStringified); - return configResponse; - } catch { - return; - } -} - -function storeConfig(config: RemoteConfigResponse | undefined): void { - const localStorage = Api.getInstance().localStorage; - if (!config || !localStorage) { - return; - } - - localStorage.setItem(CONFIG_LOCAL_STORAGE_KEY, JSON.stringify(config)); - localStorage.setItem( - CONFIG_EXPIRY_LOCAL_STORAGE_KEY, - String( - Date.now() + - SettingsService.getInstance().configTimeToLive * 60 * 60 * 1000 - ) - ); -} - -const COULD_NOT_GET_CONFIG_MSG = - 'Could not fetch config, will use default configs'; - -function getRemoteConfig( - iid: string -): Promise { - // Perf needs auth token only to retrieve remote config. - return getAuthTokenPromise() - .then(authToken => { - const projectId = SettingsService.getInstance().getProjectId(); - const configEndPoint = `https://firebaseremoteconfig.googleapis.com/v1/projects/${projectId}/namespaces/fireperf:fetch?key=${SettingsService.getInstance().getApiKey()}`; - const request = new Request(configEndPoint, { - method: 'POST', - headers: { Authorization: `${FIS_AUTH_PREFIX} ${authToken}` }, - /* eslint-disable camelcase */ - body: JSON.stringify({ - app_instance_id: iid, - app_instance_id_token: authToken, - app_id: SettingsService.getInstance().getAppId(), - app_version: SDK_VERSION, - sdk_version: REMOTE_CONFIG_SDK_VERSION - }) - /* eslint-enable camelcase */ - }); - return fetch(request).then(response => { - if (response.ok) { - return response.json() as RemoteConfigResponse; - } - // In case response is not ok. This will be caught by catch. - throw ERROR_FACTORY.create(ErrorCode.RC_NOT_OK); - }); - }) - .catch(() => { - consoleLogger.info(COULD_NOT_GET_CONFIG_MSG); - return undefined; - }); -} - -/** - * Processes config coming either from calling RC or from local storage. - * This method only runs if call is successful or config in storage - * is valid. - */ -function processConfig( - config?: RemoteConfigResponse -): RemoteConfigResponse | undefined { - if (!config) { - return config; - } - const settingsServiceInstance = SettingsService.getInstance(); - const entries = config.entries || {}; - if (entries.fpr_enabled !== undefined) { - // TODO: Change the assignment of loggingEnabled once the received type is - // known. - settingsServiceInstance.loggingEnabled = - String(entries.fpr_enabled) === 'true'; - } else if (DEFAULT_CONFIGS.loggingEnabled !== undefined) { - // Config retrieved successfully, but there is no fpr_enabled in template. - // Use secondary configs value. - settingsServiceInstance.loggingEnabled = DEFAULT_CONFIGS.loggingEnabled; - } - if (entries.fpr_log_source) { - settingsServiceInstance.logSource = Number(entries.fpr_log_source); - } else if (DEFAULT_CONFIGS.logSource) { - settingsServiceInstance.logSource = DEFAULT_CONFIGS.logSource; - } - - if (entries.fpr_log_endpoint_url) { - settingsServiceInstance.logEndPointUrl = entries.fpr_log_endpoint_url; - } else if (DEFAULT_CONFIGS.logEndPointUrl) { - settingsServiceInstance.logEndPointUrl = DEFAULT_CONFIGS.logEndPointUrl; - } - - // Key from Remote Config has to be non-empty string, otherwsie use local value. - if (entries.fpr_log_transport_key) { - settingsServiceInstance.transportKey = entries.fpr_log_transport_key; - } else if (DEFAULT_CONFIGS.transportKey) { - settingsServiceInstance.transportKey = DEFAULT_CONFIGS.transportKey; - } - - if (entries.fpr_vc_network_request_sampling_rate !== undefined) { - settingsServiceInstance.networkRequestsSamplingRate = Number( - entries.fpr_vc_network_request_sampling_rate - ); - } else if (DEFAULT_CONFIGS.networkRequestsSamplingRate !== undefined) { - settingsServiceInstance.networkRequestsSamplingRate = - DEFAULT_CONFIGS.networkRequestsSamplingRate; - } - if (entries.fpr_vc_trace_sampling_rate !== undefined) { - settingsServiceInstance.tracesSamplingRate = Number( - entries.fpr_vc_trace_sampling_rate - ); - } else if (DEFAULT_CONFIGS.tracesSamplingRate !== undefined) { - settingsServiceInstance.tracesSamplingRate = - DEFAULT_CONFIGS.tracesSamplingRate; - } - // Set the per session trace and network logging flags. - settingsServiceInstance.logTraceAfterSampling = shouldLogAfterSampling( - settingsServiceInstance.tracesSamplingRate - ); - settingsServiceInstance.logNetworkAfterSampling = shouldLogAfterSampling( - settingsServiceInstance.networkRequestsSamplingRate - ); - return config; -} - -function configValid(expiry: string): boolean { - return Number(expiry) > Date.now(); -} - -function shouldLogAfterSampling(samplingRate: number): boolean { - return Math.random() <= samplingRate; -} diff --git a/packages-old/performance/src/services/settings_service.ts b/packages-old/performance/src/services/settings_service.ts deleted file mode 100644 index 03540845883..00000000000 --- a/packages-old/performance/src/services/settings_service.ts +++ /dev/null @@ -1,107 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { FirebaseApp } from '@firebase/app-types'; -import { ERROR_FACTORY, ErrorCode } from '../utils/errors'; -import { FirebaseInstallations } from '@firebase/installations-types'; -import { mergeStrings } from '../utils/string_merger'; - -let settingsServiceInstance: SettingsService | undefined; - -export class SettingsService { - // The variable which controls logging of automatic traces and HTTP/S network monitoring. - instrumentationEnabled = true; - - // The variable which controls logging of custom traces. - dataCollectionEnabled = true; - - // Configuration flags set through remote config. - loggingEnabled = false; - // Sampling rate between 0 and 1. - tracesSamplingRate = 1; - networkRequestsSamplingRate = 1; - - // Address of logging service. - logEndPointUrl = - 'https://firebaselogging.googleapis.com/v0cc/log?format=json_proto'; - // Performance event transport endpoint URL which should be compatible with proto3. - // New Address for transport service, not configurable via Remote Config. - flTransportEndpointUrl = mergeStrings( - 'hts/frbslgigp.ogepscmv/ieo/eaylg', - 'tp:/ieaeogn-agolai.o/1frlglgc/o' - ); - - transportKey = mergeStrings('AzSC8r6ReiGqFMyfvgow', 'Iayx0u-XT3vksVM-pIV'); - - // Source type for performance event logs. - logSource = 462; - - // Flags which control per session logging of traces and network requests. - logTraceAfterSampling = false; - logNetworkAfterSampling = false; - - // TTL of config retrieved from remote config in hours. - configTimeToLive = 12; - - firebaseAppInstance!: FirebaseApp; - - installationsService!: FirebaseInstallations; - - getAppId(): string { - const appId = - this.firebaseAppInstance && - this.firebaseAppInstance.options && - this.firebaseAppInstance.options.appId; - if (!appId) { - throw ERROR_FACTORY.create(ErrorCode.NO_APP_ID); - } - return appId; - } - - getProjectId(): string { - const projectId = - this.firebaseAppInstance && - this.firebaseAppInstance.options && - this.firebaseAppInstance.options.projectId; - if (!projectId) { - throw ERROR_FACTORY.create(ErrorCode.NO_PROJECT_ID); - } - return projectId; - } - - getApiKey(): string { - const apiKey = - this.firebaseAppInstance && - this.firebaseAppInstance.options && - this.firebaseAppInstance.options.apiKey; - if (!apiKey) { - throw ERROR_FACTORY.create(ErrorCode.NO_API_KEY); - } - return apiKey; - } - - getFlTransportFullUrl(): string { - return this.flTransportEndpointUrl.concat('?key=', this.transportKey); - } - - static getInstance(): SettingsService { - if (settingsServiceInstance === undefined) { - settingsServiceInstance = new SettingsService(); - } - return settingsServiceInstance; - } -} diff --git a/packages-old/performance/src/services/transport_service.test.ts b/packages-old/performance/src/services/transport_service.test.ts deleted file mode 100644 index caa1958aad4..00000000000 --- a/packages-old/performance/src/services/transport_service.test.ts +++ /dev/null @@ -1,183 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { stub, useFakeTimers, SinonStub, SinonFakeTimers, match } from 'sinon'; -import { use, expect } from 'chai'; -import * as sinonChai from 'sinon-chai'; -import { - transportHandler, - setupTransportService, - resetTransportService -} from './transport_service'; -import { SettingsService } from './settings_service'; - -use(sinonChai); - -describe('Firebase Performance > transport_service', () => { - let fetchStub: SinonStub<[RequestInfo, RequestInit?], Promise>; - const INITIAL_SEND_TIME_DELAY_MS = 5.5 * 1000; - const DEFAULT_SEND_INTERVAL_MS = 10 * 1000; - const MAX_EVENT_COUNT_PER_REQUEST = 1000; - const TRANSPORT_DELAY_INTERVAL = 10000; - // Starts date at timestamp 1 instead of 0, otherwise it causes validation errors. - let clock: SinonFakeTimers; - const testTransportHandler = transportHandler((...args) => { - return args[0]; - }); - - beforeEach(() => { - fetchStub = stub(window, 'fetch'); - clock = useFakeTimers(1); - setupTransportService(); - }); - - afterEach(() => { - fetchStub.restore(); - clock.restore(); - resetTransportService(); - }); - - it('throws an error when logging an empty message', () => { - expect(() => { - testTransportHandler(''); - }).to.throw; - }); - - it('does not attempt to log an event after INITIAL_SEND_TIME_DELAY_MS if queue is empty', () => { - fetchStub.resolves( - new Response('', { - status: 200, - headers: { 'Content-type': 'application/json' } - }) - ); - - clock.tick(INITIAL_SEND_TIME_DELAY_MS); - expect(fetchStub).to.not.have.been.called; - }); - - it('attempts to log an event after DEFAULT_SEND_INTERVAL_MS if queue not empty', async () => { - fetchStub.resolves( - new Response('', { - status: 200, - headers: { 'Content-type': 'application/json' } - }) - ); - - clock.tick(INITIAL_SEND_TIME_DELAY_MS); - testTransportHandler('someEvent'); - clock.tick(DEFAULT_SEND_INTERVAL_MS); - expect(fetchStub).to.have.been.calledOnce; - }); - - it('successful send a meesage to transport', () => { - const setting = SettingsService.getInstance(); - const flTransportFullUrl = - setting.flTransportEndpointUrl + '?key=' + setting.transportKey; - fetchStub.withArgs(flTransportFullUrl, match.any).resolves( - // DELETE_REQUEST means event dispatch is successful. - generateSuccessResponse() - ); - - testTransportHandler('event1'); - clock.tick(INITIAL_SEND_TIME_DELAY_MS); - expect(fetchStub).to.have.been.calledOnce; - }); - - it('sends up to the maximum event limit in one request', async () => { - // Arrange - const setting = SettingsService.getInstance(); - const flTransportFullUrl = - setting.flTransportEndpointUrl + '?key=' + setting.transportKey; - - // Returns successful response from fl for logRequests. - const response = generateSuccessResponse(); - stub(response, 'json').resolves(JSON.parse(generateSuccessResponseBody())); - fetchStub.resolves(response); - - // Act - // Generate 1020 events, which should be dispatched in two batches (1000 events and 20 events). - for (let i = 0; i < 1020; i++) { - testTransportHandler('event' + i); - } - // Wait for first and second event dispatch to happen. - clock.tick(INITIAL_SEND_TIME_DELAY_MS); - // This is to resolve the floating promise chain in transport service. - await Promise.resolve().then().then().then(); - clock.tick(DEFAULT_SEND_INTERVAL_MS); - - // Assert - // Expects the first logRequest which contains first 1000 events. - const firstLogRequest = generateLogRequest('5501'); - for (let i = 0; i < MAX_EVENT_COUNT_PER_REQUEST; i++) { - firstLogRequest['log_event'].push({ - 'source_extension_json_proto3': 'event' + i, - 'event_time_ms': '1' - }); - } - expect(fetchStub).which.to.have.been.calledWith(flTransportFullUrl, { - method: 'POST', - body: JSON.stringify(firstLogRequest) - }); - // Expects the second logRequest which contains remaining 20 events; - const secondLogRequest = generateLogRequest('15501'); - for (let i = 0; i < 20; i++) { - secondLogRequest['log_event'].push({ - 'source_extension_json_proto3': - 'event' + (MAX_EVENT_COUNT_PER_REQUEST + i), - 'event_time_ms': '1' - }); - } - expect(fetchStub).calledWith(flTransportFullUrl, { - method: 'POST', - body: JSON.stringify(secondLogRequest) - }); - }); - - function generateLogRequest(requestTimeMs: string): any { - return { - 'request_time_ms': requestTimeMs, - 'client_info': { - 'client_type': 1, - 'js_client_info': {} - }, - 'log_source': 462, - 'log_event': [] as any - }; - } - - function generateSuccessResponse(): Response { - return new Response(generateSuccessResponseBody(), { - status: 200, - headers: { 'Content-type': 'application/json' } - }); - } - - function generateSuccessResponseBody(): string { - return ( - '{\ - "nextRequestWaitMillis": "' + - TRANSPORT_DELAY_INTERVAL + - '",\ - "logResponseDetails": [\ - {\ - "responseAction": "DELETE_REQUEST"\ - }\ - ]\ - }' - ); - } -}); diff --git a/packages-old/performance/src/services/transport_service.ts b/packages-old/performance/src/services/transport_service.ts deleted file mode 100644 index d57d8f5cf72..00000000000 --- a/packages-old/performance/src/services/transport_service.ts +++ /dev/null @@ -1,192 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { SettingsService } from './settings_service'; -import { ERROR_FACTORY, ErrorCode } from '../utils/errors'; -import { consoleLogger } from '../utils/console_logger'; - -const DEFAULT_SEND_INTERVAL_MS = 10 * 1000; -const INITIAL_SEND_TIME_DELAY_MS = 5.5 * 1000; -// If end point does not work, the call will be tried for these many times. -const DEFAULT_REMAINING_TRIES = 3; -const MAX_EVENT_COUNT_PER_REQUEST = 1000; -let remainingTries = DEFAULT_REMAINING_TRIES; - -interface LogResponseDetails { - responseAction?: string; -} - -interface BatchEvent { - message: string; - eventTime: number; -} - -/* eslint-disable camelcase */ -// CC/Fl accepted log format. -interface TransportBatchLogFormat { - request_time_ms: string; - client_info: ClientInfo; - log_source: number; - log_event: Log[]; -} - -interface ClientInfo { - client_type: number; - js_client_info: {}; -} - -interface Log { - source_extension_json_proto3: string; - event_time_ms: string; -} -/* eslint-enable camelcase */ - -let queue: BatchEvent[] = []; - -let isTransportSetup: boolean = false; - -export function setupTransportService(): void { - if (!isTransportSetup) { - processQueue(INITIAL_SEND_TIME_DELAY_MS); - isTransportSetup = true; - } -} - -/** - * Utilized by testing to clean up message queue and un-initialize transport service. - */ -export function resetTransportService(): void { - isTransportSetup = false; - queue = []; -} - -function processQueue(timeOffset: number): void { - setTimeout(() => { - // If there is no remainingTries left, stop retrying. - if (remainingTries === 0) { - return; - } - - // If there are no events to process, wait for DEFAULT_SEND_INTERVAL_MS and try again. - if (!queue.length) { - return processQueue(DEFAULT_SEND_INTERVAL_MS); - } - - dispatchQueueEvents(); - }, timeOffset); -} - -function dispatchQueueEvents(): void { - // Extract events up to the maximum cap of single logRequest from top of "official queue". - // The staged events will be used for current logRequest attempt, remaining events will be kept - // for next attempt. - const staged = queue.splice(0, MAX_EVENT_COUNT_PER_REQUEST); - - /* eslint-disable camelcase */ - // We will pass the JSON serialized event to the backend. - const log_event: Log[] = staged.map(evt => ({ - source_extension_json_proto3: evt.message, - event_time_ms: String(evt.eventTime) - })); - - const data: TransportBatchLogFormat = { - request_time_ms: String(Date.now()), - client_info: { - client_type: 1, // 1 is JS - js_client_info: {} - }, - log_source: SettingsService.getInstance().logSource, - log_event - }; - /* eslint-enable camelcase */ - - sendEventsToFl(data, staged).catch(() => { - // If the request fails for some reason, add the events that were attempted - // back to the primary queue to retry later. - queue = [...staged, ...queue]; - remainingTries--; - consoleLogger.info(`Tries left: ${remainingTries}.`); - processQueue(DEFAULT_SEND_INTERVAL_MS); - }); -} - -function sendEventsToFl( - data: TransportBatchLogFormat, - staged: BatchEvent[] -): Promise { - return postToFlEndpoint(data) - .then(res => { - if (!res.ok) { - consoleLogger.info('Call to Firebase backend failed.'); - } - return res.json(); - }) - .then(res => { - // Find the next call wait time from the response. - const transportWait = Number(res.nextRequestWaitMillis); - let requestOffset = DEFAULT_SEND_INTERVAL_MS; - if (!isNaN(transportWait)) { - requestOffset = Math.max(transportWait, requestOffset); - } - - // Delete request if response include RESPONSE_ACTION_UNKNOWN or DELETE_REQUEST action. - // Otherwise, retry request using normal scheduling if response include RETRY_REQUEST_LATER. - const logResponseDetails: LogResponseDetails[] = res.logResponseDetails; - if ( - Array.isArray(logResponseDetails) && - logResponseDetails.length > 0 && - logResponseDetails[0].responseAction === 'RETRY_REQUEST_LATER' - ) { - queue = [...staged, ...queue]; - consoleLogger.info(`Retry transport request later.`); - } - - remainingTries = DEFAULT_REMAINING_TRIES; - // Schedule the next process. - processQueue(requestOffset); - }); -} - -function postToFlEndpoint(data: TransportBatchLogFormat): Promise { - const flTransportFullUrl = SettingsService.getInstance().getFlTransportFullUrl(); - return fetch(flTransportFullUrl, { - method: 'POST', - body: JSON.stringify(data) - }); -} - -function addToQueue(evt: BatchEvent): void { - if (!evt.eventTime || !evt.message) { - throw ERROR_FACTORY.create(ErrorCode.INVALID_CC_LOG); - } - // Add the new event to the queue. - queue = [...queue, evt]; -} - -/** Log handler for cc service to send the performance logs to the server. */ -export function transportHandler( - // eslint-disable-next-line @typescript-eslint/no-explicit-any - serializer: (...args: any[]) => string -): (...args: unknown[]) => void { - return (...args) => { - const message = serializer(...args); - addToQueue({ - message, - eventTime: Date.now() - }); - }; -} diff --git a/packages-old/performance/src/utils/attribute_utils.test.ts b/packages-old/performance/src/utils/attribute_utils.test.ts deleted file mode 100644 index 87b202dbc38..00000000000 --- a/packages-old/performance/src/utils/attribute_utils.test.ts +++ /dev/null @@ -1,215 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF unknown KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { restore, stub } from 'sinon'; -import { expect } from 'chai'; -import { Api } from '../services/api_service'; - -import { - getVisibilityState, - VisibilityState, - getServiceWorkerStatus, - getEffectiveConnectionType, - isValidCustomAttributeName, - isValidCustomAttributeValue -} from './attributes_utils'; - -import '../../test/setup'; - -describe('Firebase Performance > attribute_utils', () => { - describe('#getServiceWorkerStatus', () => { - it('returns unsupported when service workers unsupported', () => { - stub(Api, 'getInstance').returns(({ - navigator: {} - } as unknown) as Api); - - expect(getServiceWorkerStatus()).to.be.eql(1); - }); - - it('returns controlled when service workers controlled', () => { - stub(Api, 'getInstance').returns(({ - navigator: { - serviceWorker: { - controller: {} - } - } - } as unknown) as Api); - - expect(getServiceWorkerStatus()).to.be.eql(2); - }); - - it('returns uncontrolled when service workers uncontrolled', () => { - stub(Api, 'getInstance').returns(({ - navigator: { - serviceWorker: {} - } - } as unknown) as Api); - - expect(getServiceWorkerStatus()).to.be.eql(3); - }); - }); - - describe('#getVisibilityState', () => { - afterEach(() => { - restore(); - }); - - it('returns visible when document is visible', () => { - stub(Api, 'getInstance').returns(({ - document: { - visibilityState: 'visible' - } - } as unknown) as Api); - expect(getVisibilityState()).to.be.eql(VisibilityState.VISIBLE); - }); - - it('returns hidden when document is hidden', () => { - stub(Api, 'getInstance').returns(({ - document: { - visibilityState: 'hidden' - } - } as unknown) as Api); - expect(getVisibilityState()).to.be.eql(VisibilityState.HIDDEN); - }); - - it('returns unknown when document is unknown', () => { - stub(Api, 'getInstance').returns(({ - document: { - visibilityState: 'unknown' - } - } as unknown) as Api); - expect(getVisibilityState()).to.be.eql(VisibilityState.UNKNOWN); - }); - }); - - describe('#getEffectiveConnectionType', () => { - afterEach(() => { - restore(); - }); - - it('returns EffectiveConnectionType.CONNECTION_SLOW_2G when slow-2g', () => { - stub(Api, 'getInstance').returns(({ - navigator: { - connection: { - effectiveType: 'slow-2g' - } - } - } as unknown) as Api); - expect(getEffectiveConnectionType()).to.be.eql(1); - }); - - it('returns EffectiveConnectionType.CONNECTION_2G when 2g', () => { - stub(Api, 'getInstance').returns(({ - navigator: { - connection: { - effectiveType: '2g' - } - } - } as unknown) as Api); - expect(getEffectiveConnectionType()).to.be.eql(2); - }); - - it('returns EffectiveConnectionType.CONNECTION_3G when 3g', () => { - stub(Api, 'getInstance').returns(({ - navigator: { - connection: { - effectiveType: '3g' - } - } - } as unknown) as Api); - expect(getEffectiveConnectionType()).to.be.eql(3); - }); - - it('returns EffectiveConnectionType.CONNECTION_4G when 4g', () => { - stub(Api, 'getInstance').returns(({ - navigator: { - connection: { - effectiveType: '4g' - } - } - } as unknown) as Api); - expect(getEffectiveConnectionType()).to.be.eql(4); - }); - - it('returns EffectiveConnectionType.UNKNOWN when unknown connection type', () => { - stub(Api, 'getInstance').returns(({ - navigator: { - connection: { - effectiveType: '5g' - } - } - } as unknown) as Api); - expect(getEffectiveConnectionType()).to.be.eql(0); - }); - - it('returns EffectiveConnectionType.UNKNOWN when no effective type', () => { - stub(Api, 'getInstance').returns(({ - navigator: { - connection: {} - } - } as unknown) as Api); - expect(getEffectiveConnectionType()).to.be.eql(0); - }); - }); - - describe('#isValidCustomAttributeName', () => { - it('returns true when name is valid', () => { - expect(isValidCustomAttributeName('validCustom_Attribute_Name')).to.be - .true; - }); - - it('returns false when name is blank', () => { - expect(isValidCustomAttributeName('')).to.be.false; - }); - - it('returns false when name is too long', () => { - expect( - isValidCustomAttributeName('invalid_custom_name_over_forty_characters') - ).to.be.false; - }); - - it('returns false when name starts with a reserved prefix', () => { - expect(isValidCustomAttributeName('firebase_invalidCustomName')).to.be - .false; - }); - - it('returns false when name does not begin with a letter', () => { - expect(isValidCustomAttributeName('_invalidCustomName')).to.be.false; - }); - - it('returns false when name contains prohibited characters', () => { - expect(isValidCustomAttributeName('invalidCustomName&')).to.be.false; - }); - }); - - describe('#isValidCustomAttributeValue', () => { - it('returns true when value is valid', () => { - expect(isValidCustomAttributeValue('valid_attribute_value')).to.be.true; - }); - - it('returns false when value is blank', () => { - expect(isValidCustomAttributeValue('')).to.be.false; - }); - - it('returns false when value is too long', () => { - const longAttributeValue = - 'too_long_attribute_value_over_one_hundred_characters_too_long_attribute_value_over_one_' + - 'hundred_charac'; - expect(isValidCustomAttributeValue(longAttributeValue)).to.be.false; - }); - }); -}); diff --git a/packages-old/performance/src/utils/attributes_utils.ts b/packages-old/performance/src/utils/attributes_utils.ts deleted file mode 100644 index c060f1de1f2..00000000000 --- a/packages-old/performance/src/utils/attributes_utils.ts +++ /dev/null @@ -1,117 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { Api } from '../services/api_service'; - -// The values and orders of the following enums should not be changed. -const enum ServiceWorkerStatus { - UNKNOWN = 0, - UNSUPPORTED = 1, - CONTROLLED = 2, - UNCONTROLLED = 3 -} - -export enum VisibilityState { - UNKNOWN = 0, - VISIBLE = 1, - HIDDEN = 2 -} - -const enum EffectiveConnectionType { - UNKNOWN = 0, - CONNECTION_SLOW_2G = 1, - CONNECTION_2G = 2, - CONNECTION_3G = 3, - CONNECTION_4G = 4 -} - -/** - * NetworkInformation - * - * ref: https://developer.mozilla.org/en-US/docs/Web/API/NetworkInformation - */ -interface NetworkInformation { - readonly effectiveType?: 'slow-2g' | '2g' | '3g' | '4g'; -} - -interface NavigatorWithConnection extends Navigator { - readonly connection: NetworkInformation; -} - -const RESERVED_ATTRIBUTE_PREFIXES = ['firebase_', 'google_', 'ga_']; -const ATTRIBUTE_FORMAT_REGEX = new RegExp('^[a-zA-Z]\\w*$'); -const MAX_ATTRIBUTE_NAME_LENGTH = 40; -const MAX_ATTRIBUTE_VALUE_LENGTH = 100; - -export function getServiceWorkerStatus(): ServiceWorkerStatus { - const navigator = Api.getInstance().navigator; - if ('serviceWorker' in navigator) { - if (navigator.serviceWorker.controller) { - return ServiceWorkerStatus.CONTROLLED; - } else { - return ServiceWorkerStatus.UNCONTROLLED; - } - } else { - return ServiceWorkerStatus.UNSUPPORTED; - } -} - -export function getVisibilityState(): VisibilityState { - const document = Api.getInstance().document; - const visibilityState = document.visibilityState; - switch (visibilityState) { - case 'visible': - return VisibilityState.VISIBLE; - case 'hidden': - return VisibilityState.HIDDEN; - default: - return VisibilityState.UNKNOWN; - } -} - -export function getEffectiveConnectionType(): EffectiveConnectionType { - const navigator = Api.getInstance().navigator; - const navigatorConnection = (navigator as NavigatorWithConnection).connection; - const effectiveType = - navigatorConnection && navigatorConnection.effectiveType; - switch (effectiveType) { - case 'slow-2g': - return EffectiveConnectionType.CONNECTION_SLOW_2G; - case '2g': - return EffectiveConnectionType.CONNECTION_2G; - case '3g': - return EffectiveConnectionType.CONNECTION_3G; - case '4g': - return EffectiveConnectionType.CONNECTION_4G; - default: - return EffectiveConnectionType.UNKNOWN; - } -} - -export function isValidCustomAttributeName(name: string): boolean { - if (name.length === 0 || name.length > MAX_ATTRIBUTE_NAME_LENGTH) { - return false; - } - const matchesReservedPrefix = RESERVED_ATTRIBUTE_PREFIXES.some(prefix => - name.startsWith(prefix) - ); - return !matchesReservedPrefix && !!name.match(ATTRIBUTE_FORMAT_REGEX); -} - -export function isValidCustomAttributeValue(value: string): boolean { - return value.length !== 0 && value.length <= MAX_ATTRIBUTE_VALUE_LENGTH; -} diff --git a/packages-old/performance/src/utils/console_logger.ts b/packages-old/performance/src/utils/console_logger.ts deleted file mode 100644 index 8ba63d2879e..00000000000 --- a/packages-old/performance/src/utils/console_logger.ts +++ /dev/null @@ -1,22 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { Logger, LogLevel } from '@firebase/logger'; -import { SERVICE_NAME } from '../constants'; - -export const consoleLogger = new Logger(SERVICE_NAME); -consoleLogger.logLevel = LogLevel.INFO; diff --git a/packages-old/performance/src/utils/errors.ts b/packages-old/performance/src/utils/errors.ts deleted file mode 100644 index 5f33c95855d..00000000000 --- a/packages-old/performance/src/utils/errors.ts +++ /dev/null @@ -1,78 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { ErrorFactory } from '@firebase/util'; -import { SERVICE, SERVICE_NAME } from '../constants'; - -export const enum ErrorCode { - TRACE_STARTED_BEFORE = 'trace started', - TRACE_STOPPED_BEFORE = 'trace stopped', - NONPOSITIVE_TRACE_START_TIME = 'nonpositive trace startTime', - NONPOSITIVE_TRACE_DURATION = 'nonpositive trace duration', - NO_WINDOW = 'no window', - NO_APP_ID = 'no app id', - NO_PROJECT_ID = 'no project id', - NO_API_KEY = 'no api key', - INVALID_CC_LOG = 'invalid cc log', - FB_NOT_DEFAULT = 'FB not default', - RC_NOT_OK = 'RC response not ok', - INVALID_ATTRIBUTE_NAME = 'invalid attribute name', - INVALID_ATTRIBUTE_VALUE = 'invalid attribute value', - INVALID_CUSTOM_METRIC_NAME = 'invalid custom metric name', - INVALID_STRING_MERGER_PARAMETER = 'invalid String merger input' -} - -const ERROR_DESCRIPTION_MAP: { readonly [key in ErrorCode]: string } = { - [ErrorCode.TRACE_STARTED_BEFORE]: 'Trace {$traceName} was started before.', - [ErrorCode.TRACE_STOPPED_BEFORE]: 'Trace {$traceName} is not running.', - [ErrorCode.NONPOSITIVE_TRACE_START_TIME]: - 'Trace {$traceName} startTime should be positive.', - [ErrorCode.NONPOSITIVE_TRACE_DURATION]: - 'Trace {$traceName} duration should be positive.', - [ErrorCode.NO_WINDOW]: 'Window is not available.', - [ErrorCode.NO_APP_ID]: 'App id is not available.', - [ErrorCode.NO_PROJECT_ID]: 'Project id is not available.', - [ErrorCode.NO_API_KEY]: 'Api key is not available.', - [ErrorCode.INVALID_CC_LOG]: 'Attempted to queue invalid cc event', - [ErrorCode.FB_NOT_DEFAULT]: - 'Performance can only start when Firebase app instance is the default one.', - [ErrorCode.RC_NOT_OK]: 'RC response is not ok', - [ErrorCode.INVALID_ATTRIBUTE_NAME]: - 'Attribute name {$attributeName} is invalid.', - [ErrorCode.INVALID_ATTRIBUTE_VALUE]: - 'Attribute value {$attributeValue} is invalid.', - [ErrorCode.INVALID_CUSTOM_METRIC_NAME]: - 'Custom metric name {$customMetricName} is invalid', - [ErrorCode.INVALID_STRING_MERGER_PARAMETER]: - 'Input for String merger is invalid, contact support team to resolve.' -}; - -interface ErrorParams { - [ErrorCode.TRACE_STARTED_BEFORE]: { traceName: string }; - [ErrorCode.TRACE_STOPPED_BEFORE]: { traceName: string }; - [ErrorCode.NONPOSITIVE_TRACE_START_TIME]: { traceName: string }; - [ErrorCode.NONPOSITIVE_TRACE_DURATION]: { traceName: string }; - [ErrorCode.INVALID_ATTRIBUTE_NAME]: { attributeName: string }; - [ErrorCode.INVALID_ATTRIBUTE_VALUE]: { attributeValue: string }; - [ErrorCode.INVALID_CUSTOM_METRIC_NAME]: { customMetricName: string }; -} - -export const ERROR_FACTORY = new ErrorFactory( - SERVICE, - SERVICE_NAME, - ERROR_DESCRIPTION_MAP -); diff --git a/packages-old/performance/src/utils/metric_utils.test.ts b/packages-old/performance/src/utils/metric_utils.test.ts deleted file mode 100644 index 0dee88521e3..00000000000 --- a/packages-old/performance/src/utils/metric_utils.test.ts +++ /dev/null @@ -1,93 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF unknown KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { expect } from 'chai'; - -import { isValidMetricName } from './metric_utils'; -import { - FIRST_PAINT_COUNTER_NAME, - FIRST_CONTENTFUL_PAINT_COUNTER_NAME, - FIRST_INPUT_DELAY_COUNTER_NAME -} from '../constants'; -import '../../test/setup'; - -describe('Firebase Performance > metric_utils', () => { - describe('#isValidMetricName', () => { - it('returns true when name is valid', () => { - expect(isValidMetricName('validCustom_Metric_Name')).to.be.true; - }); - - it('returns false when name is blank', () => { - expect(isValidMetricName('')).to.be.false; - }); - - it('returns false when name is too long', () => { - const longMetricName = - 'too_long_metric_name_over_one_hundred_characters_too_long_metric_name_over_one_' + - 'hundred_characters_too'; - expect(isValidMetricName(longMetricName)).to.be.false; - }); - - it('returns false when name starts with a reserved prefix', () => { - expect(isValidMetricName('_invalidMetricName')).to.be.false; - }); - - it('returns true for first paint metric', () => { - expect( - isValidMetricName(FIRST_PAINT_COUNTER_NAME, '_wt_http://example.com') - ).to.be.true; - }); - - it('returns true for first contentful paint metric', () => { - expect( - isValidMetricName( - FIRST_CONTENTFUL_PAINT_COUNTER_NAME, - '_wt_http://example.com' - ) - ).to.be.true; - }); - - it('returns true for first input delay metric', () => { - expect( - isValidMetricName( - FIRST_INPUT_DELAY_COUNTER_NAME, - '_wt_http://example.com' - ) - ).to.be.true; - }); - - it('returns false if first paint metric name is used outside of page load traces', () => { - expect(isValidMetricName(FIRST_PAINT_COUNTER_NAME, 'some_randome_trace')) - .to.be.false; - }); - - it('returns false if first contentful paint metric name is used outside of page load traces', () => { - expect( - isValidMetricName( - FIRST_CONTENTFUL_PAINT_COUNTER_NAME, - 'some_randome_trace' - ) - ).to.be.false; - }); - - it('returns false if first input delay metric name is used outside of page load traces', () => { - expect( - isValidMetricName(FIRST_INPUT_DELAY_COUNTER_NAME, 'some_randome_trace') - ).to.be.false; - }); - }); -}); diff --git a/packages-old/performance/src/utils/metric_utils.ts b/packages-old/performance/src/utils/metric_utils.ts deleted file mode 100644 index aad0357114c..00000000000 --- a/packages-old/performance/src/utils/metric_utils.ts +++ /dev/null @@ -1,64 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { - FIRST_PAINT_COUNTER_NAME, - FIRST_CONTENTFUL_PAINT_COUNTER_NAME, - FIRST_INPUT_DELAY_COUNTER_NAME, - OOB_TRACE_PAGE_LOAD_PREFIX -} from '../constants'; -import { consoleLogger } from '../utils/console_logger'; - -const MAX_METRIC_NAME_LENGTH = 100; -const RESERVED_AUTO_PREFIX = '_'; -const oobMetrics = [ - FIRST_PAINT_COUNTER_NAME, - FIRST_CONTENTFUL_PAINT_COUNTER_NAME, - FIRST_INPUT_DELAY_COUNTER_NAME -]; - -/** - * Returns true if the metric is custom and does not start with reserved prefix, or if - * the metric is one of out of the box page load trace metrics. - */ -export function isValidMetricName(name: string, traceName?: string): boolean { - if (name.length === 0 || name.length > MAX_METRIC_NAME_LENGTH) { - return false; - } - return ( - (traceName && - traceName.startsWith(OOB_TRACE_PAGE_LOAD_PREFIX) && - oobMetrics.indexOf(name) > -1) || - !name.startsWith(RESERVED_AUTO_PREFIX) - ); -} - -/** - * Converts the provided value to an integer value to be used in case of a metric. - * @param providedValue Provided number value of the metric that needs to be converted to an integer. - * - * @returns Converted integer number to be set for the metric. - */ -export function convertMetricValueToInteger(providedValue: number): number { - const valueAsInteger: number = Math.floor(providedValue); - if (valueAsInteger < providedValue) { - consoleLogger.info( - `Metric value should be an Integer, setting the value as : ${valueAsInteger}.` - ); - } - return valueAsInteger; -} diff --git a/packages-old/performance/src/utils/string_merger.test.ts b/packages-old/performance/src/utils/string_merger.test.ts deleted file mode 100644 index e192f8438f7..00000000000 --- a/packages-old/performance/src/utils/string_merger.test.ts +++ /dev/null @@ -1,54 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF unknown KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { expect } from 'chai'; - -import { mergeStrings } from './string_merger'; -import { FirebaseError } from '@firebase/util'; -// import { ERROR_FACTORY, ErrorCode } from './errors'; -import '../../test/setup'; - -describe('Firebase Performance > string_merger', () => { - describe('#mergeStrings', () => { - it('Throws exception when string length has | diff | > 1', () => { - // const expectedError = ERROR_FACTORY.create(ErrorCode.INVALID_STRING_MERGER_PARAMETER); - expect(() => mergeStrings('', '123')).to.throw( - FirebaseError, - 'performance/invalid String merger input' - ); - }); - - it('returns empty string when both inputs are empty', () => { - expect(mergeStrings('', '')).equal(''); - }); - - it('returns merge result string when both inputs have same length', () => { - expect(mergeStrings('12345', 'abcde')).equal('1a2b3c4d5e'); - }); - - it('returns merge result string when input length diff == 1', () => { - expect(() => mergeStrings('1234', 'abcde')).to.throw( - FirebaseError, - 'performance/invalid String merger input' - ); - }); - - it('returns merge result string when input length diff == -1', () => { - expect(mergeStrings('12345', 'abcd')).equal('1a2b3c4d5'); - }); - }); -}); diff --git a/packages-old/performance/src/utils/string_merger.ts b/packages-old/performance/src/utils/string_merger.ts deleted file mode 100644 index d26295f7b11..00000000000 --- a/packages-old/performance/src/utils/string_merger.ts +++ /dev/null @@ -1,35 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { ERROR_FACTORY, ErrorCode } from './errors'; - -export function mergeStrings(part1: string, part2: string): string { - const sizeDiff = part1.length - part2.length; - if (sizeDiff < 0 || sizeDiff > 1) { - throw ERROR_FACTORY.create(ErrorCode.INVALID_STRING_MERGER_PARAMETER); - } - - const resultArray = []; - for (let i = 0; i < part1.length; i++) { - resultArray.push(part1.charAt(i)); - if (part2.length > i) { - resultArray.push(part2.charAt(i)); - } - } - - return resultArray.join(''); -} diff --git a/packages-old/performance/test/setup.ts b/packages-old/performance/test/setup.ts deleted file mode 100644 index 1b4641c59a8..00000000000 --- a/packages-old/performance/test/setup.ts +++ /dev/null @@ -1,27 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { restore } from 'sinon'; -import { use } from 'chai'; -import * as chaiAsPromised from 'chai-as-promised'; -import * as sinonChai from 'sinon-chai'; - -use(chaiAsPromised); -use(sinonChai); -afterEach(() => { - restore(); -}); diff --git a/packages-old/performance/tsconfig.json b/packages-old/performance/tsconfig.json deleted file mode 100644 index a3c61dfddfd..00000000000 --- a/packages-old/performance/tsconfig.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "extends": "../../config/tsconfig.base.json", - "compilerOptions": { - "outDir": "dist", - "resolveJsonModule": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": true - }, - "exclude": ["dist/**/*"] -} diff --git a/packages-old/polyfill/README.md b/packages-old/polyfill/README.md deleted file mode 100644 index d30871dcfb7..00000000000 --- a/packages-old/polyfill/README.md +++ /dev/null @@ -1,7 +0,0 @@ -# @firebase/polyfill - -This is the a set of polyfills/shims used by the Firebase JS SDK. This package -is completely standalone and can be loaded to standardize environments for use -with the Firebase JS SDK. - -**This package is not intended for direct usage, and should only be used via the officially supported [firebase](https://www.npmjs.com/package/firebase) package.** diff --git a/packages-old/polyfill/index.ts b/packages-old/polyfill/index.ts deleted file mode 100644 index f3c9d3bd9ae..00000000000 --- a/packages-old/polyfill/index.ts +++ /dev/null @@ -1,41 +0,0 @@ -/** - * @license - * Copyright 2017 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// Fetch -import 'whatwg-fetch'; - -// Promise -import 'core-js/features/promise'; - -// ES Stable -import 'core-js/features/array/find'; -import 'core-js/features/array/find-index'; -import 'core-js/features/array/from'; -import 'core-js/features/array/some'; -import 'core-js/features/typed-array/iterator'; -import 'core-js/features/object/assign'; -import 'core-js/features/object/entries'; -import 'core-js/features/object/values'; -import 'core-js/features/string/includes'; -import 'core-js/features/string/starts-with'; -import 'core-js/features/string/repeat'; -import 'core-js/features/symbol'; -import 'core-js/features/symbol/iterator'; -import 'core-js/features/map'; -import 'core-js/features/set'; -import 'core-js/features/number/is-integer'; -import 'core-js/features/number/is-nan'; diff --git a/packages-old/polyfill/package.json b/packages-old/polyfill/package.json deleted file mode 100644 index 2c7c46ff670..00000000000 --- a/packages-old/polyfill/package.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "name": "@firebase/polyfill", - "version": "0.3.36", - "description": "", - "author": "Firebase (https://firebase.google.com/)", - "main": "dist/index.cjs.js", - "module": "dist/index.esm.js", - "files": [ - "dist" - ], - "scripts": { - "build": "rollup -c", - "dev": "rollup -c -w", - "test": "echo 'No test suite for polyfills'", - "test:ci": "echo 'No test suite for polyfills'" - }, - "license": "Apache-2.0", - "dependencies": { - "core-js": "3.15.1", - "promise-polyfill": "8.2.0", - "whatwg-fetch": "2.0.4" - }, - "devDependencies": { - "rollup": "2.52.2", - "rollup-plugin-typescript2": "0.30.0" - }, - "repository": { - "directory": "packages/polyfill", - "type": "git", - "url": "https://github.com/firebase/firebase-js-sdk.git" - }, - "bugs": { - "url": "https://github.com/firebase/firebase-js-sdk/issues" - }, - "typings": "dist/index.d.ts" -} diff --git a/packages-old/polyfill/rollup.config.js b/packages-old/polyfill/rollup.config.js deleted file mode 100644 index dd0f7b5c717..00000000000 --- a/packages-old/polyfill/rollup.config.js +++ /dev/null @@ -1,40 +0,0 @@ -/** - * @license - * Copyright 2018 Google Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import typescriptPlugin from 'rollup-plugin-typescript2'; -import typescript from 'typescript'; -import pkg from './package.json'; - -const plugins = [ - typescriptPlugin({ - typescript - }) -]; - -const deps = Object.keys( - Object.assign({}, pkg.peerDependencies, pkg.dependencies) -); - -export default { - input: 'index.ts', - output: [ - { file: pkg.main, format: 'cjs', sourcemap: true }, - { file: pkg.module, format: 'es', sourcemap: true } - ], - plugins, - external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)) -}; diff --git a/packages-old/polyfill/tsconfig.json b/packages-old/polyfill/tsconfig.json deleted file mode 100644 index 09f747b4d46..00000000000 --- a/packages-old/polyfill/tsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "../../config/tsconfig.base.json", - "compilerOptions": { - "outDir": "dist" - }, - "exclude": [ - "dist/**/*" - ] -} diff --git a/packages-old/remote-config/.eslintrc.js b/packages-old/remote-config/.eslintrc.js deleted file mode 100644 index 981af65e71a..00000000000 --- a/packages-old/remote-config/.eslintrc.js +++ /dev/null @@ -1,9 +0,0 @@ -module.exports = { - 'extends': '../../config/.eslintrc.js', - 'parserOptions': { - project: 'tsconfig.json', - // to make vscode-eslint work with monorepo - // https://github.com/typescript-eslint/typescript-eslint/issues/251#issuecomment-463943250 - tsconfigRootDir: __dirname - } -}; diff --git a/packages-old/remote-config/.npmignore b/packages-old/remote-config/.npmignore deleted file mode 100644 index 6de0b6d2896..00000000000 --- a/packages-old/remote-config/.npmignore +++ /dev/null @@ -1 +0,0 @@ -# This file is left intentionally blank \ No newline at end of file diff --git a/packages-old/remote-config/CHANGELOG.md b/packages-old/remote-config/CHANGELOG.md deleted file mode 100644 index 883cc23efb3..00000000000 --- a/packages-old/remote-config/CHANGELOG.md +++ /dev/null @@ -1,174 +0,0 @@ -# @firebase/remote-config - -## 0.1.42 - -### Patch Changes - -- Updated dependencies [[`a3cbe719b`](https://github.com/firebase/firebase-js-sdk/commit/a3cbe719b1bd733a5c4c15ee0d0e6388d512054c)]: - - @firebase/util@1.2.0 - - @firebase/component@0.5.5 - - @firebase/installations@0.4.31 - -## 0.1.41 - -### Patch Changes - -- Updated dependencies [[`56a6a9d4a`](https://github.com/firebase/firebase-js-sdk/commit/56a6a9d4af2766154584a0f66d3c4d8024d74ba5)]: - - @firebase/component@0.5.4 - - @firebase/installations@0.4.30 - -## 0.1.40 - -### Patch Changes - -- Updated dependencies [[`725ab4684`](https://github.com/firebase/firebase-js-sdk/commit/725ab4684ef0999a12f71e704c204a00fb030e5d)]: - - @firebase/component@0.5.3 - - @firebase/installations@0.4.29 - -## 0.1.39 - -### Patch Changes - -- Updated dependencies [[`4c4b6aed9`](https://github.com/firebase/firebase-js-sdk/commit/4c4b6aed9757c9a7e75fb698a15e53274f93880b)]: - - @firebase/component@0.5.2 - - @firebase/installations@0.4.28 - -## 0.1.38 - -### Patch Changes - -- Updated dependencies [[`5fbc5fb01`](https://github.com/firebase/firebase-js-sdk/commit/5fbc5fb0140d7da980fd7ebbfbae810f8c64ae19)]: - - @firebase/component@0.5.1 - - @firebase/installations@0.4.27 - -## 0.1.37 - -### Patch Changes - -- Updated dependencies [[`c34ac7a92`](https://github.com/firebase/firebase-js-sdk/commit/c34ac7a92a616915f38d192654db7770d81747ae), [`ac4ad08a2`](https://github.com/firebase/firebase-js-sdk/commit/ac4ad08a284397ec966e991dd388bb1fba857467)]: - - @firebase/component@0.5.0 - - @firebase/util@1.1.0 - - @firebase/installations@0.4.26 - -## 0.1.36 - -### Patch Changes - -- Updated dependencies [[`7354a0ed4`](https://github.com/firebase/firebase-js-sdk/commit/7354a0ed438f4e3df6577e4927e8c8f8f1fbbfda)]: - - @firebase/util@1.0.0 - - @firebase/component@0.4.1 - - @firebase/installations@0.4.25 - -## 0.1.35 - -### Patch Changes - -- Updated dependencies [[`f24d8961b`](https://github.com/firebase/firebase-js-sdk/commit/f24d8961b3b87821413297688803fc85113086b3)]: - - @firebase/component@0.4.0 - - @firebase/installations@0.4.24 - -## 0.1.34 - -### Patch Changes - -- Updated dependencies [[`de5f90501`](https://github.com/firebase/firebase-js-sdk/commit/de5f9050137acc9ed1490082e5aa429b5de3cb2a)]: - - @firebase/util@0.4.1 - - @firebase/component@0.3.1 - - @firebase/installations@0.4.23 - -## 0.1.33 - -### Patch Changes - -- [`5c1a83ed7`](https://github.com/firebase/firebase-js-sdk/commit/5c1a83ed70bae979322bd8751c0885d683ce4bf3) [#4595](https://github.com/firebase/firebase-js-sdk/pull/4595) - Component facotry now takes an options object. And added `Provider.initialize()` that can be used to pass an options object to the component factory. - -- Updated dependencies [[`5c1a83ed7`](https://github.com/firebase/firebase-js-sdk/commit/5c1a83ed70bae979322bd8751c0885d683ce4bf3)]: - - @firebase/component@0.3.0 - - @firebase/installations@0.4.22 - -## 0.1.32 - -### Patch Changes - -- Updated dependencies [[`ec95df3d0`](https://github.com/firebase/firebase-js-sdk/commit/ec95df3d07e5f091f2a7f7327e46417f64d04b4e)]: - - @firebase/util@0.4.0 - - @firebase/component@0.2.1 - - @firebase/installations@0.4.21 - -## 0.1.31 - -### Patch Changes - -- Updated dependencies [[`6afe42613`](https://github.com/firebase/firebase-js-sdk/commit/6afe42613ed3d7a842d378dc1a09a795811db2ac)]: - - @firebase/component@0.2.0 - - @firebase/installations@0.4.20 - -## 0.1.30 - -### Patch Changes - -- Updated dependencies [[`9cf727fcc`](https://github.com/firebase/firebase-js-sdk/commit/9cf727fcc3d049551b16ae0698ac33dc2fe45ada)]: - - @firebase/util@0.3.4 - - @firebase/component@0.1.21 - - @firebase/installations@0.4.19 - -## 0.1.29 - -### Patch Changes - -- [`a5768b0aa`](https://github.com/firebase/firebase-js-sdk/commit/a5768b0aa7d7ce732279931aa436e988c9f36487) [#3932](https://github.com/firebase/firebase-js-sdk/pull/3932) - Point browser field to esm build. Now you need to use default import instead of namespace import to import firebase. - - Before this change - - ``` - import * as firebase from 'firebase/app'; - ``` - - After this change - - ``` - import firebase from 'firebase/app'; - ``` - -- Updated dependencies [[`a5768b0aa`](https://github.com/firebase/firebase-js-sdk/commit/a5768b0aa7d7ce732279931aa436e988c9f36487), [`7d916d905`](https://github.com/firebase/firebase-js-sdk/commit/7d916d905ba16816ac8ac7c8748c83831ff614ce)]: - - @firebase/component@0.1.20 - - @firebase/util@0.3.3 - - @firebase/installations@0.4.18 - -## 0.1.28 - -### Patch Changes - -- [`fb3b095e4`](https://github.com/firebase/firebase-js-sdk/commit/fb3b095e4b7c8f57fdb3172bc039c84576abf290) [#2800](https://github.com/firebase/firebase-js-sdk/pull/2800) - Moved `calculateBackoffMillis()` exponential backoff function to util and have remote-config - import it from util. -- Updated dependencies [[`da1c7df79`](https://github.com/firebase/firebase-js-sdk/commit/da1c7df7982b08bbef82fcc8d93255f3e2d23cca), [`fb3b095e4`](https://github.com/firebase/firebase-js-sdk/commit/fb3b095e4b7c8f57fdb3172bc039c84576abf290)]: - - @firebase/component@0.1.19 - - @firebase/util@0.3.2 - - @firebase/installations@0.4.17 - -## 0.1.27 - -### Patch Changes - -- Updated dependencies [[`d4ca3da0`](https://github.com/firebase/firebase-js-sdk/commit/d4ca3da0a59fcea1261ba69d7eb663bba38d3089)]: - - @firebase/util@0.3.1 - - @firebase/component@0.1.18 - - @firebase/installations@0.4.16 - -## 0.1.26 - -### Patch Changes - -- Updated dependencies [[`a87676b8`](https://github.com/firebase/firebase-js-sdk/commit/a87676b84b78ccc2f057a22eb947a5d13402949c)]: - - @firebase/util@0.3.0 - - @firebase/component@0.1.17 - - @firebase/installations@0.4.15 - -## 0.1.25 - -### Patch Changes - -- Updated dependencies [[`a754645e`](https://github.com/firebase/firebase-js-sdk/commit/a754645ec2be1b8c205f25f510196eee298b0d6e)]: - - @firebase/component@0.1.16 - - @firebase/installations@0.4.14 - - @firebase/logger@0.2.6 diff --git a/packages-old/remote-config/README.md b/packages-old/remote-config/README.md deleted file mode 100644 index 1b21bbecc51..00000000000 --- a/packages-old/remote-config/README.md +++ /dev/null @@ -1,27 +0,0 @@ -# @firebase/remote-config - -This is the [Remote Config](https://firebase.google.com/docs/remote-config/) component of the -[Firebase JS SDK](https://www.npmjs.com/package/firebase). - -**This package is not intended for direct usage, and should only be used via the officially -supported [firebase](https://www.npmjs.com/package/firebase) package.** - -## Contributing - -Setup: - -1. Run `yarn` in repo root - -Format: - -1. Run `yarn prettier` in RC package - -Unit test: - -1. Run `yarn test` in RC package - -End-to-end test: - -1. Run `yarn build` in RC package -1. Run `yarn build` in Firebase package -1. Open test_app/index.html in a browser diff --git a/packages-old/remote-config/index.ts b/packages-old/remote-config/index.ts deleted file mode 100644 index ba4ae9eb034..00000000000 --- a/packages-old/remote-config/index.ts +++ /dev/null @@ -1,142 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import firebase from '@firebase/app'; -import '@firebase/installations'; -import { _FirebaseNamespace } from '@firebase/app-types/private'; -import { RemoteConfig as RemoteConfigType } from '@firebase/remote-config-types'; -import { CachingClient } from './src/client/caching_client'; -import { RestClient } from './src/client/rest_client'; -import { RemoteConfig } from './src/remote_config'; -import { Storage } from './src/storage/storage'; -import { StorageCache } from './src/storage/storage_cache'; -import { ERROR_FACTORY, ErrorCode } from './src/errors'; -import { RetryingClient } from './src/client/retrying_client'; -import { Logger, LogLevel as FirebaseLogLevel } from '@firebase/logger'; -import { name as packageName, version } from './package.json'; -import { - Component, - ComponentType, - ComponentContainer, - InstanceFactoryOptions -} from '@firebase/component'; - -// Facilitates debugging by enabling settings changes without rebuilding asset. -// Note these debug options are not part of a documented, supported API and can change at any time. -// Consolidates debug options for easier discovery. -// Uses transient variables on window to avoid lingering state causing panic. -declare global { - interface Window { - FIREBASE_REMOTE_CONFIG_URL_BASE: string; - } -} - -export function registerRemoteConfig( - firebaseInstance: _FirebaseNamespace -): void { - firebaseInstance.INTERNAL.registerComponent( - new Component( - 'remoteConfig', - remoteConfigFactory, - ComponentType.PUBLIC - ).setMultipleInstances(true) - ); - - firebaseInstance.registerVersion(packageName, version); - - function remoteConfigFactory( - container: ComponentContainer, - { instanceIdentifier: namespace }: InstanceFactoryOptions - ): RemoteConfig { - /* Dependencies */ - // getImmediate for FirebaseApp will always succeed - const app = container.getProvider('app').getImmediate(); - // The following call will always succeed because rc has `import '@firebase/installations'` - const installations = container.getProvider('installations').getImmediate(); - - // Guards against the SDK being used in non-browser environments. - if (typeof window === 'undefined') { - throw ERROR_FACTORY.create(ErrorCode.REGISTRATION_WINDOW); - } - - // Normalizes optional inputs. - const { projectId, apiKey, appId } = app.options; - if (!projectId) { - throw ERROR_FACTORY.create(ErrorCode.REGISTRATION_PROJECT_ID); - } - if (!apiKey) { - throw ERROR_FACTORY.create(ErrorCode.REGISTRATION_API_KEY); - } - if (!appId) { - throw ERROR_FACTORY.create(ErrorCode.REGISTRATION_APP_ID); - } - namespace = namespace || 'firebase'; - - const storage = new Storage(appId, app.name, namespace); - const storageCache = new StorageCache(storage); - - const logger = new Logger(packageName); - - // Sets ERROR as the default log level. - // See RemoteConfig#setLogLevel for corresponding normalization to ERROR log level. - logger.logLevel = FirebaseLogLevel.ERROR; - - const restClient = new RestClient( - installations, - // Uses the JS SDK version, by which the RC package version can be deduced, if necessary. - firebaseInstance.SDK_VERSION, - namespace, - projectId, - apiKey, - appId - ); - const retryingClient = new RetryingClient(restClient, storage); - const cachingClient = new CachingClient( - retryingClient, - storage, - storageCache, - logger - ); - - const remoteConfigInstance = new RemoteConfig( - app, - cachingClient, - storageCache, - storage, - logger - ); - - // Starts warming cache. - // eslint-disable-next-line @typescript-eslint/no-floating-promises - remoteConfigInstance.ensureInitialized(); - - return remoteConfigInstance; - } -} - -registerRemoteConfig(firebase as _FirebaseNamespace); - -declare module '@firebase/app-types' { - interface FirebaseNamespace { - remoteConfig?: { - (app?: FirebaseApp): RemoteConfigType; - }; - } - interface FirebaseApp { - remoteConfig(): RemoteConfigType; - } -} diff --git a/packages-old/remote-config/karma.conf.js b/packages-old/remote-config/karma.conf.js deleted file mode 100644 index 5006cd5a4ea..00000000000 --- a/packages-old/remote-config/karma.conf.js +++ /dev/null @@ -1,36 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -const karma = require('karma'); -const path = require('path'); -const karmaBase = require('../../config/karma.base'); - -const files = [`test/**/*`]; - -module.exports = function (config) { - const karmaConfig = Object.assign({}, karmaBase, { - // files to load into karma - files: files, - // frameworks to use - // available frameworks: https://npmjs.org/browse/keyword/karma-adapter - frameworks: ['mocha'] - }); - - config.set(karmaConfig); -}; - -module.exports.files = files; diff --git a/packages-old/remote-config/package.json b/packages-old/remote-config/package.json deleted file mode 100644 index b0ba42cf8e7..00000000000 --- a/packages-old/remote-config/package.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "name": "@firebase/remote-config", - "version": "0.1.42", - "description": "The Remote Config package of the Firebase JS SDK", - "author": "Firebase (https://firebase.google.com/)", - "main": "dist/index.cjs.js", - "browser": "dist/index.esm.js", - "module": "dist/index.esm.js", - "esm2017": "dist/index.esm2017.js", - "files": [ - "dist" - ], - "scripts": { - "lint": "eslint -c .eslintrc.js '**/*.ts' --ignore-path '../../.gitignore'", - "lint:fix": "eslint --fix -c .eslintrc.js '**/*.ts' --ignore-path '../../.gitignore'", - "build": "rollup -c", - "build:deps": "lerna run --scope @firebase/remote-config --include-dependencies build", - "dev": "rollup -c -w", - "test": "run-p lint test:browser", - "test:ci": "node ../../scripts/run_tests_in_ci.js -s test:browser", - "test:browser": "karma start --single-run", - "test:debug": "karma start --browsers=Chrome --auto-watch", - "prettier": "prettier --write '{src,test}/**/*.{js,ts}'" - }, - "peerDependencies": { - "@firebase/app": "0.x", - "@firebase/app-types": "0.x" - }, - "dependencies": { - "@firebase/installations": "0.4.31", - "@firebase/logger": "0.2.6", - "@firebase/remote-config-types": "0.1.9", - "@firebase/util": "1.2.0", - "@firebase/component": "0.5.5", - "tslib": "^2.1.0" - }, - "license": "Apache-2.0", - "devDependencies": { - "@firebase/app": "0.6.29", - "rollup": "2.52.2", - "rollup-plugin-typescript2": "0.30.0", - "typescript": "4.2.2" - }, - "repository": { - "directory": "packages/remote-config", - "type": "git", - "url": "https://github.com/firebase/firebase-js-sdk.git" - }, - "bugs": { - "url": "https://github.com/firebase/firebase-js-sdk/issues" - }, - "typings": "dist/index.d.ts", - "nyc": { - "extension": [ - ".ts" - ], - "reportDir": "./coverage/node" - } -} diff --git a/packages-old/remote-config/rollup.config.js b/packages-old/remote-config/rollup.config.js deleted file mode 100644 index b0a656084d5..00000000000 --- a/packages-old/remote-config/rollup.config.js +++ /dev/null @@ -1,83 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import json from '@rollup/plugin-json'; // Enables package.json import in TypeScript. -import typescriptPlugin from 'rollup-plugin-typescript2'; -import typescript from 'typescript'; -import pkg from './package.json'; - -const deps = Object.keys( - Object.assign({}, pkg.peerDependencies, pkg.dependencies) -); - -/** - * ES5 Builds - */ -const es5BuildPlugins = [ - typescriptPlugin({ - typescript - }), - json() -]; - -const es5Builds = [ - /** - * Browser Builds - */ - { - input: 'index.ts', - output: [ - { file: pkg.main, format: 'cjs', sourcemap: true }, - { file: pkg.module, format: 'es', sourcemap: true } - ], - plugins: es5BuildPlugins, - external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)) - } -]; - -/** - * ES2017 Builds - */ -const es2017BuildPlugins = [ - typescriptPlugin({ - typescript, - tsconfigOverride: { - compilerOptions: { - target: 'es2017' - } - } - }), - json({ preferConst: true }) -]; - -const es2017Builds = [ - /** - * Browser Builds - */ - { - input: 'index.ts', - output: { - file: pkg.esm2017, - format: 'es', - sourcemap: true - }, - plugins: es2017BuildPlugins, - external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)) - } -]; - -export default [...es5Builds, ...es2017Builds]; diff --git a/packages-old/remote-config/src/client/caching_client.ts b/packages-old/remote-config/src/client/caching_client.ts deleted file mode 100644 index aea61acfd1f..00000000000 --- a/packages-old/remote-config/src/client/caching_client.ts +++ /dev/null @@ -1,123 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { StorageCache } from '../storage/storage_cache'; -import { - FetchResponse, - RemoteConfigFetchClient, - FetchRequest -} from './remote_config_fetch_client'; -import { Storage } from '../storage/storage'; -import { Logger } from '@firebase/logger'; - -/** - * Implements the {@link RemoteConfigClient} abstraction with success response caching. - * - *

Comparable to the browser's Cache API for responses, but the Cache API requires a Service - * Worker, which requires HTTPS, which would significantly complicate SDK installation. Also, the - * Cache API doesn't support matching entries by time. - */ -export class CachingClient implements RemoteConfigFetchClient { - constructor( - private readonly client: RemoteConfigFetchClient, - private readonly storage: Storage, - private readonly storageCache: StorageCache, - private readonly logger: Logger - ) {} - - /** - * Returns true if the age of the cached fetched configs is less than or equal to - * {@link Settings#minimumFetchIntervalInSeconds}. - * - *

This is comparable to passing `headers = { 'Cache-Control': max-age }` to the - * native Fetch API. - * - *

Visible for testing. - */ - isCachedDataFresh( - cacheMaxAgeMillis: number, - lastSuccessfulFetchTimestampMillis: number | undefined - ): boolean { - // Cache can only be fresh if it's populated. - if (!lastSuccessfulFetchTimestampMillis) { - this.logger.debug('Config fetch cache check. Cache unpopulated.'); - return false; - } - - // Calculates age of cache entry. - const cacheAgeMillis = Date.now() - lastSuccessfulFetchTimestampMillis; - - const isCachedDataFresh = cacheAgeMillis <= cacheMaxAgeMillis; - - this.logger.debug( - 'Config fetch cache check.' + - ` Cache age millis: ${cacheAgeMillis}.` + - ` Cache max age millis (minimumFetchIntervalMillis setting): ${cacheMaxAgeMillis}.` + - ` Is cache hit: ${isCachedDataFresh}.` - ); - - return isCachedDataFresh; - } - - async fetch(request: FetchRequest): Promise { - // Reads from persisted storage to avoid cache miss if callers don't wait on initialization. - const [ - lastSuccessfulFetchTimestampMillis, - lastSuccessfulFetchResponse - ] = await Promise.all([ - this.storage.getLastSuccessfulFetchTimestampMillis(), - this.storage.getLastSuccessfulFetchResponse() - ]); - - // Exits early on cache hit. - if ( - lastSuccessfulFetchResponse && - this.isCachedDataFresh( - request.cacheMaxAgeMillis, - lastSuccessfulFetchTimestampMillis - ) - ) { - return lastSuccessfulFetchResponse; - } - - // Deviates from pure decorator by not honoring a passed ETag since we don't have a public API - // that allows the caller to pass an ETag. - request.eTag = - lastSuccessfulFetchResponse && lastSuccessfulFetchResponse.eTag; - - // Falls back to service on cache miss. - const response = await this.client.fetch(request); - - // Fetch throws for non-success responses, so success is guaranteed here. - - const storageOperations = [ - // Uses write-through cache for consistency with synchronous public API. - this.storageCache.setLastSuccessfulFetchTimestampMillis(Date.now()) - ]; - - if (response.status === 200) { - // Caches response only if it has changed, ie non-304 responses. - storageOperations.push( - this.storage.setLastSuccessfulFetchResponse(response) - ); - } - - await Promise.all(storageOperations); - - return response; - } -} diff --git a/packages-old/remote-config/src/client/remote_config_fetch_client.ts b/packages-old/remote-config/src/client/remote_config_fetch_client.ts deleted file mode 100644 index 25e00299855..00000000000 --- a/packages-old/remote-config/src/client/remote_config_fetch_client.ts +++ /dev/null @@ -1,139 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * Defines a client, as in https://en.wikipedia.org/wiki/Client%E2%80%93server_model, for the - * Remote Config server (https://firebase.google.com/docs/reference/remote-config/rest). - * - *

Abstracts throttle, response cache and network implementation details. - * - *

Modeled after the native {@link GlobalFetch} interface, which is relatively modern and - * convenient, but simplified for Remote Config's use case. - * - * Disambiguation: {@link GlobalFetch} interface and the Remote Config service define "fetch" - * methods. The RestClient uses the former to make HTTP calls. This interface abstracts the latter. - */ -export interface RemoteConfigFetchClient { - /** - * @throws if response status is not 200 or 304. - */ - fetch(request: FetchRequest): Promise; -} - -/** - * Defines a self-descriptive reference for config key-value pairs. - */ -export interface FirebaseRemoteConfigObject { - [key: string]: string; -} - -/** - * Shims a minimal AbortSignal. - * - *

AbortController's AbortSignal conveniently decouples fetch timeout logic from other aspects - * of networking, such as retries. Firebase doesn't use AbortController enough to justify a - * polyfill recommendation, like we do with the Fetch API, but this minimal shim can easily be - * swapped out if/when we do. - */ -export class RemoteConfigAbortSignal { - listeners: Array<() => void> = []; - addEventListener(listener: () => void): void { - this.listeners.push(listener); - } - abort(): void { - this.listeners.forEach(listener => listener()); - } -} - -/** - * Defines per-request inputs for the Remote Config fetch request. - * - *

Modeled after the native {@link Request} interface, but simplified for Remote Config's - * use case. - */ -export interface FetchRequest { - /** - * Uses cached config if it is younger than this age. - * - *

Required because it's defined by settings, which always have a value. - * - *

Comparable to passing `headers = { 'Cache-Control': max-age }` to the native - * Fetch API. - */ - cacheMaxAgeMillis: number; - - /** - * An event bus for the signal to abort a request. - * - *

Required because all requests should be abortable. - * - *

Comparable to the native - * Fetch API's "signal" field on its request configuration object - * https://fetch.spec.whatwg.org/#dom-requestinit-signal. - * - *

Disambiguation: Remote Config commonly refers to API inputs as - * "signals". See the private ConfigFetchRequestBody interface for those: - * http://google3/firebase/remote_config/web/src/core/rest_client.ts?l=14&rcl=255515243. - */ - signal: RemoteConfigAbortSignal; - - /** - * The ETag header value from the last response. - * - *

Optional in case this is the first request. - * - *

Comparable to passing `headers = { 'If-None-Match': }` to the native Fetch API. - */ - eTag?: string; -} - -/** - * Defines a successful response (200 or 304). - * - *

Modeled after the native {@link Response} interface, but simplified for Remote Config's - * use case. - */ -export interface FetchResponse { - /** - * The HTTP status, which is useful for differentiating success responses with data from - * those without. - * - *

{@link RemoteConfigClient} is modeled after the native {@link GlobalFetch} interface, so - * HTTP status is first-class. - * - *

Disambiguation: the fetch response returns a legacy "state" value that is redundant with the - * HTTP status code. The former is normalized into the latter. - */ - status: number; - - /** - * Defines the ETag response header value. - * - *

Only defined for 200 and 304 responses. - */ - eTag?: string; - - /** - * Defines the map of parameters returned as "entries" in the fetch response body. - * - *

Only defined for 200 responses. - */ - config?: FirebaseRemoteConfigObject; - - // Note: we're not extracting experiment metadata until - // ABT and Analytics have Web SDKs. -} diff --git a/packages-old/remote-config/src/client/rest_client.ts b/packages-old/remote-config/src/client/rest_client.ts deleted file mode 100644 index ced3bee4d63..00000000000 --- a/packages-old/remote-config/src/client/rest_client.ts +++ /dev/null @@ -1,176 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { FirebaseInstallations } from '@firebase/installations-types'; -import { - FetchResponse, - RemoteConfigFetchClient, - FirebaseRemoteConfigObject, - FetchRequest -} from './remote_config_fetch_client'; -import { ERROR_FACTORY, ErrorCode } from '../errors'; -import { getUserLanguage } from '../language'; - -/** - * Defines request body parameters required to call the fetch API: - * https://firebase.google.com/docs/reference/remote-config/rest - * - *

Not exported because this file encapsulates REST API specifics. - * - *

Not passing User Properties because Analytics' source of truth on Web is server-side. - */ -interface FetchRequestBody { - // Disables camelcase linting for request body params. - /* eslint-disable camelcase*/ - sdk_version: string; - app_instance_id: string; - app_instance_id_token: string; - app_id: string; - language_code: string; - /* eslint-enable camelcase */ -} - -/** - * Implements the Client abstraction for the Remote Config REST API. - */ -export class RestClient implements RemoteConfigFetchClient { - constructor( - private readonly firebaseInstallations: FirebaseInstallations, - private readonly sdkVersion: string, - private readonly namespace: string, - private readonly projectId: string, - private readonly apiKey: string, - private readonly appId: string - ) {} - - /** - * Fetches from the Remote Config REST API. - * - * @throws a {@link ErrorCode.FETCH_NETWORK} error if {@link GlobalFetch#fetch} can't - * connect to the network. - * @throws a {@link ErrorCode.FETCH_PARSE} error if {@link Response#json} can't parse the - * fetch response. - * @throws a {@link ErrorCode.FETCH_STATUS} error if the service returns an HTTP error status. - */ - async fetch(request: FetchRequest): Promise { - const [installationId, installationToken] = await Promise.all([ - this.firebaseInstallations.getId(), - this.firebaseInstallations.getToken() - ]); - - const urlBase = - window.FIREBASE_REMOTE_CONFIG_URL_BASE || - 'https://firebaseremoteconfig.googleapis.com'; - - const url = `${urlBase}/v1/projects/${this.projectId}/namespaces/${this.namespace}:fetch?key=${this.apiKey}`; - - const headers = { - 'Content-Type': 'application/json', - 'Content-Encoding': 'gzip', - // Deviates from pure decorator by not passing max-age header since we don't currently have - // service behavior using that header. - 'If-None-Match': request.eTag || '*' - }; - - const requestBody: FetchRequestBody = { - /* eslint-disable camelcase */ - sdk_version: this.sdkVersion, - app_instance_id: installationId, - app_instance_id_token: installationToken, - app_id: this.appId, - language_code: getUserLanguage() - /* eslint-enable camelcase */ - }; - - const options = { - method: 'POST', - headers, - body: JSON.stringify(requestBody) - }; - - // This logic isn't REST-specific, but shimming abort logic isn't worth another decorator. - const fetchPromise = fetch(url, options); - const timeoutPromise = new Promise((_resolve, reject) => { - // Maps async event listener to Promise API. - request.signal.addEventListener(() => { - // Emulates https://heycam.github.io/webidl/#aborterror - const error = new Error('The operation was aborted.'); - error.name = 'AbortError'; - reject(error); - }); - }); - - let response; - try { - await Promise.race([fetchPromise, timeoutPromise]); - response = await fetchPromise; - } catch (originalError) { - let errorCode = ErrorCode.FETCH_NETWORK; - if (originalError.name === 'AbortError') { - errorCode = ErrorCode.FETCH_TIMEOUT; - } - throw ERROR_FACTORY.create(errorCode, { - originalErrorMessage: originalError.message - }); - } - - let status = response.status; - - // Normalizes nullable header to optional. - const responseEtag = response.headers.get('ETag') || undefined; - - let config: FirebaseRemoteConfigObject | undefined; - let state: string | undefined; - - // JSON parsing throws SyntaxError if the response body isn't a JSON string. - // Requesting application/json and checking for a 200 ensures there's JSON data. - if (response.status === 200) { - let responseBody; - try { - responseBody = await response.json(); - } catch (originalError) { - throw ERROR_FACTORY.create(ErrorCode.FETCH_PARSE, { - originalErrorMessage: originalError.message - }); - } - config = responseBody['entries']; - state = responseBody['state']; - } - - // Normalizes based on legacy state. - if (state === 'INSTANCE_STATE_UNSPECIFIED') { - status = 500; - } else if (state === 'NO_CHANGE') { - status = 304; - } else if (state === 'NO_TEMPLATE' || state === 'EMPTY_CONFIG') { - // These cases can be fixed remotely, so normalize to safe value. - config = {}; - } - - // Normalize to exception-based control flow for non-success cases. - // Encapsulates HTTP specifics in this class as much as possible. Status is still the best for - // differentiating success states (200 from 304; the state body param is undefined in a - // standard 304). - if (status !== 304 && status !== 200) { - throw ERROR_FACTORY.create(ErrorCode.FETCH_STATUS, { - httpStatus: status - }); - } - - return { status, eTag: responseEtag, config }; - } -} diff --git a/packages-old/remote-config/src/client/retrying_client.ts b/packages-old/remote-config/src/client/retrying_client.ts deleted file mode 100644 index fe1737023df..00000000000 --- a/packages-old/remote-config/src/client/retrying_client.ts +++ /dev/null @@ -1,144 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { - RemoteConfigAbortSignal, - RemoteConfigFetchClient, - FetchResponse, - FetchRequest -} from './remote_config_fetch_client'; -import { ThrottleMetadata, Storage } from '../storage/storage'; -import { ErrorCode, ERROR_FACTORY } from '../errors'; -import { FirebaseError, calculateBackoffMillis } from '@firebase/util'; - -/** - * Supports waiting on a backoff by: - * - *

    - *
  • Promisifying setTimeout, so we can set a timeout in our Promise chain
  • - *
  • Listening on a signal bus for abort events, just like the Fetch API
  • - *
  • Failing in the same way the Fetch API fails, so timing out a live request and a throttled - * request appear the same.
  • - *
- * - *

Visible for testing. - */ -export function setAbortableTimeout( - signal: RemoteConfigAbortSignal, - throttleEndTimeMillis: number -): Promise { - return new Promise((resolve, reject) => { - // Derives backoff from given end time, normalizing negative numbers to zero. - const backoffMillis = Math.max(throttleEndTimeMillis - Date.now(), 0); - - const timeout = setTimeout(resolve, backoffMillis); - - // Adds listener, rather than sets onabort, because signal is a shared object. - signal.addEventListener(() => { - clearTimeout(timeout); - - // If the request completes before this timeout, the rejection has no effect. - reject( - ERROR_FACTORY.create(ErrorCode.FETCH_THROTTLE, { - throttleEndTimeMillis - }) - ); - }); - }); -} - -type RetriableError = FirebaseError & { customData: { httpStatus: string } }; -/** - * Returns true if the {@link Error} indicates a fetch request may succeed later. - */ -function isRetriableError(e: Error): e is RetriableError { - if (!(e instanceof FirebaseError) || !e.customData) { - return false; - } - - // Uses string index defined by ErrorData, which FirebaseError implements. - const httpStatus = Number(e.customData['httpStatus']); - - return ( - httpStatus === 429 || - httpStatus === 500 || - httpStatus === 503 || - httpStatus === 504 - ); -} - -/** - * Decorates a Client with retry logic. - * - *

Comparable to CachingClient, but uses backoff logic instead of cache max age and doesn't cache - * responses (because the SDK has no use for error responses). - */ -export class RetryingClient implements RemoteConfigFetchClient { - constructor( - private readonly client: RemoteConfigFetchClient, - private readonly storage: Storage - ) {} - - async fetch(request: FetchRequest): Promise { - const throttleMetadata = (await this.storage.getThrottleMetadata()) || { - backoffCount: 0, - throttleEndTimeMillis: Date.now() - }; - - return this.attemptFetch(request, throttleMetadata); - } - - /** - * A recursive helper for attempting a fetch request repeatedly. - * - * @throws any non-retriable errors. - */ - async attemptFetch( - request: FetchRequest, - { throttleEndTimeMillis, backoffCount }: ThrottleMetadata - ): Promise { - // Starts with a (potentially zero) timeout to support resumption from stored state. - // Ensures the throttle end time is honored if the last attempt timed out. - // Note the SDK will never make a request if the fetch timeout expires at this point. - await setAbortableTimeout(request.signal, throttleEndTimeMillis); - - try { - const response = await this.client.fetch(request); - - // Note the SDK only clears throttle state if response is success or non-retriable. - await this.storage.deleteThrottleMetadata(); - - return response; - } catch (e) { - if (!isRetriableError(e)) { - throw e; - } - - // Increments backoff state. - const throttleMetadata = { - throttleEndTimeMillis: - Date.now() + calculateBackoffMillis(backoffCount), - backoffCount: backoffCount + 1 - }; - - // Persists state. - await this.storage.setThrottleMetadata(throttleMetadata); - - return this.attemptFetch(request, throttleMetadata); - } - } -} diff --git a/packages-old/remote-config/src/errors.ts b/packages-old/remote-config/src/errors.ts deleted file mode 100644 index d4be9a09f76..00000000000 --- a/packages-old/remote-config/src/errors.ts +++ /dev/null @@ -1,97 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { ErrorFactory, FirebaseError } from '@firebase/util'; - -export const enum ErrorCode { - REGISTRATION_WINDOW = 'registration-window', - REGISTRATION_PROJECT_ID = 'registration-project-id', - REGISTRATION_API_KEY = 'registration-api-key', - REGISTRATION_APP_ID = 'registration-app-id', - STORAGE_OPEN = 'storage-open', - STORAGE_GET = 'storage-get', - STORAGE_SET = 'storage-set', - STORAGE_DELETE = 'storage-delete', - FETCH_NETWORK = 'fetch-client-network', - FETCH_TIMEOUT = 'fetch-timeout', - FETCH_THROTTLE = 'fetch-throttle', - FETCH_PARSE = 'fetch-client-parse', - FETCH_STATUS = 'fetch-status' -} - -const ERROR_DESCRIPTION_MAP: { readonly [key in ErrorCode]: string } = { - [ErrorCode.REGISTRATION_WINDOW]: - 'Undefined window object. This SDK only supports usage in a browser environment.', - [ErrorCode.REGISTRATION_PROJECT_ID]: - 'Undefined project identifier. Check Firebase app initialization.', - [ErrorCode.REGISTRATION_API_KEY]: - 'Undefined API key. Check Firebase app initialization.', - [ErrorCode.REGISTRATION_APP_ID]: - 'Undefined app identifier. Check Firebase app initialization.', - [ErrorCode.STORAGE_OPEN]: - 'Error thrown when opening storage. Original error: {$originalErrorMessage}.', - [ErrorCode.STORAGE_GET]: - 'Error thrown when reading from storage. Original error: {$originalErrorMessage}.', - [ErrorCode.STORAGE_SET]: - 'Error thrown when writing to storage. Original error: {$originalErrorMessage}.', - [ErrorCode.STORAGE_DELETE]: - 'Error thrown when deleting from storage. Original error: {$originalErrorMessage}.', - [ErrorCode.FETCH_NETWORK]: - 'Fetch client failed to connect to a network. Check Internet connection.' + - ' Original error: {$originalErrorMessage}.', - [ErrorCode.FETCH_TIMEOUT]: - 'The config fetch request timed out. ' + - ' Configure timeout using "fetchTimeoutMillis" SDK setting.', - [ErrorCode.FETCH_THROTTLE]: - 'The config fetch request timed out while in an exponential backoff state.' + - ' Configure timeout using "fetchTimeoutMillis" SDK setting.' + - ' Unix timestamp in milliseconds when fetch request throttling ends: {$throttleEndTimeMillis}.', - [ErrorCode.FETCH_PARSE]: - 'Fetch client could not parse response.' + - ' Original error: {$originalErrorMessage}.', - [ErrorCode.FETCH_STATUS]: - 'Fetch server returned an HTTP error status. HTTP status: {$httpStatus}.' -}; - -// Note this is effectively a type system binding a code to params. This approach overlaps with the -// role of TS interfaces, but works well for a few reasons: -// 1) JS is unaware of TS interfaces, eg we can't test for interface implementation in JS -// 2) callers should have access to a human-readable summary of the error and this interpolates -// params into an error message; -// 3) callers should be able to programmatically access data associated with an error, which -// ErrorData provides. -interface ErrorParams { - [ErrorCode.STORAGE_OPEN]: { originalErrorMessage: string | undefined }; - [ErrorCode.STORAGE_GET]: { originalErrorMessage: string | undefined }; - [ErrorCode.STORAGE_SET]: { originalErrorMessage: string | undefined }; - [ErrorCode.STORAGE_DELETE]: { originalErrorMessage: string | undefined }; - [ErrorCode.FETCH_NETWORK]: { originalErrorMessage: string }; - [ErrorCode.FETCH_THROTTLE]: { throttleEndTimeMillis: number }; - [ErrorCode.FETCH_PARSE]: { originalErrorMessage: string }; - [ErrorCode.FETCH_STATUS]: { httpStatus: number }; -} - -export const ERROR_FACTORY = new ErrorFactory( - 'remoteconfig' /* service */, - 'Remote Config' /* service name */, - ERROR_DESCRIPTION_MAP -); - -// Note how this is like typeof/instanceof, but for ErrorCode. -export function hasErrorCode(e: Error, errorCode: ErrorCode): boolean { - return e instanceof FirebaseError && e.code.indexOf(errorCode) !== -1; -} diff --git a/packages-old/remote-config/src/language.ts b/packages-old/remote-config/src/language.ts deleted file mode 100644 index 9c44ee275bf..00000000000 --- a/packages-old/remote-config/src/language.ts +++ /dev/null @@ -1,38 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * Attempts to get the most accurate browser language setting. - * - *

Adapted from getUserLanguage in packages/auth/src/utils.js for TypeScript. - * - *

Defers default language specification to server logic for consistency. - * - * @param navigatorLanguage Enables tests to override read-only {@link NavigatorLanguage}. - */ -export function getUserLanguage( - navigatorLanguage: NavigatorLanguage = navigator -): string { - return ( - // Most reliable, but only supported in Chrome/Firefox. - (navigatorLanguage.languages && navigatorLanguage.languages[0]) || - // Supported in most browsers, but returns the language of the browser - // UI, not the language set in browser settings. - navigatorLanguage.language - // Polyfill otherwise. - ); -} diff --git a/packages-old/remote-config/src/remote_config.ts b/packages-old/remote-config/src/remote_config.ts deleted file mode 100644 index 3afec56b515..00000000000 --- a/packages-old/remote-config/src/remote_config.ts +++ /dev/null @@ -1,219 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { FirebaseApp } from '@firebase/app-types'; -import { - RemoteConfig as RemoteConfigType, - FetchStatus, - Settings, - Value as ValueType, - LogLevel as RemoteConfigLogLevel -} from '@firebase/remote-config-types'; -import { StorageCache } from './storage/storage_cache'; -import { - RemoteConfigFetchClient, - RemoteConfigAbortSignal -} from './client/remote_config_fetch_client'; -import { Value } from './value'; -import { ErrorCode, hasErrorCode } from './errors'; -import { Storage } from './storage/storage'; -import { Logger, LogLevel as FirebaseLogLevel } from '@firebase/logger'; - -const DEFAULT_FETCH_TIMEOUT_MILLIS = 60 * 1000; // One minute -const DEFAULT_CACHE_MAX_AGE_MILLIS = 12 * 60 * 60 * 1000; // Twelve hours. - -/** - * Encapsulates business logic mapping network and storage dependencies to the public SDK API. - * - * See {@link https://github.com/FirebasePrivate/firebase-js-sdk/blob/master/packages/firebase/index.d.ts|interface documentation} for method descriptions. - */ -export class RemoteConfig implements RemoteConfigType { - // Tracks completion of initialization promise. - private _isInitializationComplete = false; - - // De-duplicates initialization calls. - private _initializePromise?: Promise; - - settings: Settings = { - fetchTimeoutMillis: DEFAULT_FETCH_TIMEOUT_MILLIS, - minimumFetchIntervalMillis: DEFAULT_CACHE_MAX_AGE_MILLIS - }; - - defaultConfig: { [key: string]: string | number | boolean } = {}; - - // Based on packages/firestore/src/util/log.ts but not static because we need per-instance levels - // to differentiate 2p and 3p use-cases. - setLogLevel(logLevel: RemoteConfigLogLevel): void { - switch (logLevel) { - case 'debug': - this._logger.logLevel = FirebaseLogLevel.DEBUG; - break; - case 'silent': - this._logger.logLevel = FirebaseLogLevel.SILENT; - break; - default: - this._logger.logLevel = FirebaseLogLevel.ERROR; - } - } - - get fetchTimeMillis(): number { - return this._storageCache.getLastSuccessfulFetchTimestampMillis() || -1; - } - - get lastFetchStatus(): FetchStatus { - return this._storageCache.getLastFetchStatus() || 'no-fetch-yet'; - } - - constructor( - // Required by FirebaseServiceFactory interface. - readonly app: FirebaseApp, - // JS doesn't support private yet - // (https://github.com/tc39/proposal-class-fields#private-fields), so we hint using an - // underscore prefix. - private readonly _client: RemoteConfigFetchClient, - private readonly _storageCache: StorageCache, - private readonly _storage: Storage, - private readonly _logger: Logger - ) {} - - async activate(): Promise { - const [lastSuccessfulFetchResponse, activeConfigEtag] = await Promise.all([ - this._storage.getLastSuccessfulFetchResponse(), - this._storage.getActiveConfigEtag() - ]); - if ( - !lastSuccessfulFetchResponse || - !lastSuccessfulFetchResponse.config || - !lastSuccessfulFetchResponse.eTag || - lastSuccessfulFetchResponse.eTag === activeConfigEtag - ) { - // Either there is no successful fetched config, or is the same as current active - // config. - return false; - } - await Promise.all([ - this._storageCache.setActiveConfig(lastSuccessfulFetchResponse.config), - this._storage.setActiveConfigEtag(lastSuccessfulFetchResponse.eTag) - ]); - return true; - } - - ensureInitialized(): Promise { - if (!this._initializePromise) { - this._initializePromise = this._storageCache - .loadFromStorage() - .then(() => { - this._isInitializationComplete = true; - }); - } - return this._initializePromise; - } - - /** - * @throws a {@link ErrorCode.FETCH_CLIENT_TIMEOUT} if the request takes longer than - * {@link Settings.fetchTimeoutInSeconds} or - * {@link DEFAULT_FETCH_TIMEOUT_SECONDS}. - */ - async fetch(): Promise { - // Aborts the request after the given timeout, causing the fetch call to - // reject with an AbortError. - // - //

Aborting after the request completes is a no-op, so we don't need a - // corresponding clearTimeout. - // - // Locating abort logic here because: - // * it uses a developer setting (timeout) - // * it applies to all retries (like curl's max-time arg) - // * it is consistent with the Fetch API's signal input - const abortSignal = new RemoteConfigAbortSignal(); - - setTimeout(async () => { - // Note a very low delay, eg < 10ms, can elapse before listeners are initialized. - abortSignal.abort(); - }, this.settings.fetchTimeoutMillis); - - // Catches *all* errors thrown by client so status can be set consistently. - try { - await this._client.fetch({ - cacheMaxAgeMillis: this.settings.minimumFetchIntervalMillis, - signal: abortSignal - }); - - await this._storageCache.setLastFetchStatus('success'); - } catch (e) { - const lastFetchStatus = hasErrorCode(e, ErrorCode.FETCH_THROTTLE) - ? 'throttle' - : 'failure'; - await this._storageCache.setLastFetchStatus(lastFetchStatus); - throw e; - } - } - - async fetchAndActivate(): Promise { - await this.fetch(); - return this.activate(); - } - - getAll(): { [key: string]: ValueType } { - return getAllKeys( - this._storageCache.getActiveConfig(), - this.defaultConfig - ).reduce((allConfigs, key) => { - allConfigs[key] = this.getValue(key); - return allConfigs; - }, {} as { [key: string]: ValueType }); - } - - getBoolean(key: string): boolean { - return this.getValue(key).asBoolean(); - } - - getNumber(key: string): number { - return this.getValue(key).asNumber(); - } - - getString(key: string): string { - return this.getValue(key).asString(); - } - - getValue(key: string): ValueType { - if (!this._isInitializationComplete) { - this._logger.debug( - `A value was requested for key "${key}" before SDK initialization completed.` + - ' Await on ensureInitialized if the intent was to get a previously activated value.' - ); - } - const activeConfig = this._storageCache.getActiveConfig(); - if (activeConfig && activeConfig[key] !== undefined) { - return new Value('remote', activeConfig[key]); - } else if (this.defaultConfig && this.defaultConfig[key] !== undefined) { - return new Value('default', String(this.defaultConfig[key])); - } - this._logger.debug( - `Returning static value for key "${key}".` + - ' Define a default or remote value if this is unintentional.' - ); - return new Value('static'); - } -} - -/** - * Dedupes and returns an array of all the keys of the received objects. - */ -function getAllKeys(obj1: {} = {}, obj2: {} = {}): string[] { - return Object.keys({ ...obj1, ...obj2 }); -} diff --git a/packages-old/remote-config/src/storage/storage.ts b/packages-old/remote-config/src/storage/storage.ts deleted file mode 100644 index f5f457161b1..00000000000 --- a/packages-old/remote-config/src/storage/storage.ts +++ /dev/null @@ -1,260 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { FetchStatus } from '@firebase/remote-config-types'; -import { - FetchResponse, - FirebaseRemoteConfigObject -} from '../client/remote_config_fetch_client'; -import { ERROR_FACTORY, ErrorCode } from '../errors'; -import { FirebaseError } from '@firebase/util'; - -/** - * Converts an error event associated with a {@link IDBRequest} to a {@link FirebaseError}. - */ -function toFirebaseError(event: Event, errorCode: ErrorCode): FirebaseError { - const originalError = (event.target as IDBRequest).error || undefined; - return ERROR_FACTORY.create(errorCode, { - originalErrorMessage: originalError && originalError.message - }); -} - -/** - * A general-purpose store keyed by app + namespace + {@link - * ProjectNamespaceKeyFieldValue}. - * - *

The Remote Config SDK can be used with multiple app installations, and each app can interact - * with multiple namespaces, so this store uses app (ID + name) and namespace as common parent keys - * for a set of key-value pairs. See {@link Storage#createCompositeKey}. - * - *

Visible for testing. - */ -export const APP_NAMESPACE_STORE = 'app_namespace_store'; - -const DB_NAME = 'firebase_remote_config'; -const DB_VERSION = 1; - -/** - * Encapsulates metadata concerning throttled fetch requests. - */ -export interface ThrottleMetadata { - // The number of times fetch has backed off. Used for resuming backoff after a timeout. - backoffCount: number; - // The Unix timestamp in milliseconds when callers can retry a request. - throttleEndTimeMillis: number; -} - -/** - * Provides type-safety for the "key" field used by {@link APP_NAMESPACE_STORE}. - * - *

This seems like a small price to avoid potentially subtle bugs caused by a typo. - */ -type ProjectNamespaceKeyFieldValue = - | 'active_config' - | 'active_config_etag' - | 'last_fetch_status' - | 'last_successful_fetch_timestamp_millis' - | 'last_successful_fetch_response' - | 'settings' - | 'throttle_metadata'; - -// Visible for testing. -export function openDatabase(): Promise { - return new Promise((resolve, reject) => { - const request = indexedDB.open(DB_NAME, DB_VERSION); - request.onerror = event => { - reject(toFirebaseError(event, ErrorCode.STORAGE_OPEN)); - }; - request.onsuccess = event => { - resolve((event.target as IDBOpenDBRequest).result); - }; - request.onupgradeneeded = event => { - const db = (event.target as IDBOpenDBRequest).result; - - // We don't use 'break' in this switch statement, the fall-through - // behavior is what we want, because if there are multiple versions between - // the old version and the current version, we want ALL the migrations - // that correspond to those versions to run, not only the last one. - // eslint-disable-next-line default-case - switch (event.oldVersion) { - case 0: - db.createObjectStore(APP_NAMESPACE_STORE, { - keyPath: 'compositeKey' - }); - } - }; - }); -} - -/** - * Abstracts data persistence. - */ -export class Storage { - /** - * @param appId enables storage segmentation by app (ID + name). - * @param appName enables storage segmentation by app (ID + name). - * @param namespace enables storage segmentation by namespace. - */ - constructor( - private readonly appId: string, - private readonly appName: string, - private readonly namespace: string, - private readonly openDbPromise = openDatabase() - ) {} - - getLastFetchStatus(): Promise { - return this.get('last_fetch_status'); - } - - setLastFetchStatus(status: FetchStatus): Promise { - return this.set('last_fetch_status', status); - } - - // This is comparable to a cache entry timestamp. If we need to expire other data, we could - // consider adding timestamp to all storage records and an optional max age arg to getters. - getLastSuccessfulFetchTimestampMillis(): Promise { - return this.get('last_successful_fetch_timestamp_millis'); - } - - setLastSuccessfulFetchTimestampMillis(timestamp: number): Promise { - return this.set( - 'last_successful_fetch_timestamp_millis', - timestamp - ); - } - - getLastSuccessfulFetchResponse(): Promise { - return this.get('last_successful_fetch_response'); - } - - setLastSuccessfulFetchResponse(response: FetchResponse): Promise { - return this.set('last_successful_fetch_response', response); - } - - getActiveConfig(): Promise { - return this.get('active_config'); - } - - setActiveConfig(config: FirebaseRemoteConfigObject): Promise { - return this.set('active_config', config); - } - - getActiveConfigEtag(): Promise { - return this.get('active_config_etag'); - } - - setActiveConfigEtag(etag: string): Promise { - return this.set('active_config_etag', etag); - } - - getThrottleMetadata(): Promise { - return this.get('throttle_metadata'); - } - - setThrottleMetadata(metadata: ThrottleMetadata): Promise { - return this.set('throttle_metadata', metadata); - } - - deleteThrottleMetadata(): Promise { - return this.delete('throttle_metadata'); - } - - async get(key: ProjectNamespaceKeyFieldValue): Promise { - const db = await this.openDbPromise; - return new Promise((resolve, reject) => { - const transaction = db.transaction([APP_NAMESPACE_STORE], 'readonly'); - const objectStore = transaction.objectStore(APP_NAMESPACE_STORE); - const compositeKey = this.createCompositeKey(key); - try { - const request = objectStore.get(compositeKey); - request.onerror = event => { - reject(toFirebaseError(event, ErrorCode.STORAGE_GET)); - }; - request.onsuccess = event => { - const result = (event.target as IDBRequest).result; - if (result) { - resolve(result.value); - } else { - resolve(undefined); - } - }; - } catch (e) { - reject( - ERROR_FACTORY.create(ErrorCode.STORAGE_GET, { - originalErrorMessage: e && e.message - }) - ); - } - }); - } - - async set(key: ProjectNamespaceKeyFieldValue, value: T): Promise { - const db = await this.openDbPromise; - return new Promise((resolve, reject) => { - const transaction = db.transaction([APP_NAMESPACE_STORE], 'readwrite'); - const objectStore = transaction.objectStore(APP_NAMESPACE_STORE); - const compositeKey = this.createCompositeKey(key); - try { - const request = objectStore.put({ - compositeKey, - value - }); - request.onerror = (event: Event) => { - reject(toFirebaseError(event, ErrorCode.STORAGE_SET)); - }; - request.onsuccess = () => { - resolve(); - }; - } catch (e) { - reject( - ERROR_FACTORY.create(ErrorCode.STORAGE_SET, { - originalErrorMessage: e && e.message - }) - ); - } - }); - } - - async delete(key: ProjectNamespaceKeyFieldValue): Promise { - const db = await this.openDbPromise; - return new Promise((resolve, reject) => { - const transaction = db.transaction([APP_NAMESPACE_STORE], 'readwrite'); - const objectStore = transaction.objectStore(APP_NAMESPACE_STORE); - const compositeKey = this.createCompositeKey(key); - try { - const request = objectStore.delete(compositeKey); - request.onerror = (event: Event) => { - reject(toFirebaseError(event, ErrorCode.STORAGE_DELETE)); - }; - request.onsuccess = () => { - resolve(); - }; - } catch (e) { - reject( - ERROR_FACTORY.create(ErrorCode.STORAGE_DELETE, { - originalErrorMessage: e && e.message - }) - ); - } - }); - } - - // Facilitates composite key functionality (which is unsupported in IE). - createCompositeKey(key: ProjectNamespaceKeyFieldValue): string { - return [this.appId, this.appName, this.namespace, key].join(); - } -} diff --git a/packages-old/remote-config/src/storage/storage_cache.ts b/packages-old/remote-config/src/storage/storage_cache.ts deleted file mode 100644 index 5ffbdba20c0..00000000000 --- a/packages-old/remote-config/src/storage/storage_cache.ts +++ /dev/null @@ -1,99 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { FetchStatus } from '@firebase/remote-config-types'; -import { FirebaseRemoteConfigObject } from '../client/remote_config_fetch_client'; -import { Storage } from './storage'; - -/** - * A memory cache layer over storage to support the SDK's synchronous read requirements. - */ -export class StorageCache { - constructor(private readonly storage: Storage) {} - - /** - * Memory caches. - */ - private lastFetchStatus?: FetchStatus; - private lastSuccessfulFetchTimestampMillis?: number; - private activeConfig?: FirebaseRemoteConfigObject; - - /** - * Memory-only getters - */ - getLastFetchStatus(): FetchStatus | undefined { - return this.lastFetchStatus; - } - - getLastSuccessfulFetchTimestampMillis(): number | undefined { - return this.lastSuccessfulFetchTimestampMillis; - } - - getActiveConfig(): FirebaseRemoteConfigObject | undefined { - return this.activeConfig; - } - - /** - * Read-ahead getter - */ - async loadFromStorage(): Promise { - const lastFetchStatusPromise = this.storage.getLastFetchStatus(); - const lastSuccessfulFetchTimestampMillisPromise = this.storage.getLastSuccessfulFetchTimestampMillis(); - const activeConfigPromise = this.storage.getActiveConfig(); - - // Note: - // 1. we consistently check for undefined to avoid clobbering defined values - // in memory - // 2. we defer awaiting to improve readability, as opposed to destructuring - // a Promise.all result, for example - - const lastFetchStatus = await lastFetchStatusPromise; - if (lastFetchStatus) { - this.lastFetchStatus = lastFetchStatus; - } - - const lastSuccessfulFetchTimestampMillis = await lastSuccessfulFetchTimestampMillisPromise; - if (lastSuccessfulFetchTimestampMillis) { - this.lastSuccessfulFetchTimestampMillis = lastSuccessfulFetchTimestampMillis; - } - - const activeConfig = await activeConfigPromise; - if (activeConfig) { - this.activeConfig = activeConfig; - } - } - - /** - * Write-through setters - */ - setLastFetchStatus(status: FetchStatus): Promise { - this.lastFetchStatus = status; - return this.storage.setLastFetchStatus(status); - } - - setLastSuccessfulFetchTimestampMillis( - timestampMillis: number - ): Promise { - this.lastSuccessfulFetchTimestampMillis = timestampMillis; - return this.storage.setLastSuccessfulFetchTimestampMillis(timestampMillis); - } - - setActiveConfig(activeConfig: FirebaseRemoteConfigObject): Promise { - this.activeConfig = activeConfig; - return this.storage.setActiveConfig(activeConfig); - } -} diff --git a/packages-old/remote-config/src/value.ts b/packages-old/remote-config/src/value.ts deleted file mode 100644 index f3fb6ff9581..00000000000 --- a/packages-old/remote-config/src/value.ts +++ /dev/null @@ -1,57 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { Value as ValueType, ValueSource } from '@firebase/remote-config-types'; - -const DEFAULT_VALUE_FOR_BOOLEAN = false; -const DEFAULT_VALUE_FOR_STRING = ''; -const DEFAULT_VALUE_FOR_NUMBER = 0; - -const BOOLEAN_TRUTHY_VALUES = ['1', 'true', 't', 'yes', 'y', 'on']; - -export class Value implements ValueType { - constructor( - private readonly _source: ValueSource, - private readonly _value: string = DEFAULT_VALUE_FOR_STRING - ) {} - - asString(): string { - return this._value; - } - - asBoolean(): boolean { - if (this._source === 'static') { - return DEFAULT_VALUE_FOR_BOOLEAN; - } - return BOOLEAN_TRUTHY_VALUES.indexOf(this._value.toLowerCase()) >= 0; - } - - asNumber(): number { - if (this._source === 'static') { - return DEFAULT_VALUE_FOR_NUMBER; - } - let num = Number(this._value); - if (isNaN(num)) { - num = DEFAULT_VALUE_FOR_NUMBER; - } - return num; - } - - getSource(): ValueSource { - return this._source; - } -} diff --git a/packages-old/remote-config/test/client/caching_client.test.ts b/packages-old/remote-config/test/client/caching_client.test.ts deleted file mode 100644 index a808dffb605..00000000000 --- a/packages-old/remote-config/test/client/caching_client.test.ts +++ /dev/null @@ -1,160 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import '../setup'; -import { expect } from 'chai'; -import { - RemoteConfigFetchClient, - FetchResponse, - FetchRequest, - RemoteConfigAbortSignal -} from '../../src/client/remote_config_fetch_client'; -import * as sinon from 'sinon'; -import { CachingClient } from '../../src/client/caching_client'; -import { StorageCache } from '../../src/storage/storage_cache'; -import { Storage } from '../../src/storage/storage'; -import { Logger } from '@firebase/logger'; - -const DEFAULT_REQUEST: FetchRequest = { - // Invalidates cache by default. - cacheMaxAgeMillis: 0, - signal: new RemoteConfigAbortSignal() -}; - -describe('CachingClient', () => { - const backingClient = {} as RemoteConfigFetchClient; - const storageCache = {} as StorageCache; - const logger = {} as Logger; - const storage = {} as Storage; - let cachingClient: CachingClient; - let clock: sinon.SinonFakeTimers; - - beforeEach(() => { - logger.debug = sinon.stub(); - cachingClient = new CachingClient( - backingClient, - storage, - storageCache, - logger - ); - clock = sinon.useFakeTimers({ now: 3000 }); // Mocks Date.now as 3000. - }); - - afterEach(() => { - clock.restore(); - }); - - describe('isCacheDataFresh', () => { - it('returns false if cached response is older than max age', () => { - expect( - cachingClient.isCachedDataFresh( - // Mocks a cache set when Date.now was 1000, ie it's two seconds old. - 1000, - // Tolerates a cache one second old. - 1000 - ) - ).to.be.false; - }); - - it('returns true if cached response is equal to max age', () => { - expect(cachingClient.isCachedDataFresh(2000, 1000)).to.be.true; - }); - - it('returns true if cached response is younger than max age', () => { - expect(cachingClient.isCachedDataFresh(3000, 1000)).to.be.true; - }); - }); - - describe('fetch', () => { - beforeEach(() => { - storage.getLastSuccessfulFetchTimestampMillis = sinon - .stub() - .returns(1000); // Mocks a cache set when Date.now was 1000, ie it's two seconds old. - storageCache.setLastSuccessfulFetchTimestampMillis = sinon.stub(); - storage.getLastSuccessfulFetchResponse = sinon.stub(); - storage.setLastSuccessfulFetchResponse = sinon.stub(); - backingClient.fetch = sinon.stub().returns(Promise.resolve({})); - }); - - it('exits early on cache hit', async () => { - const expectedResponse = { config: { eTag: 'etag', color: 'taupe' } }; - storage.getLastSuccessfulFetchResponse = sinon - .stub() - .returns(expectedResponse); - - const actualResponse = await cachingClient.fetch({ - cacheMaxAgeMillis: 2000, - signal: new RemoteConfigAbortSignal() - }); - - expect(actualResponse).to.deep.eq(expectedResponse); - expect(backingClient.fetch).not.to.have.been.called; - }); - - it('fetches on cache miss', async () => { - await cachingClient.fetch(DEFAULT_REQUEST); - - expect(backingClient.fetch).to.have.been.called; - }); - - it('passes etag from last successful fetch', async () => { - const lastSuccessfulFetchResponse = { eTag: 'etag' } as FetchResponse; - storage.getLastSuccessfulFetchResponse = sinon - .stub() - .returns(lastSuccessfulFetchResponse); - - await cachingClient.fetch(DEFAULT_REQUEST); - - expect(backingClient.fetch).to.have.been.calledWith( - Object.assign({}, DEFAULT_REQUEST, { - eTag: lastSuccessfulFetchResponse.eTag - }) - ); - }); - - it('caches timestamp and response if status is 200', async () => { - const response = { - status: 200, - eTag: 'etag', - config: { color: 'clear' } - }; - backingClient.fetch = sinon.stub().returns(Promise.resolve(response)); - - await cachingClient.fetch(DEFAULT_REQUEST); - - expect( - storageCache.setLastSuccessfulFetchTimestampMillis - ).to.have.been.calledWith(3000); // Based on mock timer in beforeEach. - expect(storage.setLastSuccessfulFetchResponse).to.have.been.calledWith( - response - ); - }); - - it('sets timestamp, but not config, if 304', async () => { - backingClient.fetch = sinon - .stub() - .returns(Promise.resolve({ status: 304 })); - - await cachingClient.fetch(DEFAULT_REQUEST); - - expect( - storageCache.setLastSuccessfulFetchTimestampMillis - ).to.have.been.calledWith(3000); // Based on mock timer in beforeEach. - expect(storage.setLastSuccessfulFetchResponse).not.to.have.been.called; - }); - }); -}); diff --git a/packages-old/remote-config/test/client/rest_client.test.ts b/packages-old/remote-config/test/client/rest_client.test.ts deleted file mode 100644 index 89b745dacca..00000000000 --- a/packages-old/remote-config/test/client/rest_client.test.ts +++ /dev/null @@ -1,270 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import '../setup'; -import { expect } from 'chai'; -import { RestClient } from '../../src/client/rest_client'; -import { FirebaseInstallations } from '@firebase/installations-types'; -import * as sinon from 'sinon'; -import { ERROR_FACTORY, ErrorCode } from '../../src/errors'; -import { FirebaseError } from '@firebase/util'; -import { - FetchRequest, - RemoteConfigAbortSignal -} from '../../src/client/remote_config_fetch_client'; - -const DEFAULT_REQUEST: FetchRequest = { - cacheMaxAgeMillis: 1, - signal: new RemoteConfigAbortSignal() -}; - -describe('RestClient', () => { - const firebaseInstallations = {} as FirebaseInstallations; - let client: RestClient; - - beforeEach(() => { - client = new RestClient( - firebaseInstallations, - 'sdk-version', - 'namespace', - 'project-id', - 'api-key', - 'app-id' - ); - firebaseInstallations.getId = sinon - .stub() - .returns(Promise.resolve('fis-id')); - firebaseInstallations.getToken = sinon - .stub() - .returns(Promise.resolve('fis-token')); - }); - - describe('fetch', () => { - let fetchStub: sinon.SinonStub< - [RequestInfo, RequestInit?], - Promise - >; - - beforeEach(() => { - fetchStub = sinon - .stub(window, 'fetch') - .returns(Promise.resolve(new Response('{}'))); - }); - - afterEach(() => { - fetchStub.restore(); - }); - - it('handles 200/UPDATE responses', async () => { - const expectedResponse = { - status: 200, - eTag: 'etag', - state: 'UPDATE', - entries: { color: 'sparkling' } - }; - - fetchStub.returns( - Promise.resolve({ - ok: true, - status: expectedResponse.status, - headers: new Headers({ ETag: expectedResponse.eTag }), - json: () => - Promise.resolve({ - entries: expectedResponse.entries, - state: expectedResponse.state - }) - } as Response) - ); - - const response = await client.fetch(DEFAULT_REQUEST); - - expect(response).to.deep.eq({ - status: expectedResponse.status, - eTag: expectedResponse.eTag, - config: expectedResponse.entries - }); - }); - - it('calls the correct endpoint', async () => { - await client.fetch(DEFAULT_REQUEST); - - expect(fetchStub).to.be.calledWith( - 'https://firebaseremoteconfig.googleapis.com/v1/projects/project-id/namespaces/namespace:fetch?key=api-key', - sinon.match.object - ); - }); - - it('passes injected params', async () => { - await client.fetch(DEFAULT_REQUEST); - - expect(fetchStub).to.be.calledWith( - sinon.match.string, - sinon.match({ - body: - '{"sdk_version":"sdk-version","app_instance_id":"fis-id","app_instance_id_token":"fis-token","app_id":"app-id","language_code":"en-US"}' - }) - ); - }); - - it('throws on network failure', async () => { - // The Fetch API throws a TypeError on network falure: - // https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Exceptions - const originalError = new TypeError('Network request failed'); - fetchStub.returns(Promise.reject(originalError)); - - const fetchPromise = client.fetch(DEFAULT_REQUEST); - - const firebaseError = ERROR_FACTORY.create(ErrorCode.FETCH_NETWORK, { - originalErrorMessage: originalError.message - }); - - await expect(fetchPromise) - .to.eventually.be.rejectedWith(FirebaseError, firebaseError.message) - .with.nested.property( - 'customData.originalErrorMessage', - 'Network request failed' - ); - }); - - it('throws on JSON parse failure', async () => { - // JSON parsing throws a SyntaxError on failure: - // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Exceptions - const res = new Response(/* empty body */); - sinon - .stub(res, 'json') - .throws(new SyntaxError('Unexpected end of input')); - fetchStub.returns(Promise.resolve(res)); - - const fetchPromise = client.fetch(DEFAULT_REQUEST); - - const firebaseError = ERROR_FACTORY.create(ErrorCode.FETCH_PARSE, { - originalErrorMessage: 'Unexpected end of input' - }); - - await expect(fetchPromise) - .to.eventually.be.rejectedWith(FirebaseError, firebaseError.message) - .with.nested.property( - 'customData.originalErrorMessage', - 'Unexpected end of input' - ); - }); - - it('handles 304 status code and empty body', async () => { - fetchStub.returns( - Promise.resolve({ - status: 304, - headers: new Headers({ ETag: 'response-etag' }) - } as Response) - ); - - const response = await client.fetch( - Object.assign({}, DEFAULT_REQUEST, { - eTag: 'request-etag' - }) - ); - - expect(fetchStub).to.be.calledWith( - sinon.match.string, - sinon.match({ headers: { 'If-None-Match': 'request-etag' } }) - ); - - expect(response).to.deep.eq({ - status: 304, - eTag: 'response-etag', - config: undefined - }); - }); - - it('normalizes INSTANCE_STATE_UNSPECIFIED state to server error', async () => { - fetchStub.returns( - Promise.resolve({ - status: 200, - headers: new Headers({ ETag: 'etag' }), - json: async () => ({ state: 'INSTANCE_STATE_UNSPECIFIED' }) - } as Response) - ); - - const fetchPromise = client.fetch(DEFAULT_REQUEST); - - const error = ERROR_FACTORY.create(ErrorCode.FETCH_STATUS, { - httpStatus: 500 - }); - - await expect(fetchPromise) - .to.eventually.be.rejectedWith(FirebaseError, error.message) - .with.nested.property('customData.httpStatus', 500); - }); - - it('normalizes NO_CHANGE state to 304 status', async () => { - fetchStub.returns( - Promise.resolve({ - status: 200, - headers: new Headers({ ETag: 'etag' }), - json: async () => ({ state: 'NO_CHANGE' }) - } as Response) - ); - - const response = await client.fetch(DEFAULT_REQUEST); - - expect(response).to.deep.eq({ - status: 304, - eTag: 'etag', - config: undefined - }); - }); - - it('normalizes empty change states', async () => { - for (const state of ['NO_TEMPLATE', 'EMPTY_CONFIG']) { - fetchStub.returns( - Promise.resolve({ - status: 200, - headers: new Headers({ ETag: 'etag' }), - json: async () => ({ state }) - } as Response) - ); - - await expect(client.fetch(DEFAULT_REQUEST)).to.eventually.be.deep.eq({ - status: 200, - eTag: 'etag', - config: {} - }); - } - }); - - it('throws error on HTTP error status', async () => { - // Error codes from logs plus an arbitrary unexpected code (300) - for (const status of [300, 400, 403, 404, 415, 429, 500, 503, 504]) { - fetchStub.returns( - Promise.resolve({ - status, - headers: new Headers() - } as Response) - ); - - const fetchPromise = client.fetch(DEFAULT_REQUEST); - - const error = ERROR_FACTORY.create(ErrorCode.FETCH_STATUS, { - httpStatus: status - }); - - await expect(fetchPromise) - .to.eventually.be.rejectedWith(FirebaseError, error.message) - .with.nested.property('customData.httpStatus', status); - } - }); - }); -}); diff --git a/packages-old/remote-config/test/client/retrying_client.test.ts b/packages-old/remote-config/test/client/retrying_client.test.ts deleted file mode 100644 index 65641b438bd..00000000000 --- a/packages-old/remote-config/test/client/retrying_client.test.ts +++ /dev/null @@ -1,218 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { expect } from 'chai'; -import * as sinon from 'sinon'; -import { Storage, ThrottleMetadata } from '../../src/storage/storage'; -import { - RemoteConfigFetchClient, - FetchRequest, - FetchResponse, - RemoteConfigAbortSignal -} from '../../src/client/remote_config_fetch_client'; -import { - setAbortableTimeout, - RetryingClient -} from '../../src/client/retrying_client'; -import { ErrorCode, ERROR_FACTORY } from '../../src/errors'; -import '../setup'; - -const DEFAULT_REQUEST: FetchRequest = { - cacheMaxAgeMillis: 1, - signal: new RemoteConfigAbortSignal() -}; - -describe('RetryingClient', () => { - let backingClient: RemoteConfigFetchClient; - let storage: Storage; - let retryingClient: RetryingClient; - let abortSignal: RemoteConfigAbortSignal; - - beforeEach(() => { - backingClient = {} as RemoteConfigFetchClient; - storage = {} as Storage; - retryingClient = new RetryingClient(backingClient, storage); - storage.getThrottleMetadata = sinon.stub().returns(Promise.resolve()); - storage.deleteThrottleMetadata = sinon.stub().returns(Promise.resolve()); - storage.setThrottleMetadata = sinon.stub().returns(Promise.resolve()); - backingClient.fetch = sinon - .stub() - .returns(Promise.resolve({ status: 200 })); - abortSignal = new RemoteConfigAbortSignal(); - }); - - describe('setAbortableTimeout', () => { - let clock: sinon.SinonFakeTimers; - - beforeEach(() => { - // Sets Date.now() to zero. - clock = sinon.useFakeTimers(); - }); - - afterEach(() => { - clock.restore(); - }); - - it('Derives backoff from end time', async () => { - const setTimeoutSpy = sinon.spy(window, 'setTimeout'); - - const timeoutPromise = setAbortableTimeout(abortSignal, Date.now() + 1); - - // Advances mocked clock so setTimeout logic runs. - clock.runAll(); - - await timeoutPromise; - - expect(setTimeoutSpy).to.have.been.calledWith(sinon.match.any, 1); - }); - - it('Normalizes end time in the past to zero backoff', async () => { - const setTimeoutSpy = sinon.spy(window, 'setTimeout'); - - const timeoutPromise = setAbortableTimeout(abortSignal, Date.now() - 1); - - // Advances mocked clock so setTimeout logic runs. - clock.runAll(); - - await timeoutPromise; - - expect(setTimeoutSpy).to.have.been.calledWith(sinon.match.any, 0); - - setTimeoutSpy.restore(); - }); - - it('listens for abort event and rejects promise', async () => { - const throttleEndTimeMillis = 1000; - - const timeoutPromise = setAbortableTimeout( - abortSignal, - throttleEndTimeMillis - ); - - abortSignal.abort(); - - const expectedError = ERROR_FACTORY.create(ErrorCode.FETCH_THROTTLE, { - throttleEndTimeMillis - }); - - await expect(timeoutPromise).to.eventually.be.rejectedWith( - expectedError.message - ); - }); - }); - - describe('fetch', () => { - it('returns success response', async () => { - const setTimeoutSpy = sinon.spy(window, 'setTimeout'); - - const expectedResponse: FetchResponse = { - status: 200, - eTag: 'etag', - config: {} - }; - backingClient.fetch = sinon - .stub() - .returns(Promise.resolve(expectedResponse)); - - const actualResponse = retryingClient.fetch(DEFAULT_REQUEST); - - await expect(actualResponse).to.eventually.deep.eq(expectedResponse); - - // Asserts setTimeout is passed a zero delay, since throttleEndTimeMillis is set to Date.now, - // which is faked to be a constant. - expect(setTimeoutSpy).to.have.been.calledWith(sinon.match.any, 0); - - expect(storage.deleteThrottleMetadata).to.have.been.called; - - setTimeoutSpy.restore(); - }); - - it('rethrows unretriable errors rather than retrying', async () => { - const expectedError = ERROR_FACTORY.create(ErrorCode.FETCH_STATUS, { - httpStatus: 400 - }); - backingClient.fetch = sinon.stub().returns(Promise.reject(expectedError)); - - const fetchPromise = retryingClient.fetch(DEFAULT_REQUEST); - - await expect(fetchPromise).to.eventually.be.rejectedWith(expectedError); - }); - - it('retries on retriable errors', async () => { - // Configures Date.now() to advance clock from zero in 20ms increments, enabling - // tests to assert a known throttle end time and allow setTimeout to work. - const clock = sinon.useFakeTimers({ shouldAdvanceTime: true }); - - // Ensures backoff is always zero, which simplifies reasoning about timer. - const powSpy = sinon.stub(Math, 'pow').returns(0); - const randomSpy = sinon.stub(Math, 'random').returns(0.5); - - // Simulates a service call that returns errors several times before returning success. - // Error codes from logs. - const errorResponseStatuses = [429, 500, 503, 504]; - const errorResponseCount = errorResponseStatuses.length; - - backingClient.fetch = sinon.stub().callsFake(() => { - const httpStatus = errorResponseStatuses.pop(); - - if (httpStatus) { - // Triggers retry by returning a retriable status code. - const expectedError = ERROR_FACTORY.create(ErrorCode.FETCH_STATUS, { - httpStatus - }); - return Promise.reject(expectedError); - } - - // Halts retrying by returning success. - // Note backoff never terminates if the server always errors. - return Promise.resolve({ status: 200 }); - }); - - await retryingClient.fetch(DEFAULT_REQUEST); - - // Asserts throttle metadata was persisted after each error response. - for (let i = 1; i <= errorResponseCount; i++) { - expect(storage.setThrottleMetadata).to.have.been.calledWith({ - backoffCount: i, - throttleEndTimeMillis: i * 20 - }); - } - - powSpy.restore(); - randomSpy.restore(); - clock.restore(); - }); - }); - - describe('attemptFetch', () => { - it('honors metadata when initializing', async () => { - const clock = sinon.useFakeTimers({ shouldAdvanceTime: true }); - const setTimeoutSpy = sinon.spy(window, 'setTimeout'); - - const throttleMetadata = { - throttleEndTimeMillis: 123 - } as ThrottleMetadata; - - await retryingClient.attemptFetch(DEFAULT_REQUEST, throttleMetadata); - - expect(setTimeoutSpy).to.have.been.calledWith(sinon.match.any, 123); - - clock.restore(); - setTimeoutSpy.restore(); - }); - }); -}); diff --git a/packages-old/remote-config/test/errors.test.ts b/packages-old/remote-config/test/errors.test.ts deleted file mode 100644 index 67d41bfa505..00000000000 --- a/packages-old/remote-config/test/errors.test.ts +++ /dev/null @@ -1,31 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { expect } from 'chai'; -import { hasErrorCode, ERROR_FACTORY, ErrorCode } from '../src/errors'; -import './setup'; - -describe('hasErrorCode', () => { - it('defaults false', () => { - const error = new Error(); - expect(hasErrorCode(error, ErrorCode.REGISTRATION_PROJECT_ID)).to.be.false; - }); - it('returns true for FirebaseError with given code', () => { - const error = ERROR_FACTORY.create(ErrorCode.REGISTRATION_PROJECT_ID); - expect(hasErrorCode(error, ErrorCode.REGISTRATION_PROJECT_ID)).to.be.true; - }); -}); diff --git a/packages-old/remote-config/test/language.test.ts b/packages-old/remote-config/test/language.test.ts deleted file mode 100644 index a92630467d4..00000000000 --- a/packages-old/remote-config/test/language.test.ts +++ /dev/null @@ -1,44 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { expect } from 'chai'; -import { getUserLanguage } from '../src/language'; -import './setup'; - -// Adapts getUserLanguage tests from packages/auth/test/utils_test.js for TypeScript. -describe('getUserLanguage', () => { - it('prioritizes navigator.languages', () => { - expect( - getUserLanguage({ - languages: ['de', 'en'], - language: 'en' - }) - ).to.eq('de'); - }); - - it('falls back to navigator.language', () => { - expect( - getUserLanguage({ - language: 'en' - } as NavigatorLanguage) - ).to.eq('en'); - }); - - it('defaults undefined', () => { - expect(getUserLanguage({} as NavigatorLanguage)).to.be.undefined; - }); -}); diff --git a/packages-old/remote-config/test/remote_config.test.ts b/packages-old/remote-config/test/remote_config.test.ts deleted file mode 100644 index 5cd8a05b474..00000000000 --- a/packages-old/remote-config/test/remote_config.test.ts +++ /dev/null @@ -1,505 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { FirebaseApp } from '@firebase/app-types'; -import { - RemoteConfig as RemoteConfigType, - LogLevel as RemoteConfigLogLevel -} from '@firebase/remote-config-types'; -import { expect } from 'chai'; -import * as sinon from 'sinon'; -import { StorageCache } from '../src/storage/storage_cache'; -import { Storage } from '../src/storage/storage'; -import { RemoteConfig } from '../src/remote_config'; -import { - RemoteConfigFetchClient, - FetchResponse -} from '../src/client/remote_config_fetch_client'; -import { Value } from '../src/value'; -import './setup'; -import { ERROR_FACTORY, ErrorCode } from '../src/errors'; -import { Logger, LogLevel as FirebaseLogLevel } from '@firebase/logger'; - -describe('RemoteConfig', () => { - const ACTIVE_CONFIG = { - key1: 'active_config_value_1', - key2: 'active_config_value_2', - key3: 'true', - key4: '123' - }; - const DEFAULT_CONFIG = { - key1: 'default_config_value_1', - key2: 'default_config_value_2', - key3: 'false', - key4: '345', - test: 'test' - }; - - let app: FirebaseApp; - let client: RemoteConfigFetchClient; - let storageCache: StorageCache; - let storage: Storage; - let logger: Logger; - let rc: RemoteConfigType; - - let getActiveConfigStub: sinon.SinonStub; - let loggerDebugSpy: sinon.SinonSpy; - let loggerLogLevelSpy: any; - - beforeEach(() => { - // Clears stubbed behavior between each test. - app = {} as FirebaseApp; - client = {} as RemoteConfigFetchClient; - storageCache = {} as StorageCache; - storage = {} as Storage; - logger = new Logger('package-name'); - getActiveConfigStub = sinon.stub().returns(undefined); - storageCache.getActiveConfig = getActiveConfigStub; - loggerDebugSpy = sinon.spy(logger, 'debug'); - loggerLogLevelSpy = sinon.spy(logger, 'logLevel', ['set']); - rc = new RemoteConfig(app, client, storageCache, storage, logger); - }); - - afterEach(() => { - loggerDebugSpy.restore(); - loggerLogLevelSpy.restore(); - }); - - // Adapts getUserLanguage tests from packages/auth/test/utils_test.js for TypeScript. - describe('setLogLevel', () => { - it('proxies to the FirebaseLogger instance', () => { - rc.setLogLevel('debug'); - - // Casts spy to any because property setters aren't defined on the SinonSpy type. - expect(loggerLogLevelSpy.set).to.have.been.calledWith( - FirebaseLogLevel.DEBUG - ); - }); - - it('normalizes levels other than DEBUG and SILENT to ERROR', () => { - for (const logLevel of ['info', 'verbose', 'error', 'severe']) { - rc.setLogLevel(logLevel as RemoteConfigLogLevel); - - // Casts spy to any because property setters aren't defined on the SinonSpy type. - expect(loggerLogLevelSpy.set).to.have.been.calledWith( - FirebaseLogLevel.ERROR - ); - } - }); - }); - - describe('ensureInitialized', () => { - it('warms cache', async () => { - storageCache.loadFromStorage = sinon.stub().returns(Promise.resolve()); - - await rc.ensureInitialized(); - - expect(storageCache.loadFromStorage).to.have.been.calledOnce; - }); - - it('de-duplicates repeated calls', async () => { - storageCache.loadFromStorage = sinon.stub().returns(Promise.resolve()); - - await rc.ensureInitialized(); - await rc.ensureInitialized(); - - expect(storageCache.loadFromStorage).to.have.been.calledOnce; - }); - }); - - describe('fetchTimeMillis', () => { - it('normalizes undefined values', async () => { - storageCache.getLastSuccessfulFetchTimestampMillis = sinon - .stub() - .returns(undefined); - - expect(rc.fetchTimeMillis).to.eq(-1); - }); - - it('reads from cache', async () => { - const lastFetchTimeMillis = 123; - - storageCache.getLastSuccessfulFetchTimestampMillis = sinon - .stub() - .returns(lastFetchTimeMillis); - - expect(rc.fetchTimeMillis).to.eq(lastFetchTimeMillis); - }); - }); - - describe('lastFetchStatus', () => { - it('normalizes undefined values', async () => { - storageCache.getLastFetchStatus = sinon.stub().returns(undefined); - - expect(rc.lastFetchStatus).to.eq('no-fetch-yet'); - }); - - it('reads from cache', async () => { - const lastFetchStatus = 'success'; - - storageCache.getLastFetchStatus = sinon.stub().returns(lastFetchStatus); - - expect(rc.lastFetchStatus).to.eq(lastFetchStatus); - }); - }); - - describe('getValue', () => { - it('returns the active value if available', () => { - getActiveConfigStub.returns(ACTIVE_CONFIG); - rc.defaultConfig = DEFAULT_CONFIG; - - expect(rc.getValue('key1')).to.deep.eq( - new Value('remote', ACTIVE_CONFIG.key1) - ); - }); - - it('returns the default value if active is not available', () => { - rc.defaultConfig = DEFAULT_CONFIG; - - expect(rc.getValue('key1')).to.deep.eq( - new Value('default', DEFAULT_CONFIG.key1) - ); - }); - - it('returns the stringified default boolean values if active is not available', () => { - const DEFAULTS = { trueVal: true, falseVal: false }; - rc.defaultConfig = DEFAULTS; - - expect(rc.getValue('trueVal')).to.deep.eq( - new Value('default', String(DEFAULTS.trueVal)) - ); - expect(rc.getValue('falseVal')).to.deep.eq( - new Value('default', String(DEFAULTS.falseVal)) - ); - }); - - it('returns the stringified default numeric values if active is not available', () => { - const DEFAULTS = { negative: -1, zero: 0, positive: 11 }; - rc.defaultConfig = DEFAULTS; - - expect(rc.getValue('negative')).to.deep.eq( - new Value('default', String(DEFAULTS.negative)) - ); - expect(rc.getValue('zero')).to.deep.eq( - new Value('default', String(DEFAULTS.zero)) - ); - expect(rc.getValue('positive')).to.deep.eq( - new Value('default', String(DEFAULTS.positive)) - ); - }); - - it('returns the static value if active and default are not available', () => { - expect(rc.getValue('key1')).to.deep.eq(new Value('static')); - - // Asserts debug message logged if static value is returned, per EAP feedback. - expect(logger.debug).to.have.been.called; - }); - - it('logs if initialization is incomplete', async () => { - // Defines default value to isolate initialization logging from static value logging. - rc.defaultConfig = { key1: 'val' }; - - // Gets value before initialization. - rc.getValue('key1'); - - // Asserts getValue logs. - expect(logger.debug).to.have.been.called; - - // Enables initialization to complete. - storageCache.loadFromStorage = sinon.stub().returns(Promise.resolve()); - - // Ensures initialization completes. - await rc.ensureInitialized(); - - // Gets value after initialization. - rc.getValue('key1'); - - // Asserts getValue doesn't log after initialization is complete. - expect(logger.debug).to.have.been.calledOnce; - }); - }); - - describe('getBoolean', () => { - it('returns the active value if available', () => { - getActiveConfigStub.returns(ACTIVE_CONFIG); - rc.defaultConfig = DEFAULT_CONFIG; - - expect(rc.getBoolean('key3')).to.be.true; - }); - - it('returns the default value if active is not available', () => { - rc.defaultConfig = DEFAULT_CONFIG; - - expect(rc.getBoolean('key3')).to.be.false; - }); - - it('returns the static value if active and default are not available', () => { - expect(rc.getBoolean('key3')).to.be.false; - }); - }); - - describe('getString', () => { - it('returns the active value if available', () => { - getActiveConfigStub.returns(ACTIVE_CONFIG); - rc.defaultConfig = DEFAULT_CONFIG; - - expect(rc.getString('key1')).to.eq(ACTIVE_CONFIG.key1); - }); - - it('returns the default value if active is not available', () => { - rc.defaultConfig = DEFAULT_CONFIG; - - expect(rc.getString('key2')).to.eq(DEFAULT_CONFIG.key2); - }); - - it('returns the static value if active and default are not available', () => { - expect(rc.getString('key1')).to.eq(''); - }); - }); - - describe('getNumber', () => { - it('returns the active value if available', () => { - getActiveConfigStub.returns(ACTIVE_CONFIG); - rc.defaultConfig = DEFAULT_CONFIG; - - expect(rc.getNumber('key4')).to.eq(Number(ACTIVE_CONFIG.key4)); - }); - - it('returns the default value if active is not available', () => { - rc.defaultConfig = DEFAULT_CONFIG; - - expect(rc.getNumber('key4')).to.eq(Number(DEFAULT_CONFIG.key4)); - }); - - it('returns the static value if active and default are not available', () => { - expect(rc.getNumber('key1')).to.eq(0); - }); - }); - - describe('getAll', () => { - it('returns values for all keys included in active and default configs', () => { - getActiveConfigStub.returns(ACTIVE_CONFIG); - rc.defaultConfig = DEFAULT_CONFIG; - - expect(rc.getAll()).to.deep.eq({ - key1: new Value('remote', ACTIVE_CONFIG.key1), - key2: new Value('remote', ACTIVE_CONFIG.key2), - key3: new Value('remote', ACTIVE_CONFIG.key3), - key4: new Value('remote', ACTIVE_CONFIG.key4), - test: new Value('default', DEFAULT_CONFIG.test) - }); - }); - - it('returns values in default if active is not available', () => { - rc.defaultConfig = DEFAULT_CONFIG; - - expect(rc.getAll()).to.deep.eq({ - key1: new Value('default', DEFAULT_CONFIG.key1), - key2: new Value('default', DEFAULT_CONFIG.key2), - key3: new Value('default', DEFAULT_CONFIG.key3), - key4: new Value('default', DEFAULT_CONFIG.key4), - test: new Value('default', DEFAULT_CONFIG.test) - }); - }); - - it('returns empty object if both active and default configs are not defined', () => { - expect(rc.getAll()).to.deep.eq({}); - }); - }); - - describe('activate', () => { - const ETAG = 'etag'; - const CONFIG = { key: 'val' }; - const NEW_ETAG = 'new_etag'; - - let getLastSuccessfulFetchResponseStub: sinon.SinonStub; - let getActiveConfigEtagStub: sinon.SinonStub; - let setActiveConfigEtagStub: sinon.SinonStub; - let setActiveConfigStub: sinon.SinonStub; - - beforeEach(() => { - getLastSuccessfulFetchResponseStub = sinon.stub(); - getActiveConfigEtagStub = sinon.stub(); - setActiveConfigEtagStub = sinon.stub(); - setActiveConfigStub = sinon.stub(); - - storage.getLastSuccessfulFetchResponse = getLastSuccessfulFetchResponseStub; - storage.getActiveConfigEtag = getActiveConfigEtagStub; - storage.setActiveConfigEtag = setActiveConfigEtagStub; - storageCache.setActiveConfig = setActiveConfigStub; - }); - - it('does not activate if last successful fetch response is undefined', async () => { - getLastSuccessfulFetchResponseStub.returns(Promise.resolve()); - getActiveConfigEtagStub.returns(Promise.resolve(ETAG)); - - const activateResponse = await rc.activate(); - - expect(activateResponse).to.be.false; - expect(storage.setActiveConfigEtag).to.not.have.been.called; - expect(storageCache.setActiveConfig).to.not.have.been.called; - }); - - it('does not activate if fetched and active etags are the same', async () => { - getLastSuccessfulFetchResponseStub.returns( - Promise.resolve({ config: {}, etag: ETAG }) - ); - getActiveConfigEtagStub.returns(Promise.resolve(ETAG)); - - const activateResponse = await rc.activate(); - - expect(activateResponse).to.be.false; - expect(storage.setActiveConfigEtag).to.not.have.been.called; - expect(storageCache.setActiveConfig).to.not.have.been.called; - }); - - it('activates if fetched and active etags are different', async () => { - getLastSuccessfulFetchResponseStub.returns( - Promise.resolve({ config: CONFIG, eTag: NEW_ETAG }) - ); - getActiveConfigEtagStub.returns(Promise.resolve(ETAG)); - - const activateResponse = await rc.activate(); - - expect(activateResponse).to.be.true; - expect(storage.setActiveConfigEtag).to.have.been.calledWith(NEW_ETAG); - expect(storageCache.setActiveConfig).to.have.been.calledWith(CONFIG); - }); - - it('activates if fetched is defined but active config is not', async () => { - getLastSuccessfulFetchResponseStub.returns( - Promise.resolve({ config: CONFIG, eTag: NEW_ETAG }) - ); - getActiveConfigEtagStub.returns(Promise.resolve()); - - const activateResponse = await rc.activate(); - - expect(activateResponse).to.be.true; - expect(storage.setActiveConfigEtag).to.have.been.calledWith(NEW_ETAG); - expect(storageCache.setActiveConfig).to.have.been.calledWith(CONFIG); - }); - }); - - describe('fetchAndActivate', () => { - let rcActivateStub: sinon.SinonStub<[], Promise>; - - beforeEach(() => { - sinon.stub(rc, 'fetch').returns(Promise.resolve()); - rcActivateStub = sinon.stub(rc, 'activate'); - }); - it('calls fetch and activate and returns activation boolean if true', async () => { - rcActivateStub.returns(Promise.resolve(true)); - - const response = await rc.fetchAndActivate(); - - expect(response).to.be.true; - expect(rc.fetch).to.have.been.called; - expect(rc.activate).to.have.been.called; - }); - - it('calls fetch and activate and returns activation boolean if false', async () => { - rcActivateStub.returns(Promise.resolve(false)); - - const response = await rc.fetchAndActivate(); - - expect(response).to.be.false; - expect(rc.fetch).to.have.been.called; - expect(rc.activate).to.have.been.called; - }); - }); - - describe('fetch', () => { - let timeoutStub: sinon.SinonStub<[ - (...args: any[]) => void, - number, - ...any[] - ]>; - beforeEach(() => { - client.fetch = sinon - .stub() - .returns(Promise.resolve({ status: 200 } as FetchResponse)); - storageCache.setLastFetchStatus = sinon.stub(); - timeoutStub = sinon.stub(window, 'setTimeout'); - }); - - afterEach(() => { - timeoutStub.restore(); - }); - - it('defines a default timeout', async () => { - await rc.fetch(); - - expect(timeoutStub).to.have.been.calledWith(sinon.match.any, 60000); - }); - - it('honors a custom timeout', async () => { - rc.settings.fetchTimeoutMillis = 1000; - - await rc.fetch(); - - expect(timeoutStub).to.have.been.calledWith(sinon.match.any, 1000); - }); - - it('sets success status', async () => { - for (const status of [200, 304]) { - client.fetch = sinon - .stub() - .returns(Promise.resolve({ status } as FetchResponse)); - - await rc.fetch(); - - expect(storageCache.setLastFetchStatus).to.have.been.calledWith( - 'success' - ); - } - }); - - it('sets throttle status', async () => { - storage.getThrottleMetadata = sinon.stub().returns(Promise.resolve({})); - - const error = ERROR_FACTORY.create(ErrorCode.FETCH_THROTTLE, { - throttleEndTimeMillis: 123 - }); - - client.fetch = sinon.stub().returns(Promise.reject(error)); - - const fetchPromise = rc.fetch(); - - await expect(fetchPromise).to.eventually.be.rejectedWith(error); - expect(storageCache.setLastFetchStatus).to.have.been.calledWith( - 'throttle' - ); - }); - - it('defaults to failure status', async () => { - storage.getThrottleMetadata = sinon.stub().returns(Promise.resolve()); - - const error = ERROR_FACTORY.create(ErrorCode.FETCH_STATUS, { - httpStatus: 400 - }); - - client.fetch = sinon.stub().returns(Promise.reject(error)); - - const fetchPromise = rc.fetch(); - - await expect(fetchPromise).to.eventually.be.rejectedWith(error); - expect(storageCache.setLastFetchStatus).to.have.been.calledWith( - 'failure' - ); - }); - }); -}); diff --git a/packages-old/remote-config/test/setup.ts b/packages-old/remote-config/test/setup.ts deleted file mode 100644 index 90d154f1400..00000000000 --- a/packages-old/remote-config/test/setup.ts +++ /dev/null @@ -1,26 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { use } from 'chai'; -import * as sinonChai from 'sinon-chai'; -import * as chaiAsPromised from 'chai-as-promised'; - -// Normalizes Sinon assertions to Chai syntax. -use(sinonChai); - -// Adds Promise-friendly syntax to Chai. -use(chaiAsPromised); diff --git a/packages-old/remote-config/test/storage/storage.test.ts b/packages-old/remote-config/test/storage/storage.test.ts deleted file mode 100644 index 4543b574094..00000000000 --- a/packages-old/remote-config/test/storage/storage.test.ts +++ /dev/null @@ -1,119 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import '../setup'; -import { expect } from 'chai'; -import { - Storage, - ThrottleMetadata, - openDatabase, - APP_NAMESPACE_STORE -} from '../../src/storage/storage'; -import { FetchResponse } from '../../src/client/remote_config_fetch_client'; - -// Clears global IndexedDB state. -async function clearDatabase(): Promise { - const db = await openDatabase(); - db.transaction([APP_NAMESPACE_STORE], 'readwrite') - .objectStore(APP_NAMESPACE_STORE) - .clear(); -} - -describe('Storage', () => { - const storage = new Storage('appId', 'appName', 'namespace'); - - beforeEach(async () => { - await clearDatabase(); - }); - - it('constructs a composite key', async () => { - // This is defensive, but the cost of accidentally changing the key composition is high. - expect(storage.createCompositeKey('throttle_metadata')).to.eq( - 'appId,appName,namespace,throttle_metadata' - ); - }); - - it('sets and gets last fetch attempt status', async () => { - const expectedStatus = 'success'; - - await storage.setLastFetchStatus(expectedStatus); - - const actualStatus = await storage.getLastFetchStatus(); - - expect(actualStatus).to.deep.eq(expectedStatus); - }); - - it('sets and gets last fetch success timestamp', async () => { - const lastSuccessfulFetchTimestampMillis = 123; - - await storage.setLastSuccessfulFetchTimestampMillis( - lastSuccessfulFetchTimestampMillis - ); - - const actualMetadata = await storage.getLastSuccessfulFetchTimestampMillis(); - - expect(actualMetadata).to.deep.eq(lastSuccessfulFetchTimestampMillis); - }); - - it('sets and gets last successful fetch response', async () => { - const lastSuccessfulFetchResponse = { status: 200 } as FetchResponse; - - await storage.setLastSuccessfulFetchResponse(lastSuccessfulFetchResponse); - - const actualConfig = await storage.getLastSuccessfulFetchResponse(); - - expect(actualConfig).to.deep.eq(lastSuccessfulFetchResponse); - }); - - it('sets and gets active config', async () => { - const expectedConfig = { key: 'value' }; - - await storage.setActiveConfig(expectedConfig); - - const storedConfig = await storage.getActiveConfig(); - - expect(storedConfig).to.deep.eq(expectedConfig); - }); - - it('sets and gets active config etag', async () => { - const expectedEtag = 'etag'; - - await storage.setActiveConfigEtag(expectedEtag); - - const storedConfigEtag = await storage.getActiveConfigEtag(); - - expect(storedConfigEtag).to.deep.eq(expectedEtag); - }); - - it('sets, gets and deletes throttle metadata', async () => { - const expectedMetadata = { - throttleEndTimeMillis: 1 - } as ThrottleMetadata; - - await storage.setThrottleMetadata(expectedMetadata); - - let actualMetadata = await storage.getThrottleMetadata(); - - expect(actualMetadata).to.deep.eq(expectedMetadata); - - await storage.deleteThrottleMetadata(); - - actualMetadata = await storage.getThrottleMetadata(); - - expect(actualMetadata).to.be.undefined; - }); -}); diff --git a/packages-old/remote-config/test/storage/storage_cache.test.ts b/packages-old/remote-config/test/storage/storage_cache.test.ts deleted file mode 100644 index e7cfb0ef0da..00000000000 --- a/packages-old/remote-config/test/storage/storage_cache.test.ts +++ /dev/null @@ -1,84 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import '../setup'; -import { expect } from 'chai'; -import * as sinon from 'sinon'; -import { Storage } from '../../src/storage/storage'; -import { StorageCache } from '../../src/storage/storage_cache'; - -describe('StorageCache', () => { - const storage = {} as Storage; - let storageCache: StorageCache; - - beforeEach(() => { - storageCache = new StorageCache(storage); - }); - - /** - * Read-ahead getter. - */ - describe('loadFromStorage', () => { - it('populates memory cache with persisted data', async () => { - const status = 'success'; - const lastSuccessfulFetchTimestampMillis = 123; - const activeConfig = { key: 'value' }; - - storage.getLastFetchStatus = sinon - .stub() - .returns(Promise.resolve(status)); - storage.getLastSuccessfulFetchTimestampMillis = sinon - .stub() - .returns(Promise.resolve(lastSuccessfulFetchTimestampMillis)); - storage.getActiveConfig = sinon - .stub() - .returns(Promise.resolve(activeConfig)); - - await storageCache.loadFromStorage(); - - expect(storage.getLastFetchStatus).to.have.been.called; - expect(storage.getLastSuccessfulFetchTimestampMillis).to.have.been.called; - expect(storage.getActiveConfig).to.have.been.called; - - expect(storageCache.getLastFetchStatus()).to.eq(status); - expect(storageCache.getLastSuccessfulFetchTimestampMillis()).to.deep.eq( - lastSuccessfulFetchTimestampMillis - ); - expect(storageCache.getActiveConfig()).to.deep.eq(activeConfig); - }); - }); - - describe('setActiveConfig', () => { - const activeConfig = { key: 'value2' }; - - beforeEach(() => { - storage.setActiveConfig = sinon.stub().returns(Promise.resolve()); - }); - - it('writes to memory cache', async () => { - await storageCache.setActiveConfig(activeConfig); - - expect(storageCache.getActiveConfig()).to.deep.eq(activeConfig); - }); - - it('writes to persistent storage', async () => { - await storageCache.setActiveConfig(activeConfig); - - expect(storage.setActiveConfig).to.have.been.calledWith(activeConfig); - }); - }); -}); diff --git a/packages-old/remote-config/test/value.test.ts b/packages-old/remote-config/test/value.test.ts deleted file mode 100644 index ead90ce25cf..00000000000 --- a/packages-old/remote-config/test/value.test.ts +++ /dev/null @@ -1,78 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import './setup'; -import { expect } from 'chai'; -import { Value } from '../src/value'; - -describe('Value', () => { - describe('asString', () => { - it('returns static default string if source is static', () => { - expect(new Value('static').asString()).to.eq(''); - }); - - it('returns the value as a string', () => { - const VALUE = 'test'; - const value = new Value('remote', VALUE); - - expect(value.asString()).to.eq(VALUE); - }); - }); - - describe('asBoolean', () => { - it('returns static default boolean if source is static', () => { - expect(new Value('static').asBoolean()).to.be.false; - }); - - it('returns true for a truthy values', () => { - expect(new Value('remote', '1').asBoolean()).to.be.true; - expect(new Value('remote', 'true').asBoolean()).to.be.true; - expect(new Value('remote', 't').asBoolean()).to.be.true; - expect(new Value('remote', 'yes').asBoolean()).to.be.true; - expect(new Value('remote', 'y').asBoolean()).to.be.true; - expect(new Value('remote', 'on').asBoolean()).to.be.true; - }); - - it('returns false for non-truthy values', () => { - expect(new Value('remote', '').asBoolean()).to.be.false; - expect(new Value('remote', 'false').asBoolean()).to.be.false; - expect(new Value('remote', 'random string').asBoolean()).to.be.false; - }); - }); - - describe('asNumber', () => { - it('returns static default number if source is static', () => { - expect(new Value('static').asNumber()).to.eq(0); - }); - - it('returns value as a number', () => { - expect(new Value('default', '33').asNumber()).to.eq(33); - expect(new Value('default', 'not a number').asNumber()).to.eq(0); - expect(new Value('default', '-10').asNumber()).to.eq(-10); - expect(new Value('default', '0').asNumber()).to.eq(0); - expect(new Value('default', '5.3').asNumber()).to.eq(5.3); - }); - }); - - describe('getSource', () => { - it('returns the source of the value', () => { - expect(new Value('default', 'test').getSource()).to.eq('default'); - expect(new Value('remote', 'test').getSource()).to.eq('remote'); - expect(new Value('static').getSource()).to.eq('static'); - }); - }); -}); diff --git a/packages-old/remote-config/test_app/index.html b/packages-old/remote-config/test_app/index.html deleted file mode 100644 index 8bf6a0c888c..00000000000 --- a/packages-old/remote-config/test_app/index.html +++ /dev/null @@ -1,154 +0,0 @@ - - - - - Test App - - - - - -

-

Remote Config Test App

-
-
-
-
Firebase config
-
- -
-
-
RC defaults
-
- -
-
-
RC settings
-
- -
-
-
Log level
-
- -
-
-
-
-
Controls
-
- - - - -
-
-
-
Value getters
-
-
- key: - -
- - - - -
-
-
-
General getters
-
- - - - -
-
-
-
-
Output
-
-
-
-
-
-
- - - diff --git a/packages-old/remote-config/test_app/index.js b/packages-old/remote-config/test_app/index.js deleted file mode 100644 index d38847d9f37..00000000000 --- a/packages-old/remote-config/test_app/index.js +++ /dev/null @@ -1,224 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -const FB_CONFIG_PLACEHOLDER = `{ - apiKey: ..., - authDomain: ..., - databaseURL: ..., - projectId: ..., - storageBucket: ..., - messagingSenderId: ..., - appId: ... -}`; -const DEFAULTS_PLACEHOLDER = `{ - key1: 'value1', - key2: 'value2', - ... -}`; -const SETTINGS_PLACEHOLDER = `{ - minimumFetchIntervalMillis: 43200000, - fetchTimeoutMillis: 5000 -}`; -const SUCCESS_MESSAGE = 'Done '; - -let remoteConfig; -const outputBox = document.getElementById('output-box'); - -window.onload = function () { - document.querySelector( - '#firebase-config' - ).placeholder = FB_CONFIG_PLACEHOLDER; - document.querySelector('#rc-defaults').placeholder = DEFAULTS_PLACEHOLDER; - document.querySelector('#rc-settings').placeholder = SETTINGS_PLACEHOLDER; -}; - -function initializeFirebase() { - const val = document.querySelector('#firebase-config').value; - firebase.initializeApp(parseObjFromStr(val)); - remoteConfig = firebase.remoteConfig(); - return Promise.resolve(); -} - -function setDefaults() { - remoteConfig.defaultConfig = parseObjFromStr( - document.querySelector('#rc-defaults').value - ); - return SUCCESS_MESSAGE; -} - -function setSettings() { - const newSettings = parseObjFromStr( - document.querySelector('#rc-settings').value, - true - ); - const currentSettings = remoteConfig.settings; - remoteConfig.settings = Object.assign({}, currentSettings, newSettings); - return SUCCESS_MESSAGE; -} - -function setLogLevel() { - const newLogLevel = document.querySelector('#log-level-input').value; - remoteConfig.setLogLevel(newLogLevel); - return SUCCESS_MESSAGE; -} - -function activate() { - return remoteConfig.activate(); -} - -function ensureInitialized() { - return remoteConfig.ensureInitialized(); -} - -// Prefixed to avoid clobbering the browser's fetch function. -function rcFetch() { - return remoteConfig.fetch(); -} - -function fetchAndActivate() { - return remoteConfig.fetchAndActivate(); -} - -function getString() { - return remoteConfig.getString(getKey()); -} - -function getBoolean() { - return remoteConfig.getBoolean(getKey()); -} - -function getNumber() { - return remoteConfig.getNumber(getKey()); -} - -function getValue() { - return remoteConfig.getValue(getKey()); -} - -function getAll() { - return remoteConfig.getAll(); -} - -function getFetchTimeMillis() { - return remoteConfig.fetchTimeMillis; -} - -function getLastFetchStatus() { - return remoteConfig.lastFetchStatus; -} - -function getSettings() { - return remoteConfig.settings; -} - -// Helper functions -function getKey() { - return document.querySelector('#key-input').value; -} - -function handlerWrapper(handler) { - try { - clearOutput(); - var returnValue = handler(); - if (returnValue instanceof Promise) { - handlePromise(returnValue); - } else if (returnValue instanceof Array) { - handleArray(returnValue); - } else if (returnValue instanceof Object) { - handleObject(returnValue); - } else { - displayOutput(returnValue); - } - } catch (error) { - displayOutputError(error); - } -} - -function clearOutput() { - outputBox.innerHTML = ''; -} - -function appendOutput(text) { - outputBox.innerHTML = outputBox.innerHTML + text; -} - -function displayOutput(text) { - outputBox.innerHTML = text; -} - -function displayOutputError(error) { - outputBox.innerHTML = `${error.message || error}`; -} - -function handlePromise(prom) { - const timerId = setInterval(() => appendOutput('.'), 400); - prom - .then(res => { - clearInterval(timerId); - appendOutput(SUCCESS_MESSAGE); - if (res != undefined) { - appendOutput('
'); - appendOutput('return value: ' + res); - } - }) - .catch(e => { - clearInterval(timerId); - appendOutput(`${e}`); - }); -} - -function handleArray(ar) { - displayOutput(ar.toString()); -} - -function handleObject(obj) { - appendOutput('{'); - for (const key in obj) { - if (obj[key] instanceof Function) { - appendOutput(`
${key}: ${obj[key]()},`); - } else if (obj[key] instanceof Object) { - appendOutput(key + ': '); - handleObject(obj[key]); - appendOutput(','); - } else { - appendOutput(`
${key}: ${obj[key]},`); - } - } - appendOutput('
}'); -} - -/** - * Parses string received from input elements into objects. These strings are not JSON - * compatible. - */ -function parseObjFromStr(str, valueIsNumber = false) { - const obj = {}; - str - .substring(str.indexOf('{') + 1, str.indexOf('}')) - .replace(/["']/g, '') // Get rid of curly braces and quotes - .trim() - .split(/[,]/g) // Results in a string of key value separated by a colon - .map(str => str.trim()) - .forEach(keyValue => { - const colIndex = keyValue.indexOf(':'); - const key = keyValue.substring(0, colIndex); - const val = keyValue.substring(colIndex + 1).trim(); - const value = valueIsNumber ? Number(val) : val; - obj[key] = value; - }); - return obj; -} diff --git a/packages-old/remote-config/tsconfig.json b/packages-old/remote-config/tsconfig.json deleted file mode 100644 index a4b8678284b..00000000000 --- a/packages-old/remote-config/tsconfig.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "extends": "../../config/tsconfig.base.json", - "compilerOptions": { - "outDir": "dist", - "resolveJsonModule": true, - }, - "exclude": [ - "dist/**/*" - ] -} \ No newline at end of file From fe1f43b3c256706db8b0d752b5a56b30bd64435d Mon Sep 17 00:00:00 2001 From: Feiyang1 Date: Wed, 18 Aug 2021 17:53:38 -0700 Subject: [PATCH 12/38] update versions --- integration/compat-interop/package.json | 14 +- integration/compat-typings/package.json | 2 +- packages/firebase/package.json | 14 +- packages/messaging-compat/package.json | 2 +- packages/performance/package.json | 2 +- yarn.lock | 210 +++++++++++++++--------- 6 files changed, 150 insertions(+), 94 deletions(-) diff --git a/integration/compat-interop/package.json b/integration/compat-interop/package.json index eb0f2fed166..31049586736 100644 --- a/integration/compat-interop/package.json +++ b/integration/compat-interop/package.json @@ -8,19 +8,19 @@ "test:debug": "karma start --browsers Chrome --auto-watch" }, "dependencies": { - "@firebase/app-exp": "0.0.900", + "@firebase/app": "0.6.30", "@firebase/app-compat": "0.0.900", - "@firebase/analytics-exp": "0.0.900", + "@firebase/analytics": "0.6.18", "@firebase/analytics-compat": "0.0.900", - "@firebase/auth-exp": "0.0.900", + "@firebase/auth": "0.16.8", "@firebase/auth-compat": "0.0.900", - "@firebase/functions-exp": "0.0.900", + "@firebase/functions": "0.6.15", "@firebase/functions-compat": "0.0.900", - "@firebase/messaging-exp": "0.0.900", + "@firebase/messaging": "0.8.0", "@firebase/messaging-compat": "0.0.900", - "@firebase/performance-exp": "0.0.900", + "@firebase/performance": "0.4.18", "@firebase/performance-compat": "0.0.900", - "@firebase/remote-config-exp": "0.0.900", + "@firebase/remote-config": "0.1.43", "@firebase/remote-config-compat": "0.0.900" }, "devDependencies": { diff --git a/integration/compat-typings/package.json b/integration/compat-typings/package.json index ec6f6257eb8..e29397124a9 100644 --- a/integration/compat-typings/package.json +++ b/integration/compat-typings/package.json @@ -7,7 +7,7 @@ "test:ci": "node ../../scripts/run_tests_in_ci.js -s test" }, "dependencies": { - "firebase-exp": "file:../../packages-exp/firebase-exp" + "firebase": "*" }, "devDependencies": { "typescript": "4.2.2" diff --git a/packages/firebase/package.json b/packages/firebase/package.json index 8c03c7ddf26..e903b645707 100644 --- a/packages/firebase/package.json +++ b/packages/firebase/package.json @@ -1,5 +1,5 @@ { - "name": "firebase-exp", + "name": "firebase", "version": "9.0.0-beta.8", "private": true, "description": "Firebase JavaScript library for web and Node.js", @@ -225,20 +225,20 @@ "@firebase/analytics-compat": "0.0.900", "@firebase/app": "0.6.30", "@firebase/app-compat": "0.0.900", - "@firebase/app-check": "0.0.900", + "@firebase/app-check": "0.3.2", "@firebase/app-check-compat": "0.0.900", - "@firebase/auth": "0.0.900", + "@firebase/auth": "0.16.8", "@firebase/auth-compat": "0.0.900", "@firebase/database": "0.10.9", - "@firebase/functions": "0.0.900", + "@firebase/functions": "0.6.15", "@firebase/functions-compat": "0.0.900", "@firebase/firestore": "2.3.10", "@firebase/storage": "0.6.2", - "@firebase/performance": "0.0.900", + "@firebase/performance": "0.4.18", "@firebase/performance-compat": "0.0.900", - "@firebase/remote-config": "0.0.900", + "@firebase/remote-config": "0.1.43", "@firebase/remote-config-compat": "0.0.900", - "@firebase/messaging": "0.0.900", + "@firebase/messaging": "0.8.0", "@firebase/messaging-compat": "0.0.900" }, "devDependencies": { diff --git a/packages/messaging-compat/package.json b/packages/messaging-compat/package.json index 155ae720bee..0879ea1b60b 100644 --- a/packages/messaging-compat/package.json +++ b/packages/messaging-compat/package.json @@ -30,7 +30,7 @@ "@firebase/app-compat": "0.x" }, "dependencies": { - "@firebase/messaging": "0.0.900", + "@firebase/messaging": "0.8.0", "@firebase/component": "0.5.5", "@firebase/util": "1.2.0", "tslib": "^2.1.0" diff --git a/packages/performance/package.json b/packages/performance/package.json index f29864b721e..5d232a76779 100644 --- a/packages/performance/package.json +++ b/packages/performance/package.json @@ -1,6 +1,6 @@ { "name": "@firebase/performance", - "version": "0.0.900", + "version": "0.4.18", "description": "Firebase performance for web", "author": "Firebase (https://firebase.google.com/)", "main": "dist/index.cjs.js", diff --git a/yarn.lock b/yarn.lock index aec369046fc..dd12991a6c8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1349,6 +1349,110 @@ minimatch "^3.0.4" strip-json-comments "^3.1.1" +"@firebase/analytics@0.6.17": + version "0.6.17" + resolved "https://registry.npmjs.org/@firebase/analytics/-/analytics-0.6.17.tgz#61df8155f474e7eb1cc180dd7ba70c6f0100f102" + integrity sha512-Iiip24vQw7p+dBxoGWP2WvVqV2tOdLPjWw6OP6a+8vgss9PRsjKE2AAskruqveMUO4Ox5uPW65wdgeJxoFoMvQ== + dependencies: + "@firebase/analytics-types" "0.6.0" + "@firebase/component" "0.5.5" + "@firebase/installations" "0.4.31" + "@firebase/logger" "0.2.6" + "@firebase/util" "1.2.0" + tslib "^2.1.0" + +"@firebase/app-check@0.3.1": + version "0.3.1" + resolved "https://registry.npmjs.org/@firebase/app-check/-/app-check-0.3.1.tgz#78210513455ea6da437cb5fcf18239db9cd1e7de" + integrity sha512-5OWXzhXdtrmOqn2aN44FyNTwjlZJrip/3WC7UlMeUBPi3apuUgChHTolZ1oITszGdw52lP3r5SOCDtRsNtbkJg== + dependencies: + "@firebase/app-check-interop-types" "0.1.0" + "@firebase/app-check-types" "0.3.1" + "@firebase/component" "0.5.5" + "@firebase/logger" "0.2.6" + "@firebase/util" "1.2.0" + tslib "^2.1.0" + +"@firebase/app@0.6.29": + version "0.6.29" + resolved "https://registry.npmjs.org/@firebase/app/-/app-0.6.29.tgz#e2f88274b39917ab766f9fe73da48c353eaed557" + integrity sha512-duCzk9/BSVVsb5Y9b0rnvGSuD5zQA/JghiQsccRl+lA4xiUYjFudTU4cVFftkw+0zzeYBHn4KiVxchsva1O9dA== + dependencies: + "@firebase/app-types" "0.6.3" + "@firebase/component" "0.5.5" + "@firebase/logger" "0.2.6" + "@firebase/util" "1.2.0" + dom-storage "2.1.0" + tslib "^2.1.0" + xmlhttprequest "1.8.0" + +"@firebase/functions@0.6.14": + version "0.6.14" + resolved "https://registry.npmjs.org/@firebase/functions/-/functions-0.6.14.tgz#f6b452a53dc15299595bd079dd6ed4afb59e1a8c" + integrity sha512-Gthru/wHPQqkn651MenVM+qKVFFqIyFcNT3qfJUacibqrKlvDtYtaCMjFGAkChuGnYzNVnXJIaNrIHkEIII4Hg== + dependencies: + "@firebase/component" "0.5.5" + "@firebase/functions-types" "0.4.0" + "@firebase/messaging-types" "0.5.0" + node-fetch "2.6.1" + tslib "^2.1.0" + +"@firebase/installations@0.4.31": + version "0.4.31" + resolved "https://registry.npmjs.org/@firebase/installations/-/installations-0.4.31.tgz#dbde30c0542fb4343b075f0574d4e0d0f4b49aa7" + integrity sha512-qWolhAgMHvD3avsNCl+K8+untzoDDFQIRR8At8kyWMKKosy0vttdWTWzjvDoZbyKU6r0RNlxDUWAgV88Q8EudQ== + dependencies: + "@firebase/component" "0.5.5" + "@firebase/installations-types" "0.3.4" + "@firebase/util" "1.2.0" + idb "3.0.2" + tslib "^2.1.0" + +"@firebase/messaging@0.7.15": + version "0.7.15" + resolved "https://registry.npmjs.org/@firebase/messaging/-/messaging-0.7.15.tgz#d3b9a053331238480860c71385819babda2076f3" + integrity sha512-81t6iJtqMBJF5LHTjDhlHUpbPZOV6dKhW0TueAoON4omc0SaDXgf4nnk6JkvZRfdcuOaP8848Cv53tvZPFFAYQ== + dependencies: + "@firebase/component" "0.5.5" + "@firebase/installations" "0.4.31" + "@firebase/messaging-types" "0.5.0" + "@firebase/util" "1.2.0" + idb "3.0.2" + tslib "^2.1.0" + +"@firebase/performance@0.4.17": + version "0.4.17" + resolved "https://registry.npmjs.org/@firebase/performance/-/performance-0.4.17.tgz#b160a4352f682c1039b49ec9d24d6c473a31b3c3" + integrity sha512-uhDs9rhdMrGraYHcd3CTRkGtcNap4hp6rAHTwJNIX56Z3RzQ1VW2ea9vvesl7EjFtEIPU0jfdrS32wV+qer5DQ== + dependencies: + "@firebase/component" "0.5.5" + "@firebase/installations" "0.4.31" + "@firebase/logger" "0.2.6" + "@firebase/performance-types" "0.0.13" + "@firebase/util" "1.2.0" + tslib "^2.1.0" + +"@firebase/polyfill@0.3.36": + version "0.3.36" + resolved "https://registry.npmjs.org/@firebase/polyfill/-/polyfill-0.3.36.tgz#c057cce6748170f36966b555749472b25efdb145" + integrity sha512-zMM9oSJgY6cT2jx3Ce9LYqb0eIpDE52meIzd/oe/y70F+v9u1LDqk5kUF5mf16zovGBWMNFmgzlsh6Wj0OsFtg== + dependencies: + core-js "3.6.5" + promise-polyfill "8.1.3" + whatwg-fetch "2.0.4" + +"@firebase/remote-config@0.1.42": + version "0.1.42" + resolved "https://registry.npmjs.org/@firebase/remote-config/-/remote-config-0.1.42.tgz#84573ac2f1ee49cb9d4327a25c5625f2e274695d" + integrity sha512-hWwtAZmYLB274bxjV2cdMYhyBCUUqbYErihGx3rMyab76D+VbIxOuKJb2z0DS67jQG+SA3pr9/MtWsTPHV/l9g== + dependencies: + "@firebase/component" "0.5.5" + "@firebase/installations" "0.4.31" + "@firebase/logger" "0.2.6" + "@firebase/remote-config-types" "0.1.9" + "@firebase/util" "1.2.0" + tslib "^2.1.0" + "@google-cloud/common@^3.6.0": version "3.6.0" resolved "https://registry.npmjs.org/@google-cloud/common/-/common-3.6.0.tgz#c2f6da5f79279a4a9ac7c71fc02d582beab98e8b" @@ -5869,10 +5973,10 @@ core-js-compat@^3.14.0, core-js-compat@^3.15.0: browserslist "^4.16.6" semver "7.0.0" -core-js@3.15.1: - version "3.15.1" - resolved "https://registry.npmjs.org/core-js/-/core-js-3.15.1.tgz#6c08ab88abdf56545045ccf5fd81f47f407e7f1a" - integrity sha512-h8VbZYnc9pDzueiS2610IULDkpFFPunHwIpl8yRwFahAEEdSpHlTy3h3z3rKq5h11CaUdBEeRViu9AYvbxiMeg== +core-js@3.6.5: + version "3.6.5" + resolved "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz#7395dc273af37fb2e50e9bd3d9fe841285231d1a" + integrity sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA== core-js@^2.4.0: version "2.6.12" @@ -7722,29 +7826,6 @@ firebase-admin@9.9.0: "@google-cloud/firestore" "^4.5.0" "@google-cloud/storage" "^5.3.0" -"firebase-exp@file:packages-exp/firebase-exp": - version "9.0.0-beta.6" - dependencies: - "@firebase/analytics-compat" "0.0.900" - "@firebase/analytics-exp" "0.0.900" - "@firebase/app-check-compat" "0.0.900" - "@firebase/app-check-exp" "0.0.900" - "@firebase/app-compat" "0.0.900" - "@firebase/app-exp" "0.0.900" - "@firebase/auth-compat" "0.0.900" - "@firebase/auth-exp" "0.0.900" - "@firebase/database" "0.10.7" - "@firebase/firestore" "2.3.8" - "@firebase/functions-compat" "0.0.900" - "@firebase/functions-exp" "0.0.900" - "@firebase/messaging-compat" "0.0.900" - "@firebase/messaging-exp" "0.0.900" - "@firebase/performance-compat" "0.0.900" - "@firebase/performance-exp" "0.0.900" - "@firebase/remote-config-compat" "0.0.900" - "@firebase/remote-config-exp" "0.0.900" - "@firebase/storage" "0.5.6" - firebase-functions@3.14.1: version "3.14.1" resolved "https://registry.npmjs.org/firebase-functions/-/firebase-functions-3.14.1.tgz#3ac5bc70989365874f41d06bca3b42a233dd6039" @@ -7818,6 +7899,27 @@ firebase-tools@9.14.0: winston-transport "^4.4.0" ws "^7.2.3" +firebase@*, firebase@8.9.1: + version "8.9.1" + resolved "https://registry.npmjs.org/firebase/-/firebase-8.9.1.tgz#9b3bc8e69830cd8bcabd3d296068e9d9ff481f35" + integrity sha512-4aKRynB0LSWneYTPwWlAUbcJbgSS11lZRIo9MLNQh1uCo9BxRIYq/r3CCDJOx59tI2nwyv4RXf7hdkgSTF5FYw== + dependencies: + "@firebase/analytics" "0.6.17" + "@firebase/app" "0.6.29" + "@firebase/app-check" "0.3.1" + "@firebase/app-types" "0.6.3" + "@firebase/auth" "0.16.8" + "@firebase/database" "0.10.9" + "@firebase/firestore" "2.3.10" + "@firebase/functions" "0.6.14" + "@firebase/installations" "0.4.31" + "@firebase/messaging" "0.7.15" + "@firebase/performance" "0.4.17" + "@firebase/polyfill" "0.3.36" + "@firebase/remote-config" "0.1.42" + "@firebase/storage" "0.6.2" + "@firebase/util" "1.2.0" + flagged-respawn@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz#e7de6f1279ddd9ca9aac8a5971d618606b3aab41" @@ -8554,67 +8656,26 @@ google-auth-library@^7.0.0, google-auth-library@^7.0.2: jws "^4.0.0" lru-cache "^6.0.0" -google-closure-compiler-java@^20200112.0.0: - version "20200112.0.0" - resolved "https://registry.npmjs.org/google-closure-compiler-java/-/google-closure-compiler-java-20200112.0.0.tgz#2b99f5e2869a573a1b35558ff3b6e6bc054a116f" - integrity sha512-h/ExDCXAw88nOniQSbbK6et31kOwmaDxl6t52dnETCIzituQtGToPzy21vUel1o8o+FvWUybLoap+dEYBam1pA== - google-closure-compiler-java@^20210601.0.0: version "20210601.0.0" resolved "https://registry.npmjs.org/google-closure-compiler-java/-/google-closure-compiler-java-20210601.0.0.tgz#88dc11b334bee6a704d9674c5143fd2e0d553517" integrity sha512-bH6nIwOmp4qDWvlbXx5/DE3XA2aDGQoCpmRYZJGONY1Sy6Xfbq0ioXRHH9eBDP9hxhCJ5Sd/K89A0NZ8Nz9RJA== -google-closure-compiler-js@^20200112.0.0: - version "20200112.0.0" - resolved "https://registry.npmjs.org/google-closure-compiler-js/-/google-closure-compiler-js-20200112.0.0.tgz#cb9fc1636671f3ce927e668e29db69b65cae6f2d" - integrity sha512-xW47rSuiRaql6q1YN7+b3FXIW74b1nCcENVwm9cigw1H5gWoBMBJOmpZiXnjMfmYC+MALjPQ8giMzvSeP+2X5A== - -google-closure-compiler-linux@^20200112.0.0: - version "20200112.0.0" - resolved "https://registry.npmjs.org/google-closure-compiler-linux/-/google-closure-compiler-linux-20200112.0.0.tgz#e6c7943cc0114046dbe9fc685e4d7d4eb536c1dc" - integrity sha512-imTfdYP7BVTzzp3y7MuZP+98nEkbX7LZsZtxalNpl56vd+Ysc9/vOHXS14CdSoThaXIVlzX/lfjOlBRqPow+ew== - google-closure-compiler-linux@^20210601.0.0: version "20210601.0.0" resolved "https://registry.npmjs.org/google-closure-compiler-linux/-/google-closure-compiler-linux-20210601.0.0.tgz#6e5dd7b00b96dc1fd1ba30e3401af85558768322" integrity sha512-rnEQt7zz/1P1SfPhJiHQpfCgMPrsVVyEgDs09h67xn6+LXa9L0RP+hrJDEHqSWwjDPz0BkfUUv6zkqZvp1h/lw== -google-closure-compiler-osx@^20200112.0.0: - version "20200112.0.0" - resolved "https://registry.npmjs.org/google-closure-compiler-osx/-/google-closure-compiler-osx-20200112.0.0.tgz#df7a22c0dc32702b47c8ac4521f79bbe439effad" - integrity sha512-E3S1KqZw4+Zov0VXCkjomPrYhyuuV6jH9InBchQ7cZfipFJjhQmSRf39u4Mu0sINW7GXfODZbzBwOXhEIquFQw== - google-closure-compiler-osx@^20210601.0.0: version "20210601.0.0" resolved "https://registry.npmjs.org/google-closure-compiler-osx/-/google-closure-compiler-osx-20210601.0.0.tgz#e23356bc9ef6e68c2980f60a207f603767b50b21" integrity sha512-A5r4s/WthR2iLMM0mxsluw8EW2AcOomC5ri/H6FjzpMq0RVEnLTgaGYdXolUAfEzH/7XtJJT2+JkYk3HSLCtrg== -google-closure-compiler-windows@^20200112.0.0: - version "20200112.0.0" - resolved "https://registry.npmjs.org/google-closure-compiler-windows/-/google-closure-compiler-windows-20200112.0.0.tgz#8300d1e651f2c84ed565e729ccf40d6ed7e63771" - integrity sha512-+5+UJFKXH0LGnYEHSVJxWwhtvX/MI6uebkAQkhma0057QsKs8fOToWuHL8/UbJULB4WUPa3DlHy0+Izs5z6lCQ== - google-closure-compiler-windows@^20210601.0.0: version "20210601.0.0" resolved "https://registry.npmjs.org/google-closure-compiler-windows/-/google-closure-compiler-windows-20210601.0.0.tgz#b5400d06bbf0bbd2602ee3ae0c2bc7ebd5829692" integrity sha512-6r94bPShnB0XXh9+5/qXGDHJN2PQGhF9yJPcgBZj+FAZlQGzlYkT0pkyp+loZT3lG+YRbjD28Lgo7xMcY4xgkA== -google-closure-compiler@20200112.0.0: - version "20200112.0.0" - resolved "https://registry.npmjs.org/google-closure-compiler/-/google-closure-compiler-20200112.0.0.tgz#98d79ed2926b5c9a04c759c3f0853f2102c06ba2" - integrity sha512-8d43B3hU2pAFy6MD946oslArRe11jPJ/h/VaPPiiSMoSMFxnDpd8jjVJfM2solFSNOOZ9OacA6g/RVGMyp5lvg== - dependencies: - chalk "2.x" - google-closure-compiler-java "^20200112.0.0" - google-closure-compiler-js "^20200112.0.0" - minimist "1.x" - vinyl "2.x" - vinyl-sourcemaps-apply "^0.2.0" - optionalDependencies: - google-closure-compiler-linux "^20200112.0.0" - google-closure-compiler-osx "^20200112.0.0" - google-closure-compiler-windows "^20200112.0.0" - google-closure-compiler@20210601.0.0: version "20210601.0.0" resolved "https://registry.npmjs.org/google-closure-compiler/-/google-closure-compiler-20210601.0.0.tgz#34597c33c9285ebd3a5364f5299f6c9ddc9fc88a" @@ -8630,11 +8691,6 @@ google-closure-compiler@20210601.0.0: google-closure-compiler-osx "^20210601.0.0" google-closure-compiler-windows "^20210601.0.0" -google-closure-library@20200830.0.0: - version "20200830.0.0" - resolved "https://registry.npmjs.org/google-closure-library/-/google-closure-library-20200830.0.0.tgz#9f3807e5a4af55ebf2c8a22853d53b8da39a48e8" - integrity sha512-s4ma73K+FTeVywSMjVOxQ435t6kPfSlxEtIflq7Gabp2fxAnc9i8vUpvT8ZP/GH89LwSJReIaBGtrn72rfNC5Q== - google-closure-library@20210406.0.0: version "20210406.0.0" resolved "https://registry.npmjs.org/google-closure-library/-/google-closure-library-20210406.0.0.tgz#47d6036c1704661ad47cde2e35f19cc55e33e775" @@ -13486,10 +13542,10 @@ promise-inflight@^1.0.1: resolved "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= -promise-polyfill@8.2.0: - version "8.2.0" - resolved "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-8.2.0.tgz#367394726da7561457aba2133c9ceefbd6267da0" - integrity sha512-k/TC0mIcPVF6yHhUvwAp7cvL6I2fFV7TzF1DuGPI8mBh4QQazf36xCKEHKTZKRysEoTQoQdKyP25J8MPJp7j5g== +promise-polyfill@8.1.3: + version "8.1.3" + resolved "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-8.1.3.tgz#8c99b3cf53f3a91c68226ffde7bde81d7f904116" + integrity sha512-MG5r82wBzh7pSKDRa9y+vllNHz3e3d4CNj1PQE4BQYxLme0gKYYBm9YENq+UkEikyZ0XbiGWxYlVw3Rl9O/U8g== promise-polyfill@^6.0.1: version "6.1.0" From 9b6190d21ae58f3299b5f86cb9e07912e4930fd8 Mon Sep 17 00:00:00 2001 From: Feiyang1 Date: Wed, 18 Aug 2021 21:25:46 -0700 Subject: [PATCH 13/38] migrate firebase --- package.json | 2 +- packages/firebase/analytics/index.ts | 2 +- packages/firebase/analytics/package.json | 2 +- packages/firebase/app-check/index.ts | 2 +- packages/firebase/app-check/package.json | 2 +- packages/firebase/app/index.cdn.ts | 4 ++-- packages/firebase/app/index.ts | 4 ++-- packages/firebase/app/package.json | 2 +- packages/firebase/auth/cordova/index.ts | 2 +- packages/firebase/auth/cordova/package.json | 2 +- packages/firebase/auth/index.ts | 2 +- packages/firebase/auth/package.json | 2 +- packages/firebase/auth/react-native/index.ts | 2 +- packages/firebase/auth/react-native/package.json | 2 +- packages/firebase/compat/analytics/package.json | 2 +- packages/firebase/compat/app-check/package.json | 2 +- packages/firebase/compat/app/package.json | 2 +- packages/firebase/compat/auth/package.json | 2 +- packages/firebase/compat/database/package.json | 2 +- packages/firebase/compat/firestore/package.json | 2 +- packages/firebase/compat/functions/package.json | 2 +- packages/firebase/compat/messaging/package.json | 2 +- packages/firebase/compat/package.json | 2 +- packages/firebase/compat/performance/package.json | 2 +- packages/firebase/compat/remote-config/package.json | 2 +- packages/firebase/compat/storage/package.json | 2 +- packages/firebase/database/package.json | 2 +- packages/firebase/firestore/lite/package.json | 2 +- packages/firebase/firestore/package.json | 2 +- packages/firebase/functions/index.ts | 2 +- packages/firebase/functions/package.json | 2 +- packages/firebase/messaging/index.ts | 2 +- packages/firebase/messaging/package.json | 2 +- packages/firebase/messaging/sw/index.ts | 2 +- packages/firebase/messaging/sw/package.json | 2 +- packages/firebase/package.json | 2 +- packages/firebase/performance/index.ts | 2 +- packages/firebase/performance/package.json | 2 +- packages/firebase/remote-config/index.ts | 2 +- packages/firebase/remote-config/package.json | 2 +- packages/firebase/storage/package.json | 2 +- 41 files changed, 43 insertions(+), 43 deletions(-) diff --git a/package.json b/package.json index a2aec745475..1e42a3803b3 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ ], "scripts": { "dev": "lerna run --parallel --scope @firebase/* --scope firebase dev", - "build": "lerna run --scope @firebase/app-exp build:deps && lerna run --scope @firebase/* --scope firebase --ignore @firebase/app-exp build", + "build": "lerna run --scope @firebase/* --scope firebase build", "build:exp": "lerna run --scope @firebase/*-exp --scope @firebase/*-compat --scope firebase-exp build", "build:release": "lerna run --scope @firebase/app-exp build:deps && lerna run --scope @firebase/* --scope firebase --ignore @firebase/*-exp --ignore @firebase/*-compat build", "build:changed": "ts-node-script scripts/ci-test/build_changed.ts", diff --git a/packages/firebase/analytics/index.ts b/packages/firebase/analytics/index.ts index 586d64db7af..b32e63c69c7 100644 --- a/packages/firebase/analytics/index.ts +++ b/packages/firebase/analytics/index.ts @@ -15,4 +15,4 @@ * limitations under the License. */ -export * from '@firebase/analytics-exp'; +export * from '@firebase/analytics'; diff --git a/packages/firebase/analytics/package.json b/packages/firebase/analytics/package.json index a4efc64b610..550bb265552 100644 --- a/packages/firebase/analytics/package.json +++ b/packages/firebase/analytics/package.json @@ -1,5 +1,5 @@ { - "name": "firebase-exp/analytics", + "name": "firebase/analytics", "main": "dist/index.cjs", "browser": "dist/index.esm.js", "module": "dist/index.esm.js", diff --git a/packages/firebase/app-check/index.ts b/packages/firebase/app-check/index.ts index 85c036a330d..40e9af41078 100644 --- a/packages/firebase/app-check/index.ts +++ b/packages/firebase/app-check/index.ts @@ -15,4 +15,4 @@ * limitations under the License. */ -export * from '@firebase/app-check-exp'; +export * from '@firebase/app-check'; diff --git a/packages/firebase/app-check/package.json b/packages/firebase/app-check/package.json index 2ae4cd95979..1c81301e5a3 100644 --- a/packages/firebase/app-check/package.json +++ b/packages/firebase/app-check/package.json @@ -1,5 +1,5 @@ { - "name": "firebase-exp/app-check", + "name": "firebase/app-check", "main": "dist/index.cjs", "browser": "dist/index.esm.js", "module": "dist/index.esm.js", diff --git a/packages/firebase/app/index.cdn.ts b/packages/firebase/app/index.cdn.ts index 008e95af754..84aa892fe69 100644 --- a/packages/firebase/app/index.cdn.ts +++ b/packages/firebase/app/index.cdn.ts @@ -15,8 +15,8 @@ * limitations under the License. */ -import { registerVersion } from '@firebase/app-exp'; +import { registerVersion } from '@firebase/app'; import { name, version } from '../package.json'; registerVersion(name, version, 'cdn'); -export * from '@firebase/app-exp'; +export * from '@firebase/app'; diff --git a/packages/firebase/app/index.ts b/packages/firebase/app/index.ts index 0ecb5e28753..321395c7b0a 100644 --- a/packages/firebase/app/index.ts +++ b/packages/firebase/app/index.ts @@ -14,8 +14,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { registerVersion } from '@firebase/app-exp'; +import { registerVersion } from '@firebase/app'; import { name, version } from '../package.json'; registerVersion(name, version, 'app'); -export * from '@firebase/app-exp'; +export * from '@firebase/app'; diff --git a/packages/firebase/app/package.json b/packages/firebase/app/package.json index 7f3262bd49a..dc00f289841 100644 --- a/packages/firebase/app/package.json +++ b/packages/firebase/app/package.json @@ -1,5 +1,5 @@ { - "name": "firebase-exp/app", + "name": "firebase/app", "main": "dist/index.cjs", "browser": "dist/index.esm.js", "module": "dist/index.esm.js", diff --git a/packages/firebase/auth/cordova/index.ts b/packages/firebase/auth/cordova/index.ts index 4a6eba1206d..e0575a0e787 100644 --- a/packages/firebase/auth/cordova/index.ts +++ b/packages/firebase/auth/cordova/index.ts @@ -15,4 +15,4 @@ * limitations under the License. */ -export * from '@firebase/auth-exp/cordova'; +export * from '@firebase/auth/cordova'; diff --git a/packages/firebase/auth/cordova/package.json b/packages/firebase/auth/cordova/package.json index cb4dc1f626c..686bc4300c4 100644 --- a/packages/firebase/auth/cordova/package.json +++ b/packages/firebase/auth/cordova/package.json @@ -1,5 +1,5 @@ { - "name": "firebase-exp/auth/cordova", + "name": "firebase/auth/cordova", "main": "dist/index.cjs", "browser": "dist/index.esm.js", "module": "dist/index.esm.js", diff --git a/packages/firebase/auth/index.ts b/packages/firebase/auth/index.ts index 2505d8e8794..49f5fa3b1d3 100644 --- a/packages/firebase/auth/index.ts +++ b/packages/firebase/auth/index.ts @@ -14,4 +14,4 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -export * from '@firebase/auth-exp'; +export * from '@firebase/auth'; diff --git a/packages/firebase/auth/package.json b/packages/firebase/auth/package.json index 8508ef7aa5a..83c7fe70e3e 100644 --- a/packages/firebase/auth/package.json +++ b/packages/firebase/auth/package.json @@ -1,5 +1,5 @@ { - "name": "firebase-exp/auth", + "name": "firebase/auth", "main": "dist/index.cjs", "browser": "dist/index.esm.js", "module": "dist/index.esm.js", diff --git a/packages/firebase/auth/react-native/index.ts b/packages/firebase/auth/react-native/index.ts index 007c7666153..759132890fa 100644 --- a/packages/firebase/auth/react-native/index.ts +++ b/packages/firebase/auth/react-native/index.ts @@ -15,4 +15,4 @@ * limitations under the License. */ -export * from '@firebase/auth-exp/react-native'; +export * from '@firebase/auth/react-native'; diff --git a/packages/firebase/auth/react-native/package.json b/packages/firebase/auth/react-native/package.json index fc5de5175c1..95b4084a37e 100644 --- a/packages/firebase/auth/react-native/package.json +++ b/packages/firebase/auth/react-native/package.json @@ -1,5 +1,5 @@ { - "name": "firebase-exp/auth/react-native", + "name": "firebase/auth/react-native", "main": "dist/index.cjs", "browser": "dist/index.esm.js", "module": "dist/index.esm.js", diff --git a/packages/firebase/compat/analytics/package.json b/packages/firebase/compat/analytics/package.json index aac4bf9d943..07373b84631 100644 --- a/packages/firebase/compat/analytics/package.json +++ b/packages/firebase/compat/analytics/package.json @@ -1,5 +1,5 @@ { - "name": "firebase-exp/compat/analytics", + "name": "firebase/compat/analytics", "main": "dist/index.cjs", "browser": "dist/index.esm.js", "module": "dist/index.esm.js", diff --git a/packages/firebase/compat/app-check/package.json b/packages/firebase/compat/app-check/package.json index 0415ce945d0..7904521fc99 100644 --- a/packages/firebase/compat/app-check/package.json +++ b/packages/firebase/compat/app-check/package.json @@ -1,5 +1,5 @@ { - "name": "firebase-exp/compat/app-check", + "name": "firebase/compat/app-check", "main": "dist/index.cjs", "browser": "dist/index.esm.js", "module": "dist/index.esm.js", diff --git a/packages/firebase/compat/app/package.json b/packages/firebase/compat/app/package.json index 5378fc49169..e55dac364fe 100644 --- a/packages/firebase/compat/app/package.json +++ b/packages/firebase/compat/app/package.json @@ -1,5 +1,5 @@ { - "name": "firebase-exp/compat/app", + "name": "firebase/compat/app", "main": "dist/index.cjs", "browser": "dist/index.esm.js", "module": "dist/index.esm.js", diff --git a/packages/firebase/compat/auth/package.json b/packages/firebase/compat/auth/package.json index dd0dbcbe355..50416407386 100644 --- a/packages/firebase/compat/auth/package.json +++ b/packages/firebase/compat/auth/package.json @@ -1,5 +1,5 @@ { - "name": "firebase-exp/compat/auth", + "name": "firebase/compat/auth", "main": "dist/index.cjs", "browser": "dist/index.esm.js", "module": "dist/index.esm.js", diff --git a/packages/firebase/compat/database/package.json b/packages/firebase/compat/database/package.json index e685c37b115..9dacd0d324c 100644 --- a/packages/firebase/compat/database/package.json +++ b/packages/firebase/compat/database/package.json @@ -1,5 +1,5 @@ { - "name": "firebase-exp/compat/database", + "name": "firebase/compat/database", "main": "dist/index.cjs", "browser": "dist/index.esm.js", "module": "dist/index.esm.js", diff --git a/packages/firebase/compat/firestore/package.json b/packages/firebase/compat/firestore/package.json index a479c4d16e9..754ca99b6b6 100644 --- a/packages/firebase/compat/firestore/package.json +++ b/packages/firebase/compat/firestore/package.json @@ -1,5 +1,5 @@ { - "name": "firebase-exp/compat/firestore", + "name": "firebase/compat/firestore", "main": "dist/index.cjs", "browser": "dist/index.esm.js", "module": "dist/index.esm.js", diff --git a/packages/firebase/compat/functions/package.json b/packages/firebase/compat/functions/package.json index 1e88cb48e33..b312f2a25b6 100644 --- a/packages/firebase/compat/functions/package.json +++ b/packages/firebase/compat/functions/package.json @@ -1,5 +1,5 @@ { - "name": "firebase-exp/compat/functions", + "name": "firebase/compat/functions", "main": "dist/index.cjs", "browser": "dist/index.esm.js", "module": "dist/index.esm.js", diff --git a/packages/firebase/compat/messaging/package.json b/packages/firebase/compat/messaging/package.json index 453a800ec4a..e5c27be90c4 100644 --- a/packages/firebase/compat/messaging/package.json +++ b/packages/firebase/compat/messaging/package.json @@ -1,5 +1,5 @@ { - "name": "firebase-exp/compat/messaging", + "name": "firebase/compat/messaging", "main": "dist/index.cjs", "browser": "dist/index.esm.js", "module": "dist/index.esm.js", diff --git a/packages/firebase/compat/package.json b/packages/firebase/compat/package.json index 54576c5d260..beb8da3a722 100644 --- a/packages/firebase/compat/package.json +++ b/packages/firebase/compat/package.json @@ -1,5 +1,5 @@ { - "name": "firebase-exp/compat", + "name": "firebase/compat", "main": "dist/index.node.cjs", "browser": "dist/index.esm.js", "module": "dist/index.esm.js", diff --git a/packages/firebase/compat/performance/package.json b/packages/firebase/compat/performance/package.json index dc3b43f2221..351172acf38 100644 --- a/packages/firebase/compat/performance/package.json +++ b/packages/firebase/compat/performance/package.json @@ -1,5 +1,5 @@ { - "name": "firebase-exp/compat/performance", + "name": "firebase/compat/performance", "main": "dist/index.cjs", "browser": "dist/index.esm.js", "module": "dist/index.esm.js", diff --git a/packages/firebase/compat/remote-config/package.json b/packages/firebase/compat/remote-config/package.json index 9f68a1f4669..7ea8984ff67 100644 --- a/packages/firebase/compat/remote-config/package.json +++ b/packages/firebase/compat/remote-config/package.json @@ -1,5 +1,5 @@ { - "name": "firebase-exp/compat/remote-config", + "name": "firebase/compat/remote-config", "main": "dist/index.cjs", "browser": "dist/index.esm.js", "module": "dist/index.esm.js", diff --git a/packages/firebase/compat/storage/package.json b/packages/firebase/compat/storage/package.json index a286a2f82cd..0868deb2b98 100644 --- a/packages/firebase/compat/storage/package.json +++ b/packages/firebase/compat/storage/package.json @@ -1,5 +1,5 @@ { - "name": "firebase-exp/compat/storage", + "name": "firebase/compat/storage", "main": "dist/index.cjs", "browser": "dist/index.esm.js", "module": "dist/index.esm.js", diff --git a/packages/firebase/database/package.json b/packages/firebase/database/package.json index 535c4f4e261..9b3cab9a936 100644 --- a/packages/firebase/database/package.json +++ b/packages/firebase/database/package.json @@ -1,5 +1,5 @@ { - "name": "firebase-exp/database", + "name": "firebase/database", "main": "dist/index.cjs", "browser": "dist/index.esm.js", "module": "dist/index.esm.js", diff --git a/packages/firebase/firestore/lite/package.json b/packages/firebase/firestore/lite/package.json index d0b413bbf8b..e1c35ac46f4 100644 --- a/packages/firebase/firestore/lite/package.json +++ b/packages/firebase/firestore/lite/package.json @@ -1,5 +1,5 @@ { - "name": "firebase-exp/firestore/lite", + "name": "firebase/firestore/lite", "main": "dist/index.cjs", "browser": "dist/index.esm.js", "module": "dist/index.esm.js", diff --git a/packages/firebase/firestore/package.json b/packages/firebase/firestore/package.json index 25cc8b85aa6..fb322ca585f 100644 --- a/packages/firebase/firestore/package.json +++ b/packages/firebase/firestore/package.json @@ -1,5 +1,5 @@ { - "name": "firebase-exp/firestore", + "name": "firebase/firestore", "main": "dist/index.cjs", "browser": "dist/index.esm.js", "module": "dist/index.esm.js", diff --git a/packages/firebase/functions/index.ts b/packages/firebase/functions/index.ts index 7b0fa9efc45..f824c3ed4dc 100644 --- a/packages/firebase/functions/index.ts +++ b/packages/firebase/functions/index.ts @@ -14,4 +14,4 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -export * from '@firebase/functions-exp'; +export * from '@firebase/functions'; diff --git a/packages/firebase/functions/package.json b/packages/firebase/functions/package.json index aa6f2eea1fe..1b913d52a71 100644 --- a/packages/firebase/functions/package.json +++ b/packages/firebase/functions/package.json @@ -1,5 +1,5 @@ { - "name": "firebase-exp/functions", + "name": "firebase/functions", "main": "dist/index.cjs", "browser": "dist/index.esm.js", "module": "dist/index.esm.js", diff --git a/packages/firebase/messaging/index.ts b/packages/firebase/messaging/index.ts index 4a8d59d79ac..2e5c6771b0c 100644 --- a/packages/firebase/messaging/index.ts +++ b/packages/firebase/messaging/index.ts @@ -15,4 +15,4 @@ * limitations under the License. */ -export * from '@firebase/messaging-exp'; +export * from '@firebase/messaging'; diff --git a/packages/firebase/messaging/package.json b/packages/firebase/messaging/package.json index 6579c826379..e206ec9be75 100644 --- a/packages/firebase/messaging/package.json +++ b/packages/firebase/messaging/package.json @@ -1,5 +1,5 @@ { - "name": "firebase-exp/messaging", + "name": "firebase/messaging", "main": "dist/index.cjs", "browser": "dist/index.esm.js", "module": "dist/index.esm.js", diff --git a/packages/firebase/messaging/sw/index.ts b/packages/firebase/messaging/sw/index.ts index b5e3a0dfe44..c775878b0f0 100644 --- a/packages/firebase/messaging/sw/index.ts +++ b/packages/firebase/messaging/sw/index.ts @@ -15,4 +15,4 @@ * limitations under the License. */ -export { onBackgroundMessage, getMessaging } from '@firebase/messaging-exp/sw'; +export { onBackgroundMessage, getMessaging } from '@firebase/messaging/sw'; diff --git a/packages/firebase/messaging/sw/package.json b/packages/firebase/messaging/sw/package.json index f92db94c9f8..6824d4346aa 100644 --- a/packages/firebase/messaging/sw/package.json +++ b/packages/firebase/messaging/sw/package.json @@ -1,5 +1,5 @@ { - "name": "firebase-exp/messaging/sw", + "name": "firebase/messaging/sw", "main": "dist/index.cjs", "browser": "dist/index.esm.js", "module": "dist/index.esm.js", diff --git a/packages/firebase/package.json b/packages/firebase/package.json index e903b645707..852b5692c56 100644 --- a/packages/firebase/package.json +++ b/packages/firebase/package.json @@ -1,6 +1,6 @@ { "name": "firebase", - "version": "9.0.0-beta.8", + "version": "8.10.0", "private": true, "description": "Firebase JavaScript library for web and Node.js", "author": "Firebase (https://firebase.google.com/)", diff --git a/packages/firebase/performance/index.ts b/packages/firebase/performance/index.ts index e1ea2b74db5..ea17ad60e33 100644 --- a/packages/firebase/performance/index.ts +++ b/packages/firebase/performance/index.ts @@ -14,4 +14,4 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -export * from '@firebase/performance-exp'; +export * from '@firebase/performance'; diff --git a/packages/firebase/performance/package.json b/packages/firebase/performance/package.json index d5fef2a2102..c20ae856de6 100644 --- a/packages/firebase/performance/package.json +++ b/packages/firebase/performance/package.json @@ -1,5 +1,5 @@ { - "name": "firebase-exp/performance", + "name": "firebase/performance", "main": "dist/index.cjs", "browser": "dist/index.esm.js", "module": "dist/index.esm.js", diff --git a/packages/firebase/remote-config/index.ts b/packages/firebase/remote-config/index.ts index 73b26c811e9..6fee9e72bb6 100644 --- a/packages/firebase/remote-config/index.ts +++ b/packages/firebase/remote-config/index.ts @@ -14,4 +14,4 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -export * from '@firebase/remote-config-exp'; +export * from '@firebase/remote-config'; diff --git a/packages/firebase/remote-config/package.json b/packages/firebase/remote-config/package.json index 59559ee4973..9d33a5d720d 100644 --- a/packages/firebase/remote-config/package.json +++ b/packages/firebase/remote-config/package.json @@ -1,5 +1,5 @@ { - "name": "firebase-exp/remote-config", + "name": "firebase/remote-config", "main": "dist/index.cjs", "browser": "dist/index.esm.js", "module": "dist/index.esm.js", diff --git a/packages/firebase/storage/package.json b/packages/firebase/storage/package.json index 78c66914d69..564d5d96060 100644 --- a/packages/firebase/storage/package.json +++ b/packages/firebase/storage/package.json @@ -1,5 +1,5 @@ { - "name": "firebase-exp/storage", + "name": "firebase/storage", "main": "dist/index.cjs", "browser": "dist/index.esm.js", "module": "dist/index.esm.js", From 23dccb381cc207c683941fcd9aa9c1df273cd01d Mon Sep 17 00:00:00 2001 From: Feiyang1 Date: Wed, 18 Aug 2021 21:52:10 -0700 Subject: [PATCH 14/38] fix merge issues --- packages/auth/package.json | 8 +- packages/auth/rollup.config.js | 18 +++- packages/auth/scripts/run-node-tests.js | 84 ------------------- packages/auth/scripts/run-node-tests.ts | 93 --------------------- packages/auth/src/platform_browser/index.ts | 4 +- packages/auth/src/platform_node/index.ts | 4 +- packages/firebase/messaging/sw/index.ts | 6 +- 7 files changed, 26 insertions(+), 191 deletions(-) delete mode 100644 packages/auth/scripts/run-node-tests.js delete mode 100644 packages/auth/scripts/run-node-tests.ts diff --git a/packages/auth/package.json b/packages/auth/package.json index 1e9e9737d82..3f5cab287bb 100644 --- a/packages/auth/package.json +++ b/packages/auth/package.json @@ -37,10 +37,10 @@ "test:cordova": "karma start --single-run --cordova", "test:cordova:debug": "karma start --auto-watch --cordova", "test:node": "run-s test:node:unit test:node:integration:local", - "test:node:unit": "node ./scripts/run-node-tests.js", - "test:node:integration": "node ./scripts/run-node-tests.js --integration", - "test:node:integration:local": "node ./scripts/run-node-tests.js --integration --local", - "test:webdriver": "rollup -c test/integration/webdriver/static/rollup.config.js && node ./scripts/run-node-tests.js --webdriver", + "test:node:unit": "ts-node -O '{\"module\": \"commonjs\", \"target\": \"es6\"}' scripts/run_node_tests.ts", + "test:node:integration": "ts-node -O '{\"module\": \"commonjs\", \"target\": \"es6\"}' scripts/run_node_tests.ts --integration", + "test:node:integration:local": "ts-node -O '{\"module\": \"commonjs\", \"target\": \"es6\"}' scripts/run_node_tests.ts --integration --local", + "test:webdriver": "rollup -c test/integration/webdriver/static/rollup.config.js && ts-node -O '{\"module\": \"commonjs\", \"target\": \"es6\"}' scripts/run_node_tests.ts --webdriver", "api-report": "api-extractor run --local --verbose && ts-node-script ../../repo-scripts/prune-dts/prune-dts.ts --input dist/auth-public.d.ts --output dist/auth-public.d.ts", "doc": "api-documenter markdown --input temp --output docs", "build:doc": "yarn build && yarn doc", diff --git a/packages/auth/rollup.config.js b/packages/auth/rollup.config.js index bdf095cdef0..4a547d392b1 100644 --- a/packages/auth/rollup.config.js +++ b/packages/auth/rollup.config.js @@ -19,9 +19,25 @@ import strip from '@rollup/plugin-strip'; import typescriptPlugin from 'rollup-plugin-typescript2'; import json from '@rollup/plugin-json'; import typescript from 'typescript'; +import alias from '@rollup/plugin-alias'; import pkg from './package.json'; const deps = Object.keys(Object.assign({}, pkg.peerDependencies, pkg.dependencies)); + +/** + * Node has the same entry point as browser, but browser-specific exports + * are turned into either no-ops or errors. See src/platform_node/index.ts for + * more info. This regex tests explicitly ./src/platform_browser so that the + * only impacted file is the main index.ts + */ + const nodeAliasPlugin = alias({ + entries: [ + { + find: /^\.\/src\/platform_browser(\/.*)?$/, + replacement: `./src/platform_node` + } + ] + }); /** * ES5 Builds */ @@ -83,7 +99,7 @@ const es5Builds = [ internal: 'internal/index.ts' }, output: [{ dir: 'dist/node', format: 'cjs', sourcemap: true }], - plugins: es5BuildPlugins, + plugins: [nodeAliasPlugin, ...es5BuildPlugins], external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)) }, /** diff --git a/packages/auth/scripts/run-node-tests.js b/packages/auth/scripts/run-node-tests.js deleted file mode 100644 index 198e99f89b6..00000000000 --- a/packages/auth/scripts/run-node-tests.js +++ /dev/null @@ -1,84 +0,0 @@ -'use strict'; -/** - * @license - * Copyright 2020 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ var __spreadArrays = - (this && this.__spreadArrays) || - function () { - for (var s = 0, i = 0, il = arguments.length; i < il; i++) - s += arguments[i].length; - for (var r = Array(s), k = 0, i = 0; i < il; i++) - for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) - r[k] = a[j]; - return r; - }; -exports.__esModule = true; -var path_1 = require('path'); -var child_process_promise_1 = require('child-process-promise'); -var yargs = require('yargs'); -var argv = yargs.options({ - local: { type: 'boolean' }, - integration: { type: 'boolean' }, - webdriver: { type: 'boolean' } -}).argv; -var nyc = path_1.resolve(__dirname, '../../../node_modules/.bin/nyc'); -var mocha = path_1.resolve(__dirname, '../../../node_modules/.bin/mocha'); -process.env.TS_NODE_COMPILER_OPTIONS = '{"module":"commonjs", "target": "es6"}'; -var testConfig = [ - 'src/!(platform_browser|platform_react_native|platform_cordova)/**/*.test.ts', - '--file', - 'index.node.ts' -]; -if (argv.integration) { - testConfig = ['test/integration/flows/{email,anonymous}.test.ts']; - if (argv.local) { - testConfig.push('test/integration/flows/*.local.test.ts'); - } -} else if (argv.webdriver) { - testConfig = ['test/integration/webdriver/**.test.ts', '--delay']; -} -var args = __spreadArrays(['--reporter', 'lcovonly', mocha], testConfig, [ - '--config', - '../../config/mocharc.node.js' -]); -if (argv.local) { - if (!process.env.GCLOUD_PROJECT || !process.env.FIREBASE_AUTH_EMULATOR_HOST) { - console.error( - 'Local testing against emulator requested, but ' + - 'GCLOUD_PROJECT and FIREBASE_AUTH_EMULATOR_HOST env variables ' + - 'are missing' - ); - process.exit(1); - } -} -args = args.concat(argv._); -var spawned = child_process_promise_1.spawn(nyc, args, { - stdio: 'inherit', - cwd: process.cwd() -}); -var childProcess = spawned.childProcess; -spawned['catch'](function () { - childProcess.kill(); - process.exit(1); -}); -process.once('exit', function () { - return childProcess.kill(); -}); -process.once('SIGINT', function () { - return childProcess.kill('SIGINT'); -}); -process.once('SIGTERM', function () { - return childProcess.kill('SIGTERM'); -}); diff --git a/packages/auth/scripts/run-node-tests.ts b/packages/auth/scripts/run-node-tests.ts deleted file mode 100644 index 52d822fc645..00000000000 --- a/packages/auth/scripts/run-node-tests.ts +++ /dev/null @@ -1,93 +0,0 @@ -/** - * @license - * Copyright 2020 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { resolve } from 'path'; - -import { spawn } from 'child-process-promise'; -import * as yargs from 'yargs'; - -const argv = yargs.options({ - local: { - type: 'boolean' - }, - integration: { - type: 'boolean' - }, - webdriver: { - type: 'boolean' - } -}).argv; - -const nyc = resolve(__dirname, '../../../node_modules/.bin/nyc'); -const mocha = resolve(__dirname, '../../../node_modules/.bin/mocha'); - -process.env.TS_NODE_COMPILER_OPTIONS = '{"module":"commonjs", "target": "es6"}'; - -let testConfig = [ - 'src/!(platform_browser|platform_react_native|platform_cordova)/**/*.test.ts', - '--file', - 'index.shared.ts', - '--file', - 'src/platform_node/index.ts' // Exports getAuth -]; - -if (argv.integration) { - testConfig = ['test/integration/flows/{email,anonymous}.test.ts']; - if (argv.local) { - testConfig.push('test/integration/flows/*.local.test.ts'); - } -} else if (argv.webdriver) { - testConfig = ['test/integration/webdriver/*.test.ts', '--delay']; -} - -let args = [ - '--reporter', - 'lcovonly', - mocha, - ...testConfig, - '--config', - '../../config/mocharc.node.js' -]; - -// Make sure that the environment variables are present for local test -if (argv.local) { - if (!process.env.GCLOUD_PROJECT || !process.env.FIREBASE_AUTH_EMULATOR_HOST) { - console.error( - 'Local testing against emulator requested, but ' + - 'GCLOUD_PROJECT and FIREBASE_AUTH_EMULATOR_HOST env variables ' + - 'are missing' - ); - process.exit(1); - } -} - -args = args.concat(argv._ as string[]); - -const spawned = spawn(nyc, args, { - stdio: 'inherit', - cwd: process.cwd() -}); - -const childProcess = spawned.childProcess; -spawned.catch(() => { - childProcess.kill(); - process.exit(1); -}); - -process.once('exit', () => childProcess.kill()); -process.once('SIGINT', () => childProcess.kill('SIGINT')); -process.once('SIGTERM', () => childProcess.kill('SIGTERM')); diff --git a/packages/auth/src/platform_browser/index.ts b/packages/auth/src/platform_browser/index.ts index a0965ce1e8c..3d206c3706d 100644 --- a/packages/auth/src/platform_browser/index.ts +++ b/packages/auth/src/platform_browser/index.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { FirebaseApp, getApp, _getProvider } from '@firebase/app-exp'; +import { FirebaseApp, getApp, _getProvider } from '@firebase/app'; import { initializeAuth } from '..'; import { registerAuth } from '../core/auth/register'; @@ -35,7 +35,7 @@ import { Auth } from '../model/public_types'; * @public */ export function getAuth(app: FirebaseApp = getApp()): Auth { - const provider = _getProvider(app, 'auth-exp'); + const provider = _getProvider(app, 'auth'); if (provider.isInitialized()) { return provider.getImmediate(); diff --git a/packages/auth/src/platform_node/index.ts b/packages/auth/src/platform_node/index.ts index 9bc3bd9b8d5..dbb0239a431 100644 --- a/packages/auth/src/platform_node/index.ts +++ b/packages/auth/src/platform_node/index.ts @@ -18,7 +18,7 @@ import { AuthErrorCode } from '../core/errors'; import { _createError } from '../core/util/assert'; -import { FirebaseApp, getApp, _getProvider } from '@firebase/app-exp'; +import { FirebaseApp, getApp, _getProvider } from '@firebase/app'; import { Auth } from '../model/public_types'; import { initializeAuth } from '..'; @@ -40,7 +40,7 @@ FetchProvider.initialize( // the version and declare the Node getAuth function) export function getAuth(app: FirebaseApp = getApp()): Auth { - const provider = _getProvider(app, 'auth-exp'); + const provider = _getProvider(app, 'auth'); if (provider.isInitialized()) { return provider.getImmediate(); diff --git a/packages/firebase/messaging/sw/index.ts b/packages/firebase/messaging/sw/index.ts index d2d13c71166..cdeb3895bec 100644 --- a/packages/firebase/messaging/sw/index.ts +++ b/packages/firebase/messaging/sw/index.ts @@ -15,8 +15,4 @@ * limitations under the License. */ -export { - onBackgroundMessage, - getMessaging, - isSupported -} from '@firebase/messaging/sw'; +export * from '@firebase/messaging/sw'; From 4451f3f25ccc7437c25c307eaaf440cbd85ba268 Mon Sep 17 00:00:00 2001 From: Feiyang1 Date: Thu, 19 Aug 2021 17:10:45 -0700 Subject: [PATCH 15/38] save --- packages/app-compat/package.json | 2 +- packages/component/src/provider.test.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/app-compat/package.json b/packages/app-compat/package.json index 9e7fcac2593..1ed235863dd 100644 --- a/packages/app-compat/package.json +++ b/packages/app-compat/package.json @@ -26,7 +26,7 @@ }, "license": "Apache-2.0", "dependencies": { - "@firebase/app-exp": "0.6.30", + "@firebase/app": "0.6.30", "@firebase/util": "1.3.0", "@firebase/logger": "0.2.6", "@firebase/component": "0.5.6", diff --git a/packages/component/src/provider.test.ts b/packages/component/src/provider.test.ts index a6e7a076557..3f7e6c51023 100644 --- a/packages/component/src/provider.test.ts +++ b/packages/component/src/provider.test.ts @@ -20,7 +20,7 @@ import { fake, SinonSpy, match } from 'sinon'; import { ComponentContainer } from './component_container'; import { FirebaseService } from '@firebase/app-types/private'; // eslint-disable-next-line import/no-extraneous-dependencies -import { _FirebaseService } from '@firebase/app-exp'; +import { _FirebaseService } from '@firebase/app'; import { Provider } from './provider'; import { getFakeApp, getFakeComponent } from '../test/util'; import '../test/setup'; From 86849d9c760aeff26a5f6f98d251d42955fbafac Mon Sep 17 00:00:00 2001 From: Feiyang1 Date: Thu, 19 Aug 2021 17:13:02 -0700 Subject: [PATCH 16/38] fix firebase builds --- packages/firebase/compat/rollup.config.js | 39 +- .../firebase/compat/rollup.config.release.js | 411 - packages/firebase/index.d.ts | 10195 ---------------- packages/firebase/package.json | 2 - packages/firebase/rollup.config.release.js | 154 - 5 files changed, 22 insertions(+), 10779 deletions(-) delete mode 100644 packages/firebase/compat/rollup.config.release.js delete mode 100644 packages/firebase/index.d.ts delete mode 100644 packages/firebase/rollup.config.release.js diff --git a/packages/firebase/compat/rollup.config.js b/packages/firebase/compat/rollup.config.js index cd126ac9344..55de6caf393 100644 --- a/packages/firebase/compat/rollup.config.js +++ b/packages/firebase/compat/rollup.config.js @@ -43,7 +43,8 @@ function createUmdOutputConfig(output) { extend: true, name: GLOBAL_NAME, globals: { - '@firebase/app-compat': GLOBAL_NAME + '@firebase/app-compat': GLOBAL_NAME, + '@firebase/app': `${GLOBAL_NAME}.INTERNAL.modularAPIs` }, /** @@ -53,23 +54,27 @@ function createUmdOutputConfig(output) { * */ intro: ` - try { - (function() {`, + try { + (function() {`, outro: ` - }).apply(this, arguments); - } catch(err) { - console.error(err); - throw new Error( - 'Cannot instantiate ${output} - ' + - 'be sure to load firebase-app.js first.' - ); - }` + }).apply(this, arguments); + } catch(err) { + console.error(err); + throw new Error( + 'Cannot instantiate ${output} - ' + + 'be sure to load firebase-app.js first.' + ); + }` }; } const plugins = [sourcemaps(), resolveModule(), json(), commonjs()]; const typescriptPlugin = rollupTypescriptPlugin({ + typescript +}); + +const typescriptPluginCDN = rollupTypescriptPlugin({ typescript, tsconfigOverride: { compilerOptions: { @@ -113,7 +118,7 @@ const appBuilds = [ format: 'umd', name: GLOBAL_NAME }, - plugins: [...plugins, typescriptPlugin, uglify()] + plugins: [...plugins, typescriptPluginCDN, uglify()] } ]; @@ -143,8 +148,8 @@ const componentBuilds = compatPkg.components { input: `${__dirname}/${component}/index.ts`, output: createUmdOutputConfig(`firebase-${component}-compat.js`), - plugins: [...plugins, typescriptPlugin, uglify()], - external: ['@firebase/app-compat'] + plugins: [...plugins, typescriptPluginCDN, uglify()], + external: ['@firebase/app-compat', '@firebase/app'] } ]; }) @@ -177,7 +182,7 @@ const completeBuilds = [ sourcemap: true, name: GLOBAL_NAME }, - plugins: [...plugins, typescriptPlugin, uglify()] + plugins: [...plugins, typescriptPluginCDN, uglify()] }, /** * App Node.js Builds @@ -219,9 +224,9 @@ const completeBuilds = [ plugins: [ sourcemaps(), resolveModule({ - mainFields: ['lite', 'module', 'main'] + mainFields: ['lite-esm5', 'esm5', 'module'] }), - typescriptPlugin, + typescriptPluginCDN, json(), commonjs(), uglify() diff --git a/packages/firebase/compat/rollup.config.release.js b/packages/firebase/compat/rollup.config.release.js deleted file mode 100644 index 0cc32372299..00000000000 --- a/packages/firebase/compat/rollup.config.release.js +++ /dev/null @@ -1,411 +0,0 @@ -/** - * @license - * Copyright 2020 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { resolve } from 'path'; -import resolveModule from '@rollup/plugin-node-resolve'; -import commonjs from '@rollup/plugin-commonjs'; -import sourcemaps from 'rollup-plugin-sourcemaps'; -import rollupTypescriptPlugin from 'rollup-plugin-typescript2'; -import typescript from 'typescript'; -import { terser } from 'rollup-plugin-terser'; -import json from '@rollup/plugin-json'; -import pkg from '../package.json'; -import compatPkg from './package.json'; -import appPkg from './app/package.json'; -import alias from '@rollup/plugin-alias'; - -const external = Object.keys(pkg.dependencies || {}); - -/** - * Global UMD Build - */ -const GLOBAL_NAME = 'firebase'; - -function createUmdOutputConfig(output) { - return { - file: output, - format: 'umd', - sourcemap: true, - extend: true, - name: GLOBAL_NAME, - globals: { - '@firebase/app-compat': GLOBAL_NAME, - '@firebase/app': `${GLOBAL_NAME}.INTERNAL.modularAPIs` - }, - - /** - * use iife to avoid below error in the old Safari browser - * SyntaxError: Functions cannot be declared in a nested block in strict mode - * https://github.com/firebase/firebase-js-sdk/issues/1228 - * - */ - intro: ` - try { - (function() {`, - outro: ` - }).apply(this, arguments); - } catch(err) { - console.error(err); - throw new Error( - 'Cannot instantiate ${output} - ' + - 'be sure to load firebase-app.js first.' - ); - }` - }; -} - -const plugins = [ - sourcemaps(), - resolveModule({ - // hack to find firestore-compat and storage-compat - moduleDirectories: ['node_modules', resolve(__dirname, '../..')] - }), - json(), - commonjs() -]; - -const typescriptPlugin = rollupTypescriptPlugin({ - typescript -}); - -const typescriptPluginUMD = rollupTypescriptPlugin({ - typescript, - tsconfigOverride: { - compilerOptions: { - declaration: false - } - } -}); - -/** - * Individual Component Builds - */ -const appBuilds = [ - /** - * App NPM Builds - */ - { - input: `${__dirname}/app/index.ts`, - output: [ - { - file: resolve(__dirname, 'app', appPkg.main), - format: 'cjs', - sourcemap: true - }, - { - file: resolve(__dirname, 'app', appPkg.module), - format: 'es', - sourcemap: true - } - ], - plugins: [...plugins, typescriptPlugin], - external - }, - /** - * App UMD Builds - */ - { - input: `${__dirname}/app/index.cdn.ts`, - output: { - file: 'firebase-app-compat.js', - sourcemap: true, - format: 'umd', - name: GLOBAL_NAME - }, - plugins: [ - ...plugins, - typescriptPluginUMD, - alias({ - entries: [ - { - find: '@firebase/app', - replacement: '@firebase/app-exp' - } - ] - }), - terser({ - format: { - comments: false - } - }) - ] - } -]; - -const componentBuilds = compatPkg.components - // The "app" component is treated differently because it doesn't depend on itself. - .filter(component => component !== 'app') - .map(component => { - const pkg = require(`${__dirname}/${component}/package.json`); - return [ - { - input: `${__dirname}/${component}/index.ts`, - output: [ - { - file: resolve(__dirname, component, pkg.main), - format: 'cjs', - sourcemap: true - }, - { - file: resolve(__dirname, component, pkg.module), - format: 'es', - sourcemap: true - } - ], - plugins: [...plugins, typescriptPlugin], - external - }, - { - input: `${__dirname}/${component}/index.ts`, - output: createUmdOutputConfig(`firebase-${component}-compat.js`), - plugins: [ - ...plugins, - typescriptPluginUMD, - alias({ - entries: [ - { - find: `@firebase/${component}`, - replacement: `@firebase/${component}-exp` - }, - { - find: '@firebase/installations', - replacement: '@firebase/installations-exp' - }, - { - // hack to locate firestore-compat - find: '@firebase/firestore-compat', - replacement: 'firestore-compat' - }, - { - // hack to locate storage-compat - find: '@firebase/storage-compat', - replacement: 'storage-compat' - }, - { - // hack to locate database-compat - find: '@firebase/database-compat', - replacement: 'database-compat' - } - ] - }), - terser({ - format: { - comments: false - } - }) - ], - external: ['@firebase/app-compat', '@firebase/app'] - } - ]; - }) - .reduce((a, b) => a.concat(b), []); - -const aliasForCompleteCDNBuild = compatPkg.components - .filter(component => { - return ( - component !== 'firestore' && - component !== 'storage' && - component !== 'database' - ); - }) - .map(component => ({ - find: `@firebase/${component}`, - replacement: `@firebase/${component}-exp` - })) - .concat([ - { - find: '@firebase/installations', - replacement: '@firebase/installations-exp' - }, - { - // hack to locate firestore-compat - find: '@firebase/firestore-compat', - replacement: 'firestore-compat' - }, - { - // hack to locate storage-compat - find: '@firebase/storage-compat', - replacement: 'storage-compat' - }, - { - // hack to locate database-compat - find: '@firebase/database-compat', - replacement: 'database-compat' - } - ]); - -/** - * Complete Package Builds - */ -const completeBuilds = [ - /** - * App Browser Builds - */ - { - input: `${__dirname}/index.ts`, - output: [ - { - file: resolve(__dirname, compatPkg.module), - format: 'es', - sourcemap: true - } - ], - plugins: [...plugins, typescriptPluginUMD], - external - }, - { - input: `${__dirname}/index.cdn.ts`, - output: { - file: 'firebase-compat.js', - format: 'umd', - // disable sourcemap, otherwise build will fail with Error: Multiple conflicting contents for sourcemap source - // TODO: I think it's related to the alias() we are using, so let's try to reenable it for GA. - sourcemap: false, - name: GLOBAL_NAME - }, - plugins: [ - ...plugins, - typescriptPluginUMD, - terser(), - alias({ - entries: aliasForCompleteCDNBuild - }) - ] - }, - /** - * App Node.js Builds - */ - { - input: `${__dirname}/index.node.ts`, - output: { - file: resolve(__dirname, compatPkg.main), - format: 'cjs', - sourcemap: true - }, - plugins: [...plugins, typescriptPluginUMD], - external - }, - /** - * App React Native Builds - */ - { - input: `${__dirname}/index.rn.ts`, - output: { - file: resolve(__dirname, compatPkg['react-native']), - format: 'cjs', - sourcemap: true - }, - plugins: [...plugins, typescriptPluginUMD], - external - }, - /** - * Performance script Build - */ - { - input: `${__dirname}/index.perf.ts`, - output: { - file: 'firebase-performance-standalone-compat.js', - format: 'umd', - sourcemap: true, - name: GLOBAL_NAME - }, - plugins: [ - sourcemaps(), - resolveModule({ - mainFields: ['lite-esm5', 'esm5', 'module'] - }), - typescriptPluginUMD, - json(), - commonjs(), - terser({ - format: { - comments: false - } - }), - alias({ - entries: [ - { - find: '@firebase/app', - replacement: '@firebase/app-exp' - }, - { - find: `@firebase/performance`, - replacement: `@firebase/performance-exp` - }, - { - find: '@firebase/installations', - replacement: '@firebase/installations-exp' - } - ] - }) - ] - }, - /** - * Performance script Build in ES2017 - */ - { - input: `${__dirname}/index.perf.ts`, - output: { - file: 'firebase-performance-standalone-compat.es2017.js', - format: 'umd', - sourcemap: true, - name: GLOBAL_NAME - }, - plugins: [ - sourcemaps(), - resolveModule({ - mainFields: ['lite', 'module', 'main'] - }), - rollupTypescriptPlugin({ - typescript, - tsconfigOverride: { - compilerOptions: { - target: 'es2017', - declaration: false - } - } - }), - json({ - preferConst: true - }), - commonjs(), - terser({ - format: { - comments: false - } - }), - alias({ - entries: [ - { - find: '@firebase/app', - replacement: '@firebase/app-exp' - }, - { - find: `@firebase/performance`, - replacement: `@firebase/performance-exp` - }, - { - find: '@firebase/installations', - replacement: '@firebase/installations-exp' - } - ] - }) - ] - } -]; - -export default [...appBuilds, ...componentBuilds, ...completeBuilds]; diff --git a/packages/firebase/index.d.ts b/packages/firebase/index.d.ts deleted file mode 100644 index 1aec8b84575..00000000000 --- a/packages/firebase/index.d.ts +++ /dev/null @@ -1,10195 +0,0 @@ -/** - * @license - * Copyright 2017 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * firebase is a global namespace from which all Firebase - * services are accessed. - */ -declare namespace firebase { - /** - * @hidden - */ - type NextFn = (value: T) => void; - /** - * @hidden - */ - type ErrorFn = (error: E) => void; - /** - * @hidden - */ - type CompleteFn = () => void; - - /** - * `FirebaseError` is a subclass of the standard JavaScript `Error` object. In - * addition to a message string and stack trace, it contains a string code. - */ - interface FirebaseError { - /** - * Error codes are strings using the following format: `"service/string-code"`. - * Some examples include `"app/no-app"` and `"auth/user-not-found"`. - * - * While the message for a given error can change, the code will remain the same - * between backward-compatible versions of the Firebase SDK. - */ - code: string; - /** - * An explanatory message for the error that just occurred. - * - * This message is designed to be helpful to you, the developer. Because - * it generally does not convey meaningful information to end users, - * this message should not be displayed in your application. - */ - message: string; - /** - * The name of the class of errors, which is `"FirebaseError"`. - */ - name: string; - /** - * A string value containing the execution backtrace when the error originally - * occurred. This may not always be available. - * - * When it is available, this information can be sent to - * {@link https://firebase.google.com/support/ Firebase Support} to help - * explain the cause of an error. - */ - stack?: string; - } - - /** - * @hidden - */ - interface Observer { - next: NextFn; - error: ErrorFn; - complete: CompleteFn; - } - - /** - * The JS SDK supports 5 log levels and also allows a user the ability to - * silence the logs altogether. - * - * The order is as follows: - * silent < debug < verbose < info < warn < error - */ - type LogLevel = 'debug' | 'verbose' | 'info' | 'warn' | 'error' | 'silent'; - - /** - * The current SDK version. - */ - var SDK_VERSION: string; - - /** - * Registers a library's name and version for platform logging purposes. - * @param library Name of 1p or 3p library (e.g. firestore, angularfire) - * @param version Current version of that library. - * @param variant Bundle variant, e.g., node, rn, etc. - */ - function registerVersion( - library: string, - version: string, - variant?: string - ): void; - - /** - * Sets log level for all Firebase packages. - * - * All of the log types above the current log level are captured (i.e. if - * you set the log level to `info`, errors are logged, but `debug` and - * `verbose` logs are not). - */ - function setLogLevel(logLevel: LogLevel): void; - - /** - * Sets log handler for all Firebase packages. - * @param logCallback An optional custom log handler that executes user code whenever - * the Firebase SDK makes a logging call. - */ - function onLog( - logCallback: (callbackParams: { - /** - * Level of event logged. - */ - level: LogLevel; - /** - * Any text from logged arguments joined into one string. - */ - message: string; - /** - * The raw arguments passed to the log call. - */ - args: any[]; - /** - * A string indicating the name of the package that made the log call, - * such as `@firebase/firestore`. - */ - type: string; - }) => void, - options?: { - /** - * Threshhold log level. Only logs at or above this level trigger the `logCallback` - * passed to `onLog`. - */ - level: LogLevel; - } - ): void; - - /** - * @hidden - */ - type Unsubscribe = () => void; - - /** - * A user account. - */ - interface User extends firebase.UserInfo { - /** - * Deletes and signs out the user. - * - * Important: this is a security-sensitive operation that requires the - * user to have recently signed in. If this requirement isn't met, ask the user - * to authenticate again and then call - * {@link firebase.User.reauthenticateWithCredential}. - * - *

Error Codes

- *
- *
auth/requires-recent-login
- *
Thrown if the user's last sign-in time does not meet the security - * threshold. Use {@link firebase.User.reauthenticateWithCredential} to - * resolve. This does not apply if the user is anonymous.
- *
- */ - delete(): Promise; - emailVerified: boolean; - getIdTokenResult( - forceRefresh?: boolean - ): Promise; - /** - * Returns a JSON Web Token (JWT) used to identify the user to a Firebase - * service. - * - * Returns the current token if it has not expired. Otherwise, this will - * refresh the token and return a new one. - * - * @param forceRefresh Force refresh regardless of token - * expiration. - */ - getIdToken(forceRefresh?: boolean): Promise; - isAnonymous: boolean; - /** - * Links the user account with the given credentials and returns any available - * additional user information, such as user name. - * - *

Error Codes

- *
- *
auth/provider-already-linked
- *
Thrown if the provider has already been linked to the user. This error is - * thrown even if this is not the same provider's account that is currently - * linked to the user.
- *
auth/invalid-credential
- *
Thrown if the provider's credential is not valid. This can happen if it - * has already expired when calling link, or if it used invalid token(s). - * See the Firebase documentation for your provider, and make sure you pass - * in the correct parameters to the credential method.
- *
auth/credential-already-in-use
- *
Thrown if the account corresponding to the credential already exists - * among your users, or is already linked to a Firebase User. - * For example, this error could be thrown if you are upgrading an anonymous - * user to a Google user by linking a Google credential to it and the Google - * credential used is already associated with an existing Firebase Google - * user. - * The fields error.email, error.phoneNumber, and - * error.credential ({@link firebase.auth.AuthCredential}) - * may be provided, depending on the type of credential. You can recover - * from this error by signing in with error.credential directly - * via {@link firebase.auth.Auth.signInWithCredential}.
- *
auth/email-already-in-use
- *
Thrown if the email corresponding to the credential already exists - * among your users. When thrown while linking a credential to an existing - * user, an error.email and error.credential - * ({@link firebase.auth.AuthCredential}) fields are also provided. - * You have to link the credential to the existing user with that email if - * you wish to continue signing in with that credential. To do so, call - * {@link firebase.auth.Auth.fetchSignInMethodsForEmail}, sign in to - * error.email via one of the providers returned and then - * {@link firebase.User.linkWithCredential} the original credential to that - * newly signed in user.
- *
auth/operation-not-allowed
- *
Thrown if you have not enabled the provider in the Firebase Console. Go - * to the Firebase Console for your project, in the Auth section and the - * Sign in Method tab and configure the provider.
- *
auth/invalid-email
- *
Thrown if the email used in a - * {@link firebase.auth.EmailAuthProvider.credential} is invalid.
- *
auth/wrong-password
- *
Thrown if the password used in a - * {@link firebase.auth.EmailAuthProvider.credential} is not correct or - * when the user associated with the email does not have a password.
- *
auth/invalid-verification-code
- *
Thrown if the credential is a - * {@link firebase.auth.PhoneAuthProvider.credential} and the verification - * code of the credential is not valid.
- *
auth/invalid-verification-id
- *
Thrown if the credential is a - * {@link firebase.auth.PhoneAuthProvider.credential} and the verification - * ID of the credential is not valid.
- *
- * - * @deprecated This method is deprecated. Use - * {@link firebase.User.linkWithCredential} instead. - * - * @param credential The auth credential. - */ - linkAndRetrieveDataWithCredential( - credential: firebase.auth.AuthCredential - ): Promise; - /** - * Links the user account with the given credentials. - * - *

Error Codes

- *
- *
auth/provider-already-linked
- *
Thrown if the provider has already been linked to the user. This error is - * thrown even if this is not the same provider's account that is currently - * linked to the user.
- *
auth/invalid-credential
- *
Thrown if the provider's credential is not valid. This can happen if it - * has already expired when calling link, or if it used invalid token(s). - * See the Firebase documentation for your provider, and make sure you pass - * in the correct parameters to the credential method.
- *
auth/credential-already-in-use
- *
Thrown if the account corresponding to the credential already exists - * among your users, or is already linked to a Firebase User. - * For example, this error could be thrown if you are upgrading an anonymous - * user to a Google user by linking a Google credential to it and the Google - * credential used is already associated with an existing Firebase Google - * user. - * The fields error.email, error.phoneNumber, and - * error.credential ({@link firebase.auth.AuthCredential}) - * may be provided, depending on the type of credential. You can recover - * from this error by signing in with error.credential directly - * via {@link firebase.auth.Auth.signInWithCredential}.
- *
auth/email-already-in-use
- *
Thrown if the email corresponding to the credential already exists - * among your users. When thrown while linking a credential to an existing - * user, an error.email and error.credential - * ({@link firebase.auth.AuthCredential}) fields are also provided. - * You have to link the credential to the existing user with that email if - * you wish to continue signing in with that credential. To do so, call - * {@link firebase.auth.Auth.fetchSignInMethodsForEmail}, sign in to - * error.email via one of the providers returned and then - * {@link firebase.User.linkWithCredential} the original credential to that - * newly signed in user.
- *
auth/operation-not-allowed
- *
Thrown if you have not enabled the provider in the Firebase Console. Go - * to the Firebase Console for your project, in the Auth section and the - * Sign in Method tab and configure the provider.
- *
auth/invalid-email
- *
Thrown if the email used in a - * {@link firebase.auth.EmailAuthProvider.credential} is invalid.
- *
auth/wrong-password
- *
Thrown if the password used in a - * {@link firebase.auth.EmailAuthProvider.credential} is not correct or - * when the user associated with the email does not have a password.
- *
auth/invalid-verification-code
- *
Thrown if the credential is a - * {@link firebase.auth.PhoneAuthProvider.credential} and the verification - * code of the credential is not valid.
- *
auth/invalid-verification-id
- *
Thrown if the credential is a - * {@link firebase.auth.PhoneAuthProvider.credential} and the verification - * ID of the credential is not valid.
- *
- * - * @param credential The auth credential. - */ - linkWithCredential( - credential: firebase.auth.AuthCredential - ): Promise; - /** - * Links the user account with the given phone number. - * - *

Error Codes

- *
- *
auth/provider-already-linked
- *
Thrown if the provider has already been linked to the user. This error is - * thrown even if this is not the same provider's account that is currently - * linked to the user.
- *
auth/captcha-check-failed
- *
Thrown if the reCAPTCHA response token was invalid, expired, or if - * this method was called from a non-whitelisted domain.
- *
auth/invalid-phone-number
- *
Thrown if the phone number has an invalid format.
- *
auth/missing-phone-number
- *
Thrown if the phone number is missing.
- *
auth/quota-exceeded
- *
Thrown if the SMS quota for the Firebase project has been exceeded.
- *
auth/user-disabled
- *
Thrown if the user corresponding to the given phone number has been - * disabled.
- *
auth/credential-already-in-use
- *
Thrown if the account corresponding to the phone number already exists - * among your users, or is already linked to a Firebase User. - * The fields error.phoneNumber and - * error.credential ({@link firebase.auth.AuthCredential}) - * are provided in this case. You can recover from this error by signing in - * with that credential directly via - * {@link firebase.auth.Auth.signInWithCredential}.
- *
auth/operation-not-allowed
- *
Thrown if you have not enabled the phone authentication provider in the - * Firebase Console. Go to the Firebase Console for your project, in the - * Auth section and the Sign in Method tab and configure - * the provider.
- *
- * - * @param phoneNumber The user's phone number in E.164 format (e.g. - * +16505550101). - * @param applicationVerifier - */ - linkWithPhoneNumber( - phoneNumber: string, - applicationVerifier: firebase.auth.ApplicationVerifier - ): Promise; - /** - * Links the authenticated provider to the user account using a pop-up based - * OAuth flow. - * - * If the linking is successful, the returned result will contain the user - * and the provider's credential. - * - *

Error Codes

- *
- *
auth/auth-domain-config-required
- *
Thrown if authDomain configuration is not provided when calling - * firebase.initializeApp(). Check Firebase Console for instructions on - * determining and passing that field.
- *
auth/cancelled-popup-request
- *
Thrown if successive popup operations are triggered. Only one popup - * request is allowed at one time on a user or an auth instance. All the - * popups would fail with this error except for the last one.
- *
auth/credential-already-in-use
- *
Thrown if the account corresponding to the credential already exists - * among your users, or is already linked to a Firebase User. - * For example, this error could be thrown if you are upgrading an anonymous - * user to a Google user by linking a Google credential to it and the Google - * credential used is already associated with an existing Firebase Google - * user. - * An error.email and error.credential - * ({@link firebase.auth.AuthCredential}) fields are also provided. You can - * recover from this error by signing in with that credential directly via - * {@link firebase.auth.Auth.signInWithCredential}.
- *
auth/email-already-in-use
- *
Thrown if the email corresponding to the credential already exists - * among your users. When thrown while linking a credential to an existing - * user, an error.email and error.credential - * ({@link firebase.auth.AuthCredential}) fields are also provided. - * You have to link the credential to the existing user with that email if - * you wish to continue signing in with that credential. To do so, call - * {@link firebase.auth.Auth.fetchSignInMethodsForEmail}, sign in to - * error.email via one of the providers returned and then - * {@link firebase.User.linkWithCredential} the original credential to that - * newly signed in user.
- *
auth/operation-not-allowed
- *
Thrown if you have not enabled the provider in the Firebase Console. Go - * to the Firebase Console for your project, in the Auth section and the - * Sign in Method tab and configure the provider.
- *
auth/popup-blocked
- *
auth/operation-not-supported-in-this-environment
- *
Thrown if this operation is not supported in the environment your - * application is running on. "location.protocol" must be http or https. - *
- *
Thrown if the popup was blocked by the browser, typically when this - * operation is triggered outside of a click handler.
- *
auth/popup-closed-by-user
- *
Thrown if the popup window is closed by the user without completing the - * sign in to the provider.
- *
auth/provider-already-linked
- *
Thrown if the provider has already been linked to the user. This error is - * thrown even if this is not the same provider's account that is currently - * linked to the user.
- *
auth/unauthorized-domain
- *
Thrown if the app domain is not authorized for OAuth operations for your - * Firebase project. Edit the list of authorized domains from the Firebase - * console.
- *
- * - * @webonly - * - * @example - * ```javascript - * // Creates the provider object. - * var provider = new firebase.auth.FacebookAuthProvider(); - * // You can add additional scopes to the provider: - * provider.addScope('email'); - * provider.addScope('user_friends'); - * // Link with popup: - * user.linkWithPopup(provider).then(function(result) { - * // The firebase.User instance: - * var user = result.user; - * // The Facebook firebase.auth.AuthCredential containing the Facebook - * // access token: - * var credential = result.credential; - * }, function(error) { - * // An error happened. - * }); - * ``` - * - * @param provider The provider to authenticate. - * The provider has to be an OAuth provider. Non-OAuth providers like {@link - * firebase.auth.EmailAuthProvider} will throw an error. - */ - linkWithPopup( - provider: firebase.auth.AuthProvider - ): Promise; - /** - * Links the authenticated provider to the user account using a full-page - * redirect flow. - * - *

Error Codes

- *
- *
auth/auth-domain-config-required
- *
Thrown if authDomain configuration is not provided when calling - * firebase.initializeApp(). Check Firebase Console for instructions on - * determining and passing that field.
- *
auth/operation-not-supported-in-this-environment
- *
Thrown if this operation is not supported in the environment your - * application is running on. "location.protocol" must be http or https. - *
- *
auth/provider-already-linked
- *
Thrown if the provider has already been linked to the user. This error is - * thrown even if this is not the same provider's account that is currently - * linked to the user.
- *
auth/unauthorized-domain
- *
Thrown if the app domain is not authorized for OAuth operations for your - * Firebase project. Edit the list of authorized domains from the Firebase - * console.
- *
- * - * @param provider The provider to authenticate. - * The provider has to be an OAuth provider. Non-OAuth providers like {@link - * firebase.auth.EmailAuthProvider} will throw an error. - */ - linkWithRedirect(provider: firebase.auth.AuthProvider): Promise; - metadata: firebase.auth.UserMetadata; - /** - * The {@link firebase.User.MultiFactorUser} object corresponding to the current user. - * This is used to access all multi-factor properties and operations related to the - * current user. - */ - - multiFactor: firebase.User.MultiFactorUser; - /** - * The phone number normalized based on the E.164 standard (e.g. +16505550101) - * for the current user. This is null if the user has no phone credential linked - * to the account. - */ - phoneNumber: string | null; - providerData: (firebase.UserInfo | null)[]; - /** - * Re-authenticates a user using a fresh credential, and returns any available - * additional user information, such as user name. Use before operations - * such as {@link firebase.User.updatePassword} that require tokens from recent - * sign-in attempts. - * - *

Error Codes

- *
- *
auth/user-mismatch
- *
Thrown if the credential given does not correspond to the user.
- *
auth/user-not-found
- *
Thrown if the credential given does not correspond to any existing user. - *
- *
auth/invalid-credential
- *
Thrown if the provider's credential is not valid. This can happen if it - * has already expired when calling link, or if it used invalid token(s). - * See the Firebase documentation for your provider, and make sure you pass - * in the correct parameters to the credential method.
- *
auth/invalid-email
- *
Thrown if the email used in a - * {@link firebase.auth.EmailAuthProvider.credential} is invalid.
- *
auth/wrong-password
- *
Thrown if the password used in a - * {@link firebase.auth.EmailAuthProvider.credential} is not correct or when - * the user associated with the email does not have a password.
- *
auth/invalid-verification-code
- *
Thrown if the credential is a - * {@link firebase.auth.PhoneAuthProvider.credential} and the verification - * code of the credential is not valid.
- *
auth/invalid-verification-id
- *
Thrown if the credential is a - * {@link firebase.auth.PhoneAuthProvider.credential} and the verification - * ID of the credential is not valid.
- *
- * - * @deprecated - * This method is deprecated. Use - * {@link firebase.User.reauthenticateWithCredential} instead. - * - * @param credential - */ - reauthenticateAndRetrieveDataWithCredential( - credential: firebase.auth.AuthCredential - ): Promise; - /** - * Re-authenticates a user using a fresh credential. Use before operations - * such as {@link firebase.User.updatePassword} that require tokens from recent - * sign-in attempts. - * - *

Error Codes

- *
- *
auth/user-mismatch
- *
Thrown if the credential given does not correspond to the user.
- *
auth/user-not-found
- *
Thrown if the credential given does not correspond to any existing user. - *
- *
auth/invalid-credential
- *
Thrown if the provider's credential is not valid. This can happen if it - * has already expired when calling link, or if it used invalid token(s). - * See the Firebase documentation for your provider, and make sure you pass - * in the correct parameters to the credential method.
- *
auth/invalid-email
- *
Thrown if the email used in a - * {@link firebase.auth.EmailAuthProvider.credential} is invalid.
- *
auth/wrong-password
- *
Thrown if the password used in a - * {@link firebase.auth.EmailAuthProvider.credential} is not correct or when - * the user associated with the email does not have a password.
- *
auth/invalid-verification-code
- *
Thrown if the credential is a - * {@link firebase.auth.PhoneAuthProvider.credential} and the verification - * code of the credential is not valid.
- *
auth/invalid-verification-id
- *
Thrown if the credential is a - * {@link firebase.auth.PhoneAuthProvider.credential} and the verification - * ID of the credential is not valid.
- *
- * - * @param credential - */ - reauthenticateWithCredential( - credential: firebase.auth.AuthCredential - ): Promise; - /** - * Re-authenticates a user using a fresh credential. Use before operations - * such as {@link firebase.User.updatePassword} that require tokens from recent - * sign-in attempts. - * - *

Error Codes

- *
- *
auth/user-mismatch
- *
Thrown if the credential given does not correspond to the user.
- *
auth/user-not-found
- *
Thrown if the credential given does not correspond to any existing user. - *
- *
auth/captcha-check-failed
- *
Thrown if the reCAPTCHA response token was invalid, expired, or if - * this method was called from a non-whitelisted domain.
- *
auth/invalid-phone-number
- *
Thrown if the phone number has an invalid format.
- *
auth/missing-phone-number
- *
Thrown if the phone number is missing.
- *
auth/quota-exceeded
- *
Thrown if the SMS quota for the Firebase project has been exceeded.
- *
- * - * @param phoneNumber The user's phone number in E.164 format (e.g. - * +16505550101). - * @param applicationVerifier - */ - reauthenticateWithPhoneNumber( - phoneNumber: string, - applicationVerifier: firebase.auth.ApplicationVerifier - ): Promise; - /** - * Reauthenticates the current user with the specified provider using a pop-up - * based OAuth flow. - * - * If the reauthentication is successful, the returned result will contain the - * user and the provider's credential. - * - *

Error Codes

- *
- *
auth/auth-domain-config-required
- *
Thrown if authDomain configuration is not provided when calling - * firebase.initializeApp(). Check Firebase Console for instructions on - * determining and passing that field.
- *
auth/cancelled-popup-request
- *
Thrown if successive popup operations are triggered. Only one popup - * request is allowed at one time on a user or an auth instance. All the - * popups would fail with this error except for the last one.
- *
auth/user-mismatch
- *
Thrown if the credential given does not correspond to the user.
- *
auth/operation-not-allowed
- *
Thrown if you have not enabled the provider in the Firebase Console. Go - * to the Firebase Console for your project, in the Auth section and the - * Sign in Method tab and configure the provider.
- *
auth/popup-blocked
- *
Thrown if the popup was blocked by the browser, typically when this - * operation is triggered outside of a click handler.
- *
auth/operation-not-supported-in-this-environment
- *
Thrown if this operation is not supported in the environment your - * application is running on. "location.protocol" must be http or https. - *
- *
auth/popup-closed-by-user
- *
Thrown if the popup window is closed by the user without completing the - * sign in to the provider.
- *
auth/unauthorized-domain
- *
Thrown if the app domain is not authorized for OAuth operations for your - * Firebase project. Edit the list of authorized domains from the Firebase - * console.
- *
- * - * @webonly - * - * @example - * ```javascript - * // Creates the provider object. - * var provider = new firebase.auth.FacebookAuthProvider(); - * // You can add additional scopes to the provider: - * provider.addScope('email'); - * provider.addScope('user_friends'); - * // Reauthenticate with popup: - * user.reauthenticateWithPopup(provider).then(function(result) { - * // The firebase.User instance: - * var user = result.user; - * // The Facebook firebase.auth.AuthCredential containing the Facebook - * // access token: - * var credential = result.credential; - * }, function(error) { - * // An error happened. - * }); - * ``` - * - * @param provider The provider to authenticate. - * The provider has to be an OAuth provider. Non-OAuth providers like {@link - * firebase.auth.EmailAuthProvider} will throw an error. - */ - reauthenticateWithPopup( - provider: firebase.auth.AuthProvider - ): Promise; - /** - * Reauthenticates the current user with the specified OAuth provider using a - * full-page redirect flow. - * - *

Error Codes

- *
- *
auth/auth-domain-config-required
- *
Thrown if authDomain configuration is not provided when calling - * firebase.initializeApp(). Check Firebase Console for instructions on - * determining and passing that field.
- *
auth/operation-not-supported-in-this-environment
- *
Thrown if this operation is not supported in the environment your - * application is running on. "location.protocol" must be http or https. - *
- *
auth/user-mismatch
- *
Thrown if the credential given does not correspond to the user.
- *
auth/unauthorized-domain
- *
Thrown if the app domain is not authorized for OAuth operations for your - * Firebase project. Edit the list of authorized domains from the Firebase - * console.
- *
- * - * @webonly - * - * @param provider The provider to authenticate. - * The provider has to be an OAuth provider. Non-OAuth providers like {@link - * firebase.auth.EmailAuthProvider} will throw an error. - */ - reauthenticateWithRedirect( - provider: firebase.auth.AuthProvider - ): Promise; - refreshToken: string; - /** - * Refreshes the current user, if signed in. - * - */ - reload(): Promise; - /** - * Sends a verification email to a user. - * - * The verification process is completed by calling - * {@link firebase.auth.Auth.applyActionCode} - * - *

Error Codes

- *
- *
auth/missing-android-pkg-name
- *
An Android package name must be provided if the Android app is required - * to be installed.
- *
auth/missing-continue-uri
- *
A continue URL must be provided in the request.
- *
auth/missing-ios-bundle-id
- *
An iOS bundle ID must be provided if an App Store ID is provided.
- *
auth/invalid-continue-uri
- *
The continue URL provided in the request is invalid.
- *
auth/unauthorized-continue-uri
- *
The domain of the continue URL is not whitelisted. Whitelist - * the domain in the Firebase console.
- *
- * - * @example - * ```javascript - * var actionCodeSettings = { - * url: 'https://www.example.com/cart?email=user@example.com&cartId=123', - * iOS: { - * bundleId: 'com.example.ios' - * }, - * android: { - * packageName: 'com.example.android', - * installApp: true, - * minimumVersion: '12' - * }, - * handleCodeInApp: true - * }; - * firebase.auth().currentUser.sendEmailVerification(actionCodeSettings) - * .then(function() { - * // Verification email sent. - * }) - * .catch(function(error) { - * // Error occurred. Inspect error.code. - * }); - * ``` - * - * @param actionCodeSettings The action - * code settings. If specified, the state/continue URL will be set as the - * "continueUrl" parameter in the email verification link. The default email - * verification landing page will use this to display a link to go back to - * the app if it is installed. - * If the actionCodeSettings is not specified, no URL is appended to the - * action URL. - * The state URL provided must belong to a domain that is whitelisted by the - * developer in the console. Otherwise an error will be thrown. - * Mobile app redirects will only be applicable if the developer configures - * and accepts the Firebase Dynamic Links terms of condition. - * The Android package name and iOS bundle ID will be respected only if they - * are configured in the same Firebase Auth project used. - */ - sendEmailVerification( - actionCodeSettings?: firebase.auth.ActionCodeSettings | null - ): Promise; - /** - * The current user's tenant ID. This is a read-only property, which indicates - * the tenant ID used to sign in the current user. This is null if the user is - * signed in from the parent project. - * - * @example - * ```javascript - * // Set the tenant ID on Auth instance. - * firebase.auth().tenantId = ‘TENANT_PROJECT_ID’; - * - * // All future sign-in request now include tenant ID. - * firebase.auth().signInWithEmailAndPassword(email, password) - * .then(function(result) { - * // result.user.tenantId should be ‘TENANT_PROJECT_ID’. - * }).catch(function(error) { - * // Handle error. - * }); - * ``` - */ - tenantId: string | null; - /** - * Returns a JSON-serializable representation of this object. - * - * @return A JSON-serializable representation of this object. - */ - toJSON(): Object; - /** - * Unlinks a provider from a user account. - * - *

Error Codes

- *
- *
auth/no-such-provider
- *
Thrown if the user does not have this provider linked or when the - * provider ID given does not exist.
- * - * - * @param providerId - */ - unlink(providerId: string): Promise; - /** - * Updates the user's email address. - * - * An email will be sent to the original email address (if it was set) that - * allows to revoke the email address change, in order to protect them from - * account hijacking. - * - * Important: this is a security sensitive operation that requires the - * user to have recently signed in. If this requirement isn't met, ask the user - * to authenticate again and then call - * {@link firebase.User.reauthenticateWithCredential}. - * - *

Error Codes

- *
- *
auth/invalid-email
- *
Thrown if the email used is invalid.
- *
auth/email-already-in-use
- *
Thrown if the email is already used by another user.
- *
auth/requires-recent-login
- *
Thrown if the user's last sign-in time does not meet the security - * threshold. Use {@link firebase.User.reauthenticateWithCredential} to - * resolve. This does not apply if the user is anonymous.
- *
- * - * @param newEmail The new email address. - */ - updateEmail(newEmail: string): Promise; - /** - * Updates the user's password. - * - * Important: this is a security sensitive operation that requires the - * user to have recently signed in. If this requirement isn't met, ask the user - * to authenticate again and then call - * {@link firebase.User.reauthenticateWithCredential}. - * - *

Error Codes

- *
- *
auth/weak-password
- *
Thrown if the password is not strong enough.
- *
auth/requires-recent-login
- *
Thrown if the user's last sign-in time does not meet the security - * threshold. Use {@link firebase.User.reauthenticateWithCredential} to - * resolve. This does not apply if the user is anonymous.
- *
- * - * @param newPassword - */ - updatePassword(newPassword: string): Promise; - /** - * Updates the user's phone number. - * - *

Error Codes

- *
- *
auth/invalid-verification-code
- *
Thrown if the verification code of the credential is not valid.
- *
auth/invalid-verification-id
- *
Thrown if the verification ID of the credential is not valid.
- *
- * - * @param phoneCredential - */ - updatePhoneNumber( - phoneCredential: firebase.auth.AuthCredential - ): Promise; - /** - * Updates a user's profile data. - * - * @example - * ```javascript - * // Updates the user attributes: - * user.updateProfile({ - * displayName: "Jane Q. User", - * photoURL: "https://example.com/jane-q-user/profile.jpg" - * }).then(function() { - * // Profile updated successfully! - * // "Jane Q. User" - * var displayName = user.displayName; - * // "https://example.com/jane-q-user/profile.jpg" - * var photoURL = user.photoURL; - * }, function(error) { - * // An error happened. - * }); - * - * // Passing a null value will delete the current attribute's value, but not - * // passing a property won't change the current attribute's value: - * // Let's say we're using the same user than before, after the update. - * user.updateProfile({photoURL: null}).then(function() { - * // Profile updated successfully! - * // "Jane Q. User", hasn't changed. - * var displayName = user.displayName; - * // Now, this is null. - * var photoURL = user.photoURL; - * }, function(error) { - * // An error happened. - * }); - * ``` - * - * @param profile The profile's - * displayName and photoURL to update. - */ - updateProfile(profile: { - displayName?: string | null; - photoURL?: string | null; - }): Promise; - /** - * Sends a verification email to a new email address. The user's email will be - * updated to the new one after being verified. - * - * If you have a custom email action handler, you can complete the verification - * process by calling {@link firebase.auth.Auth.applyActionCode}. - * - *

Error Codes

- *
- *
auth/missing-android-pkg-name
- *
An Android package name must be provided if the Android app is required - * to be installed.
- *
auth/missing-continue-uri
- *
A continue URL must be provided in the request.
- *
auth/missing-ios-bundle-id
- *
An iOS bundle ID must be provided if an App Store ID is provided.
- *
auth/invalid-continue-uri
- *
The continue URL provided in the request is invalid.
- *
auth/unauthorized-continue-uri
- *
The domain of the continue URL is not whitelisted. Whitelist - * the domain in the Firebase console.
- *
- * - * @example - * ```javascript - * var actionCodeSettings = { - * url: 'https://www.example.com/cart?email=user@example.com&cartId=123', - * iOS: { - * bundleId: 'com.example.ios' - * }, - * android: { - * packageName: 'com.example.android', - * installApp: true, - * minimumVersion: '12' - * }, - * handleCodeInApp: true - * }; - * firebase.auth().currentUser.verifyBeforeUpdateEmail( - * 'user@example.com', actionCodeSettings) - * .then(function() { - * // Verification email sent. - * }) - * .catch(function(error) { - * // Error occurred. Inspect error.code. - * }); - * ``` - * - * @param newEmail The email address to be verified and updated to. - * @param actionCodeSettings The action - * code settings. If specified, the state/continue URL will be set as the - * "continueUrl" parameter in the email verification link. The default email - * verification landing page will use this to display a link to go back to - * the app if it is installed. - * If the actionCodeSettings is not specified, no URL is appended to the - * action URL. - * The state URL provided must belong to a domain that is whitelisted by the - * developer in the console. Otherwise an error will be thrown. - * Mobile app redirects will only be applicable if the developer configures - * and accepts the Firebase Dynamic Links terms of condition. - * The Android package name and iOS bundle ID will be respected only if they - * are configured in the same Firebase Auth project used. - */ - verifyBeforeUpdateEmail( - newEmail: string, - actionCodeSettings?: firebase.auth.ActionCodeSettings | null - ): Promise; - } - - /** - * User profile information, visible only to the Firebase project's - * apps. - * - */ - interface UserInfo { - displayName: string | null; - email: string | null; - phoneNumber: string | null; - photoURL: string | null; - providerId: string; - /** - * The user's unique ID. - */ - uid: string; - } - - type FirebaseSignInProvider = - | 'custom' - | 'email' - | 'password' - | 'phone' - | 'anonymous' - | 'google.com' - | 'facebook.com' - | 'github.com' - | 'twitter.com' - | 'microsoft.com' - | 'apple.com'; - - interface FirebaseIdToken { - /** Always set to https://securetoken.google.com/PROJECT_ID */ - iss: string; - - /** Always set to PROJECT_ID */ - aud: string; - - /** The user's unique ID */ - sub: string; - - /** The token issue time, in seconds since epoch */ - iat: number; - - /** The token expiry time, normally 'iat' + 3600 */ - exp: number; - - /** The user's unique ID. Must be equal to 'sub' */ - user_id: string; - - /** The time the user authenticated, normally 'iat' */ - auth_time: number; - - /** The sign in provider, only set when the provider is 'anonymous' */ - provider_id?: 'anonymous'; - - /** The user's primary email */ - email?: string; - - /** The user's email verification status */ - email_verified?: boolean; - - /** The user's primary phone number */ - phone_number?: string; - - /** The user's display name */ - name?: string; - - /** The user's profile photo URL */ - picture?: string; - - /** Information on all identities linked to this user */ - firebase: { - /** The primary sign-in provider */ - sign_in_provider: FirebaseSignInProvider; - - /** A map of providers to the user's list of unique identifiers from each provider */ - identities?: { [provider in FirebaseSignInProvider]?: string[] }; - }; - - /** Custom claims set by the developer */ - [claim: string]: unknown; - - // NO LONGER SUPPORTED. Use "sub" instead. (Not a jsdoc comment to avoid generating docs.) - uid?: never; - } - - export type EmulatorMockTokenOptions = ( - | { user_id: string } - | { sub: string } - ) & - Partial; - - /** - * Retrieves a Firebase {@link firebase.app.App app} instance. - * - * When called with no arguments, the default app is returned. When an app name - * is provided, the app corresponding to that name is returned. - * - * An exception is thrown if the app being retrieved has not yet been - * initialized. - * - * @example - * ```javascript - * // Return the default app - * var app = firebase.app(); - * ``` - * - * @example - * ```javascript - * // Return a named app - * var otherApp = firebase.app("otherApp"); - * ``` - * - * @param name Optional name of the app to return. If no name is - * provided, the default is `"[DEFAULT]"`. - * - * @return The app corresponding to the provided app name. - * If no app name is provided, the default app is returned. - */ - function app(name?: string): firebase.app.App; - - /** - * A (read-only) array of all initialized apps. - */ - var apps: firebase.app.App[]; - - /** - * Gets the {@link firebase.auth.Auth `Auth`} service for the default app or a - * given app. - * - * `firebase.auth()` can be called with no arguments to access the default app's - * {@link firebase.auth.Auth `Auth`} service or as `firebase.auth(app)` to - * access the {@link firebase.auth.Auth `Auth`} service associated with a - * specific app. - * - * @example - * ```javascript - * - * // Get the Auth service for the default app - * var defaultAuth = firebase.auth(); - * ``` - * @example - * ```javascript - * - * // Get the Auth service for a given app - * var otherAuth = firebase.auth(otherApp); - * ``` - * @param app - */ - function auth(app?: firebase.app.App): firebase.auth.Auth; - - /** - * Gets the {@link firebase.database.Database `Database`} service for the - * default app or a given app. - * - * `firebase.database()` can be called with no arguments to access the default - * app's {@link firebase.database.Database `Database`} service or as - * `firebase.database(app)` to access the - * {@link firebase.database.Database `Database`} service associated with a - * specific app. - * - * `firebase.database` is also a namespace that can be used to access global - * constants and methods associated with the `Database` service. - * - * @example - * ```javascript - * // Get the Database service for the default app - * var defaultDatabase = firebase.database(); - * ``` - * - * @example - * ```javascript - * // Get the Database service for a specific app - * var otherDatabase = firebase.database(app); - * ``` - * - * @namespace - * @param app Optional app whose Database service to - * return. If not provided, the default Database service will be returned. - * @return The default Database service if no app - * is provided or the Database service associated with the provided app. - */ - function database(app?: firebase.app.App): firebase.database.Database; - - /** - * Creates and initializes a Firebase {@link firebase.app.App app} instance. - * - * See - * {@link - * https://firebase.google.com/docs/web/setup#add_firebase_to_your_app - * Add Firebase to your app} and - * {@link - * https://firebase.google.com/docs/web/learn-more#multiple-projects - * Initialize multiple projects} for detailed documentation. - * - * @example - * ```javascript - * - * // Initialize default app - * // Retrieve your own options values by adding a web app on - * // https://console.firebase.google.com - * firebase.initializeApp({ - * apiKey: "AIza....", // Auth / General Use - * appId: "1:27992087142:web:ce....", // General Use - * projectId: "my-firebase-project", // General Use - * authDomain: "YOUR_APP.firebaseapp.com", // Auth with popup/redirect - * databaseURL: "https://YOUR_APP.firebaseio.com", // Realtime Database - * storageBucket: "YOUR_APP.appspot.com", // Storage - * messagingSenderId: "123456789", // Cloud Messaging - * measurementId: "G-12345" // Analytics - * }); - * ``` - * - * @example - * ```javascript - * - * // Initialize another app - * var otherApp = firebase.initializeApp({ - * apiKey: "AIza....", - * appId: "1:27992087142:web:ce....", - * projectId: "my-firebase-project", - * databaseURL: "https://.firebaseio.com", - * storageBucket: ".appspot.com" - * }, "nameOfOtherApp"); - * ``` - * - * @param options Options to configure the app's services. - * @param name Optional name of the app to initialize. If no name - * is provided, the default is `"[DEFAULT]"`. - * - * @return {!firebase.app.App} The initialized app. - */ - function initializeApp(options: Object, name?: string): firebase.app.App; - - /** - * Gets the {@link firebase.messaging.Messaging `Messaging`} service for the - * default app or a given app. - * - * `firebase.messaging()` can be called with no arguments to access the default - * app's {@link firebase.messaging.Messaging `Messaging`} service or as - * `firebase.messaging(app)` to access the - * {@link firebase.messaging.Messaging `Messaging`} service associated with a - * specific app. - * - * Calling `firebase.messaging()` in a service worker results in Firebase - * generating notifications if the push message payload has a `notification` - * parameter. - * - * @webonly - * - * @example - * ```javascript - * // Get the Messaging service for the default app - * var defaultMessaging = firebase.messaging(); - * ``` - * - * @example - * ```javascript - * // Get the Messaging service for a given app - * var otherMessaging = firebase.messaging(otherApp); - * ``` - * - * @namespace - * @param app The app to create a Messaging service for. - * If not passed, uses the default app. - */ - function messaging(app?: firebase.app.App): firebase.messaging.Messaging; - - /** - * Gets the {@link firebase.storage.Storage `Storage`} service for the default - * app or a given app. - * - * `firebase.storage()` can be called with no arguments to access the default - * app's {@link firebase.storage.Storage `Storage`} service or as - * `firebase.storage(app)` to access the - * {@link firebase.storage.Storage `Storage`} service associated with a - * specific app. - * - * @example - * ```javascript - * // Get the Storage service for the default app - * var defaultStorage = firebase.storage(); - * ``` - * - * @example - * ```javascript - * // Get the Storage service for a given app - * var otherStorage = firebase.storage(otherApp); - * ``` - * - * @param app The app to create a storage service for. - * If not passed, uses the default app. - */ - function storage(app?: firebase.app.App): firebase.storage.Storage; - - function firestore(app?: firebase.app.App): firebase.firestore.Firestore; - - function functions(app?: firebase.app.App): firebase.functions.Functions; - - /** - * Gets the {@link firebase.performance.Performance `Performance`} service. - * - * `firebase.performance()` can be called with no arguments to access the default - * app's {@link firebase.performance.Performance `Performance`} service. - * The {@link firebase.performance.Performance `Performance`} service does not work with - * any other app. - * - * @webonly - * - * @example - * ```javascript - * // Get the Performance service for the default app - * const defaultPerformance = firebase.performance(); - * ``` - * - * @param app The app to create a performance service for. Performance Monitoring only works with - * the default app. - * If not passed, uses the default app. - */ - function performance( - app?: firebase.app.App - ): firebase.performance.Performance; - - /** - * Gets the {@link firebase.remoteConfig.RemoteConfig `RemoteConfig`} instance. - * - * @webonly - * - * @example - * ```javascript - * // Get the RemoteConfig instance for the default app - * const defaultRemoteConfig = firebase.remoteConfig(); - * ``` - * - * @param app The app to create a Remote Config service for. If not passed, uses the default app. - */ - function remoteConfig( - app?: firebase.app.App - ): firebase.remoteConfig.RemoteConfig; - - /** - * Gets the {@link firebase.analytics.Analytics `Analytics`} service. - * - * `firebase.analytics()` can be called with no arguments to access the default - * app's {@link firebase.analytics.Analytics `Analytics`} service. - * - * @webonly - * - * @example - * ```javascript - * // Get the Analytics service for the default app - * const defaultAnalytics = firebase.analytics(); - * ``` - * - * @param app The app to create an analytics service for. - * If not passed, uses the default app. - */ - function analytics(app?: firebase.app.App): firebase.analytics.Analytics; - - function appCheck(app?: firebase.app.App): firebase.appCheck.AppCheck; -} - -declare namespace firebase.app { - /** - * A Firebase App holds the initialization information for a collection of - * services. - * - * Do not call this constructor directly. Instead, use - * {@link firebase.initializeApp|`firebase.initializeApp()`} to create an app. - * - */ - interface App { - /** - * Gets the {@link firebase.auth.Auth `Auth`} service for the current app. - * - * @example - * ```javascript - * var auth = app.auth(); - * // The above is shorthand for: - * // var auth = firebase.auth(app); - * ``` - */ - auth(): firebase.auth.Auth; - /** - * Gets the {@link firebase.database.Database `Database`} service for the - * current app. - * - * @example - * ```javascript - * var database = app.database(); - * // The above is shorthand for: - * // var database = firebase.database(app); - * ``` - */ - database(url?: string): firebase.database.Database; - /** - * Renders this app unusable and frees the resources of all associated - * services. - * - * @example - * ```javascript - * app.delete() - * .then(function() { - * console.log("App deleted successfully"); - * }) - * .catch(function(error) { - * console.log("Error deleting app:", error); - * }); - * ``` - */ - delete(): Promise; - /** - * Gets the {@link firebase.installations.Installations `Installations`} service for the - * current app. - * - * @webonly - * - * @example - * ```javascript - * const installations = app.installations(); - * // The above is shorthand for: - * // const installations = firebase.installations(app); - * ``` - */ - installations(): firebase.installations.Installations; - /** - * Gets the {@link firebase.messaging.Messaging `Messaging`} service for the - * current app. - * - * @webonly - * - * @example - * ```javascript - * var messaging = app.messaging(); - * // The above is shorthand for: - * // var messaging = firebase.messaging(app); - * ``` - */ - messaging(): firebase.messaging.Messaging; - /** - * The (read-only) name for this app. - * - * The default app's name is `"[DEFAULT]"`. - * - * @example - * ```javascript - * // The default app's name is "[DEFAULT]" - * firebase.initializeApp(defaultAppConfig); - * console.log(firebase.app().name); // "[DEFAULT]" - * ``` - * - * @example - * ```javascript - * // A named app's name is what you provide to initializeApp() - * var otherApp = firebase.initializeApp(otherAppConfig, "other"); - * console.log(otherApp.name); // "other" - * ``` - */ - name: string; - /** - * The (read-only) configuration options for this app. These are the original - * parameters given in - * {@link firebase.initializeApp `firebase.initializeApp()`}. - * - * @example - * ```javascript - * var app = firebase.initializeApp(config); - * console.log(app.options.databaseURL === config.databaseURL); // true - * ``` - */ - options: Object; - /** - * Gets the {@link firebase.storage.Storage `Storage`} service for the current - * app, optionally initialized with a custom storage bucket. - * - * @example - * ```javascript - * var storage = app.storage(); - * // The above is shorthand for: - * // var storage = firebase.storage(app); - * ``` - * - * @example - * ```javascript - * var storage = app.storage("gs://your-app.appspot.com"); - * ``` - * - * @param url The gs:// url to your Firebase Storage Bucket. - * If not passed, uses the app's default Storage Bucket. - */ - storage(url?: string): firebase.storage.Storage; - firestore(): firebase.firestore.Firestore; - functions(regionOrCustomDomain?: string): firebase.functions.Functions; - /** - * Gets the {@link firebase.performance.Performance `Performance`} service for the - * current app. If the current app is not the default one, throws an error. - * - * @webonly - * - * @example - * ```javascript - * const perf = app.performance(); - * // The above is shorthand for: - * // const perf = firebase.performance(app); - * ``` - */ - performance(): firebase.performance.Performance; - /** - * Gets the {@link firebase.remoteConfig.RemoteConfig `RemoteConfig`} instance. - * - * @webonly - * - * @example - * ```javascript - * const rc = app.remoteConfig(); - * // The above is shorthand for: - * // const rc = firebase.remoteConfig(app); - * ``` - */ - remoteConfig(): firebase.remoteConfig.RemoteConfig; - /** - * Gets the {@link firebase.analytics.Analytics `Analytics`} service for the - * current app. If the current app is not the default one, throws an error. - * - * @webonly - * - * @example - * ```javascript - * const analytics = app.analytics(); - * // The above is shorthand for: - * // const analytics = firebase.analytics(app); - * ``` - */ - analytics(): firebase.analytics.Analytics; - appCheck(): firebase.appCheck.AppCheck; - } -} - -/** - * @webonly - */ -declare namespace firebase.appCheck { - /** - * Result returned by - * {@link firebase.appCheck.AppCheck.getToken `firebase.appCheck().getToken()`}. - */ - interface AppCheckTokenResult { - token: string; - } - /* - * ReCAPTCHA v3 token provider. - */ - class ReCaptchaV3Provider { - /** - * @param siteKey - ReCAPTCHA v3 site key (public key). - */ - constructor(siteKey: string); - } - /* - * Custom token provider. - */ - class CustomProvider { - /** - * @param options - Options for creating the custom provider. - */ - constructor(options: CustomProviderOptions); - } - /** - * Options when creating a CustomProvider. - */ - interface CustomProviderOptions { - /** - * Function to get an App Check token through a custom provider - * service. - */ - getToken: () => Promise; - } - - /** - * The Firebase AppCheck service interface. - * - * Do not call this constructor directly. Instead, use - * {@link firebase.appCheck `firebase.appCheck()`}. - */ - export interface AppCheck { - /** - * Activate AppCheck - * @param provider reCAPTCHA provider, custom token provider, or reCAPTCHA site key. - * @param isTokenAutoRefreshEnabled If true, the SDK automatically - * refreshes App Check tokens as needed. If undefined, defaults to the - * value of `app.automaticDataCollectionEnabled`, which defaults to - * false and can be set in the app config. - */ - activate( - provider: - | ReCaptchaV3Provider - | CustomProvider - | AppCheckProvider - | string, - isTokenAutoRefreshEnabled?: boolean - ): void; - - /** - * - * @param isTokenAutoRefreshEnabled If true, the SDK automatically - * refreshes App Check tokens as needed. This overrides any value set - * during `activate()`. - */ - setTokenAutoRefreshEnabled(isTokenAutoRefreshEnabled: boolean): void; - /** - * Get the current App Check token. Attaches to the most recent - * in-flight request if one is present. Returns null if no token - * is present and no token requests are in-flight. - * - * @param forceRefresh - If true, will always try to fetch a fresh token. - * If false, will use a cached token if found in storage. - */ - getToken( - forceRefresh?: boolean - ): Promise; - - /** - * Registers a listener to changes in the token state. There can be more - * than one listener registered at the same time for one or more - * App Check instances. The listeners call back on the UI thread whenever - * the current token associated with this App Check instance changes. - * - * @param observer An object with `next`, `error`, and `complete` - * properties. `next` is called with an - * {@link firebase.appCheck.AppCheckTokenResult `AppCheckTokenResult`} - * whenever the token changes. `error` is optional and is called if an - * error is thrown by the listener (the `next` function). `complete` - * is unused, as the token stream is unending. - * - * @returns A function that unsubscribes this listener. - */ - onTokenChanged(observer: { - next: (tokenResult: firebase.appCheck.AppCheckTokenResult) => void; - error?: (error: Error) => void; - complete?: () => void; - }): Unsubscribe; - - /** - * Registers a listener to changes in the token state. There can be more - * than one listener registered at the same time for one or more - * App Check instances. The listeners call back on the UI thread whenever - * the current token associated with this App Check instance changes. - * - * @param onNext When the token changes, this function is called with aa - * {@link firebase.appCheck.AppCheckTokenResult `AppCheckTokenResult`}. - * @param onError Optional. Called if there is an error thrown by the - * listener (the `onNext` function). - * @param onCompletion Currently unused, as the token stream is unending. - * @returns A function that unsubscribes this listener. - */ - onTokenChanged( - onNext: (tokenResult: firebase.appCheck.AppCheckTokenResult) => void, - onError?: (error: Error) => void, - onCompletion?: () => void - ): Unsubscribe; - } - - /** - * An App Check provider. This can be either the built-in reCAPTCHA - * provider or a custom provider. For more on custom providers, see - * https://firebase.google.com/docs/app-check/web-custom-provider - */ - interface AppCheckProvider { - /** - * Returns an AppCheck token. - */ - getToken(): Promise; - } - - /** - * The token returned from an {@link firebase.appCheck.AppCheckProvider `AppCheckProvider`}. - */ - interface AppCheckToken { - /** - * The token string in JWT format. - */ - readonly token: string; - /** - * The local timestamp after which the token will expire. - */ - readonly expireTimeMillis: number; - } -} - -/** - * @webonly - */ -declare namespace firebase.installations { - /** - * The Firebase Installations service interface. - * - * Do not call this constructor directly. Instead, use - * {@link firebase.installations `firebase.installations()`}. - */ - export interface Installations { - /** - * Creates a Firebase Installation if there isn't one for the app and - * returns the Installation ID. - * - * @return Firebase Installation ID - */ - getId(): Promise; - - /** - * Returns an Authentication Token for the current Firebase Installation. - * - * @return Firebase Installation Authentication Token - */ - getToken(forceRefresh?: boolean): Promise; - - /** - * Deletes the Firebase Installation and all associated data. - */ - delete(): Promise; - - /** - * Sets a new callback that will get called when Installlation ID changes. - * Returns an unsubscribe function that will remove the callback when called. - */ - onIdChange(callback: (installationId: string) => void): () => void; - } -} - -/** - * @webonly - */ -declare namespace firebase.performance { - /** - * The Firebase Performance Monitoring service interface. - * - * Do not call this constructor directly. Instead, use - * {@link firebase.performance `firebase.performance()`}. - */ - export interface Performance { - /** - * Creates an uninitialized instance of {@link firebase.performance.Trace `trace`} and returns - * it. - * - * @param traceName The name of the trace instance. - * @return The Trace instance. - */ - trace(traceName: string): Trace; - - /** - * Controls the logging of automatic traces and HTTP/S network monitoring. - */ - instrumentationEnabled: boolean; - /** - * Controls the logging of custom traces. - */ - dataCollectionEnabled: boolean; - } - - export interface Trace { - /** - * Starts the timing for the {@link firebase.performance.Trace `trace`} instance. - */ - start(): void; - /** - * Stops the timing of the {@link firebase.performance.Trace `trace`} instance and logs the - * data of the instance. - */ - stop(): void; - /** - * Records a {@link firebase.performance.Trace `trace`} from given parameters. This provides a - * direct way to use {@link firebase.performance.Trace `trace`} without a need to start/stop. - * This is useful for use cases in which the {@link firebase.performance.Trace `trace`} cannot - * directly be used (e.g. if the duration was captured before the Performance SDK was loaded). - * - * @param startTime Trace start time since epoch in millisec. - * @param duration The duraction of the trace in millisec. - * @param options An object which can optionally hold maps of custom metrics and - * custom attributes. - */ - record( - startTime: number, - duration: number, - options?: { - metrics?: { [key: string]: number }; - attributes?: { [key: string]: string }; - } - ): void; - /** - * Adds to the value of a custom metric. If a custom metric with the provided name does not - * exist, it creates one with that name and the value equal to the given number. - * - * @param metricName The name of the custom metric. - * @param num The number to be added to the value of the custom metric. If not provided, it - * uses a default value of one. - */ - incrementMetric(metricName: string, num?: number): void; - /** - * Sets the value of the specified custom metric to the given number regardless of whether - * a metric with that name already exists on the {@link firebase.performance.Trace `trace`} - * instance or not. - * - * @param metricName Name of the custom metric. - * @param num Value to of the custom metric. - */ - putMetric(metricName: string, num: number): void; - /** - * Returns the value of the custom metric by that name. If a custom metric with that name does - * not exist returns zero. - * - * @param metricName Name of the custom metric. - */ - getMetric(metricName: string): number; - /** - * Set a custom attribute of a {@link firebase.performance.Trace `trace`} to a certain value. - * - * @param attr Name of the custom attribute. - * @param value Value of the custom attribute. - */ - putAttribute(attr: string, value: string): void; - /** - * Retrieves the value that the custom attribute is set to. - * - * @param attr Name of the custom attribute. - */ - getAttribute(attr: string): string | undefined; - /** - * Removes the specified custom attribute from a {@link firebase.performance.Trace `trace`} - * instance. - * - * @param attr Name of the custom attribute. - */ - - removeAttribute(attr: string): void; - /** - * Returns a map of all custom attributes of a {@link firebase.performance.Trace `trace`} - * instance. - */ - getAttributes(): { [key: string]: string }; - } -} - -/** - * @webonly - */ -declare namespace firebase.remoteConfig { - /** - * The Firebase Remote Config service interface. - * - * Do not call this constructor directly. Instead, use - * {@link firebase.remoteConfig `firebase.remoteConfig()`}. - */ - export interface RemoteConfig { - /** - * Defines configuration for the Remote Config SDK. - */ - settings: Settings; - - /** - * Object containing default values for conigs. - */ - defaultConfig: { [key: string]: string | number | boolean }; - - /** - * The Unix timestamp in milliseconds of the last successful fetch, or negative one if - * the {@link RemoteConfig} instance either hasn't fetched or initialization - * is incomplete. - */ - fetchTimeMillis: number; - - /** - * The status of the last fetch attempt. - */ - lastFetchStatus: FetchStatus; - - /** - * Makes the last fetched config available to the getters. - * Returns a promise which resolves to true if the current call activated the fetched configs. - * If the fetched configs were already activated, the promise will resolve to false. - */ - activate(): Promise; - - /** - * Ensures the last activated config are available to the getters. - */ - ensureInitialized(): Promise; - - /** - * Fetches and caches configuration from the Remote Config service. - */ - fetch(): Promise; - - /** - * Performs fetch and activate operations, as a convenience. - * Returns a promise which resolves to true if the current call activated the fetched configs. - * If the fetched configs were already activated, the promise will resolve to false. - */ - fetchAndActivate(): Promise; - - /** - * Gets all config. - */ - getAll(): { [key: string]: Value }; - - /** - * Gets the value for the given key as a boolean. - * - * Convenience method for calling remoteConfig.getValue(key).asBoolean(). - */ - getBoolean(key: string): boolean; - - /** - * Gets the value for the given key as a number. - * - * Convenience method for calling remoteConfig.getValue(key).asNumber(). - */ - getNumber(key: string): number; - - /** - * Gets the value for the given key as a String. - * - * Convenience method for calling remoteConfig.getValue(key).asString(). - */ - getString(key: string): string; - - /** - * Gets the {@link Value} for the given key. - */ - getValue(key: string): Value; - - /** - * Defines the log level to use. - */ - setLogLevel(logLevel: LogLevel): void; - } - - /** - * Indicates the source of a value. - * - *
    - *
  • "static" indicates the value was defined by a static constant.
  • - *
  • "default" indicates the value was defined by default config.
  • - *
  • "remote" indicates the value was defined by fetched config.
  • - *
- */ - export type ValueSource = 'static' | 'default' | 'remote'; - - /** - * Wraps a value with metadata and type-safe getters. - */ - export interface Value { - /** - * Gets the value as a boolean. - * - * The following values (case insensitive) are interpreted as true: - * "1", "true", "t", "yes", "y", "on". Other values are interpreted as false. - */ - asBoolean(): boolean; - - /** - * Gets the value as a number. Comparable to calling Number(value) || 0. - */ - asNumber(): number; - - /** - * Gets the value as a string. - */ - asString(): string; - - /** - * Gets the {@link ValueSource} for the given key. - */ - getSource(): ValueSource; - } - - /** - * Defines configuration options for the Remote Config SDK. - */ - export interface Settings { - /** - * Defines the maximum age in milliseconds of an entry in the config cache before - * it is considered stale. Defaults to 43200000 (Twelve hours). - */ - minimumFetchIntervalMillis: number; - - /** - * Defines the maximum amount of milliseconds to wait for a response when fetching - * configuration from the Remote Config server. Defaults to 60000 (One minute). - */ - fetchTimeoutMillis: number; - } - - /** - * Summarizes the outcome of the last attempt to fetch config from the Firebase Remote Config server. - * - *
    - *
  • "no-fetch-yet" indicates the {@link RemoteConfig} instance has not yet attempted - * to fetch config, or that SDK initialization is incomplete.
  • - *
  • "success" indicates the last attempt succeeded.
  • - *
  • "failure" indicates the last attempt failed.
  • - *
  • "throttle" indicates the last attempt was rate-limited.
  • - *
- */ - export type FetchStatus = 'no-fetch-yet' | 'success' | 'failure' | 'throttle'; - - /** - * Defines levels of Remote Config logging. - */ - export type LogLevel = 'debug' | 'error' | 'silent'; -} - -declare namespace firebase.functions { - /** - * An HttpsCallableResult wraps a single result from a function call. - */ - export interface HttpsCallableResult { - readonly data: any; - } - /** - * An HttpsCallable is a reference to a "callable" http trigger in - * Google Cloud Functions. - */ - export interface HttpsCallable { - (data?: any): Promise; - } - export interface HttpsCallableOptions { - timeout?: number; - } - /** - * The Cloud Functions for Firebase service interface. - * - * Do not call this constructor directly. Instead, use - * {@link firebase.functions `firebase.functions()`}. - */ - export class Functions { - private constructor(); - - /** - * Modify this instance to communicate with the Cloud Functions emulator. - * - * Note: this must be called before this instance has been used to do any operations. - * - * @param host The emulator host (ex: localhost) - * @param port The emulator port (ex: 5001) - */ - useEmulator(host: string, port: number): void; - - /** - * Changes this instance to point to a Cloud Functions emulator running - * locally. See https://firebase.google.com/docs/functions/local-emulator - * - * @deprecated Prefer the useEmulator(host, port) method. - * @param origin The origin of the local emulator, such as - * "http://localhost:5005". - */ - useFunctionsEmulator(url: string): void; - /** - * Gets an `HttpsCallable` instance that refers to the function with the given - * name. - * - * @param name The name of the https callable function. - * @param options The options for this HttpsCallable instance. - * @return The `HttpsCallable` instance. - */ - httpsCallable(name: string, options?: HttpsCallableOptions): HttpsCallable; - } - /** - * The set of Firebase Functions status codes. The codes are the same at the - * ones exposed by gRPC here: - * https://github.com/grpc/grpc/blob/master/doc/statuscodes.md - * - * Possible values: - * - 'cancelled': The operation was cancelled (typically by the caller). - * - 'unknown': Unknown error or an error from a different error domain. - * - 'invalid-argument': Client specified an invalid argument. Note that this - * differs from 'failed-precondition'. 'invalid-argument' indicates - * arguments that are problematic regardless of the state of the system - * (e.g. an invalid field name). - * - 'deadline-exceeded': Deadline expired before operation could complete. - * For operations that change the state of the system, this error may be - * returned even if the operation has completed successfully. For example, - * a successful response from a server could have been delayed long enough - * for the deadline to expire. - * - 'not-found': Some requested document was not found. - * - 'already-exists': Some document that we attempted to create already - * exists. - * - 'permission-denied': The caller does not have permission to execute the - * specified operation. - * - 'resource-exhausted': Some resource has been exhausted, perhaps a - * per-user quota, or perhaps the entire file system is out of space. - * - 'failed-precondition': Operation was rejected because the system is not - * in a state required for the operation's execution. - * - 'aborted': The operation was aborted, typically due to a concurrency - * issue like transaction aborts, etc. - * - 'out-of-range': Operation was attempted past the valid range. - * - 'unimplemented': Operation is not implemented or not supported/enabled. - * - 'internal': Internal errors. Means some invariants expected by - * underlying system has been broken. If you see one of these errors, - * something is very broken. - * - 'unavailable': The service is currently unavailable. This is most likely - * a transient condition and may be corrected by retrying with a backoff. - * - 'data-loss': Unrecoverable data loss or corruption. - * - 'unauthenticated': The request does not have valid authentication - * credentials for the operation. - */ - export type FunctionsErrorCode = - | 'ok' - | 'cancelled' - | 'unknown' - | 'invalid-argument' - | 'deadline-exceeded' - | 'not-found' - | 'already-exists' - | 'permission-denied' - | 'resource-exhausted' - | 'failed-precondition' - | 'aborted' - | 'out-of-range' - | 'unimplemented' - | 'internal' - | 'unavailable' - | 'data-loss' - | 'unauthenticated'; - export interface HttpsError extends Error { - /** - * A standard error code that will be returned to the client. This also - * determines the HTTP status code of the response, as defined in code.proto. - */ - readonly code: FunctionsErrorCode; - /** - * Extra data to be converted to JSON and included in the error response. - */ - readonly details?: any; - } -} - -declare namespace firebase.auth { - /** - * A utility class to parse email action URLs. - */ - class ActionCodeURL { - private constructor(); - /** - * The API key of the email action link. - */ - apiKey: string; - /** - * The action code of the email action link. - */ - code: string; - /** - * The continue URL of the email action link. Null if not provided. - */ - continueUrl: string | null; - /** - * The language code of the email action link. Null if not provided. - */ - languageCode: string | null; - /** - * The action performed by the email action link. It returns from one - * of the types from {@link firebase.auth.ActionCodeInfo}. - */ - operation: firebase.auth.ActionCodeInfo.Operation; - /** - * Parses the email action link string and returns an ActionCodeURL object - * if the link is valid, otherwise returns null. - * - * @param link The email action link string. - * @return The ActionCodeURL object, or null if the link is invalid. - */ - static parseLink(link: string): firebase.auth.ActionCodeURL | null; - /** - * The tenant ID of the email action link. Null if the email action - * is from the parent project. - */ - tenantId: string | null; - } - /** - * A response from {@link firebase.auth.Auth.checkActionCode}. - */ - interface ActionCodeInfo { - /** - * The data associated with the action code. - * - * For the `PASSWORD_RESET`, `VERIFY_EMAIL`, and `RECOVER_EMAIL` actions, this object - * contains an `email` field with the address the email was sent to. - * - * For the RECOVER_EMAIL action, which allows a user to undo an email address - * change, this object also contains a `previousEmail` field with the user account's - * current email address. After the action completes, the user's email address will - * revert to the value in the `email` field from the value in `previousEmail` field. - * - * For the VERIFY_AND_CHANGE_EMAIL action, which allows a user to verify the email - * before updating it, this object contains a `previousEmail` field with the user - * account's email address before updating. After the action completes, the user's - * email address will be updated to the value in the `email` field from the value - * in `previousEmail` field. - * - * For the REVERT_SECOND_FACTOR_ADDITION action, which allows a user to unenroll - * a newly added second factor, this object contains a `multiFactorInfo` field with - * the information about the second factor. For phone second factor, the - * `multiFactorInfo` is a {@link firebase.auth.PhoneMultiFactorInfo} object, - * which contains the phone number. - */ - data: { - email?: string | null; - /** - * @deprecated - * This field is deprecated in favor of previousEmail. - */ - fromEmail?: string | null; - multiFactorInfo?: firebase.auth.MultiFactorInfo | null; - previousEmail?: string | null; - }; - /** - * The type of operation that generated the action code. This could be: - *
    - *
  • `EMAIL_SIGNIN`: email sign in code generated via - * {@link firebase.auth.Auth.sendSignInLinkToEmail}.
  • - *
  • `PASSWORD_RESET`: password reset code generated via - * {@link firebase.auth.Auth.sendPasswordResetEmail}.
  • - *
  • `RECOVER_EMAIL`: email change revocation code generated via - * {@link firebase.User.updateEmail}.
  • - *
  • `REVERT_SECOND_FACTOR_ADDITION`: revert second factor addition - * code generated via - * {@link firebase.User.MultiFactorUser.enroll}.
  • - *
  • `VERIFY_AND_CHANGE_EMAIL`: verify and change email code generated - * via {@link firebase.User.verifyBeforeUpdateEmail}.
  • - *
  • `VERIFY_EMAIL`: email verification code generated via - * {@link firebase.User.sendEmailVerification}.
  • - *
- */ - operation: string; - } - - /** - * This is the interface that defines the required continue/state URL with - * optional Android and iOS bundle identifiers. - * The action code setting fields are: - *
    - *
  • url: Sets the link continue/state URL, which has different meanings - * in different contexts:

    - *
      - *
    • When the link is handled in the web action widgets, this is the deep - * link in the continueUrl query parameter.
    • - *
    • When the link is handled in the app directly, this is the continueUrl - * query parameter in the deep link of the Dynamic Link.
    • - *
    - *
  • - *
  • iOS: Sets the iOS bundle ID. This will try to open the link in an iOS app - * if it is installed.
  • - *
  • android: Sets the Android package name. This will try to open the link in - * an android app if it is installed. If installApp is passed, it specifies - * whether to install the Android app if the device supports it and the app - * is not already installed. If this field is provided without a - * packageName, an error is thrown explaining that the packageName must be - * provided in conjunction with this field. - * If minimumVersion is specified, and an older version of the app is - * installed, the user is taken to the Play Store to upgrade the app.
  • - *
  • handleCodeInApp: The default is false. When set to true, the action code - * link will be be sent as a Universal Link or Android App Link and will be - * opened by the app if installed. In the false case, the code will be sent - * to the web widget first and then on continue will redirect to the app if - * installed.
  • - *
- */ - type ActionCodeSettings = { - android?: { - installApp?: boolean; - minimumVersion?: string; - packageName: string; - }; - handleCodeInApp?: boolean; - iOS?: { bundleId: string }; - url: string; - dynamicLinkDomain?: string; - }; - - /** - * A structure containing additional user information from a federated identity - * provider. - */ - type AdditionalUserInfo = { - isNewUser: boolean; - profile: Object | null; - providerId: string; - username?: string | null; - }; - - /** - * A verifier for domain verification and abuse prevention. Currently, the - * only implementation is {@link firebase.auth.RecaptchaVerifier}. - */ - interface ApplicationVerifier { - /** - * Identifies the type of application verifier (e.g. "recaptcha"). - */ - type: string; - /** - * Executes the verification process. - * @return A Promise for a token that can be used to - * assert the validity of a request. - */ - verify(): Promise; - } - - /** - * Interface representing an Auth instance's settings, currently used for - * enabling/disabling app verification for phone Auth testing. - */ - interface AuthSettings { - /** - * When set, this property disables app verification for the purpose of testing - * phone authentication. For this property to take effect, it needs to be set - * before rendering a reCAPTCHA app verifier. When this is disabled, a - * mock reCAPTCHA is rendered instead. This is useful for manual testing during - * development or for automated integration tests. - * - * In order to use this feature, you will need to - * {@link https://firebase.google.com/docs/auth/web/phone-auth#test-with-whitelisted-phone-numbers - * whitelist your phone number} via the - * Firebase Console. - * - * The default value is false (app verification is enabled). - */ - appVerificationDisabledForTesting: boolean; - } - - /** - * The Firebase Auth service interface. - * - * Do not call this constructor directly. Instead, use - * {@link firebase.auth `firebase.auth()`}. - * - * See - * {@link https://firebase.google.com/docs/auth/ Firebase Authentication} - * for a full guide on how to use the Firebase Auth service. - * - */ - interface Auth { - /** - * The {@link firebase.app.App app} associated with the `Auth` service - * instance. - * - * @example - * ```javascript - * var app = auth.app; - * ``` - */ - app: firebase.app.App; - /** - * Applies a verification code sent to the user by email or other out-of-band - * mechanism. - * - *

Error Codes

- *
- *
auth/expired-action-code
- *
Thrown if the action code has expired.
- *
auth/invalid-action-code
- *
Thrown if the action code is invalid. This can happen if the code is - * malformed or has already been used.
- *
auth/user-disabled
- *
Thrown if the user corresponding to the given action code has been - * disabled.
- *
auth/user-not-found
- *
Thrown if there is no user corresponding to the action code. This may - * have happened if the user was deleted between when the action code was - * issued and when this method was called.
- *
- * - * @param code A verification code sent to the user. - */ - applyActionCode(code: string): Promise; - /** - * Checks a verification code sent to the user by email or other out-of-band - * mechanism. - * - * Returns metadata about the code. - * - *

Error Codes

- *
- *
auth/expired-action-code
- *
Thrown if the action code has expired.
- *
auth/invalid-action-code
- *
Thrown if the action code is invalid. This can happen if the code is - * malformed or has already been used.
- *
auth/user-disabled
- *
Thrown if the user corresponding to the given action code has been - * disabled.
- *
auth/user-not-found
- *
Thrown if there is no user corresponding to the action code. This may - * have happened if the user was deleted between when the action code was - * issued and when this method was called.
- *
- * - * @param code A verification code sent to the user. - */ - checkActionCode(code: string): Promise; - /** - * Completes the password reset process, given a confirmation code and new - * password. - * - *

Error Codes

- *
- *
auth/expired-action-code
- *
Thrown if the password reset code has expired.
- *
auth/invalid-action-code
- *
Thrown if the password reset code is invalid. This can happen if the - * code is malformed or has already been used.
- *
auth/user-disabled
- *
Thrown if the user corresponding to the given password reset code has - * been disabled.
- *
auth/user-not-found
- *
Thrown if there is no user corresponding to the password reset code. This - * may have happened if the user was deleted between when the code was - * issued and when this method was called.
- *
auth/weak-password
- *
Thrown if the new password is not strong enough.
- *
- * - * @param code The confirmation code send via email to the user. - * @param newPassword The new password. - */ - confirmPasswordReset(code: string, newPassword: string): Promise; - - /** - * Creates a new user account associated with the specified email address and - * password. - * - * On successful creation of the user account, this user will also be - * signed in to your application. - * - * User account creation can fail if the account already exists or the password - * is invalid. - * - * Note: The email address acts as a unique identifier for the user and - * enables an email-based password reset. This function will create - * a new user account and set the initial user password. - * - *

Error Codes

- *
- *
auth/email-already-in-use
- *
Thrown if there already exists an account with the given email - * address.
- *
auth/invalid-email
- *
Thrown if the email address is not valid.
- *
auth/operation-not-allowed
- *
Thrown if email/password accounts are not enabled. Enable email/password - * accounts in the Firebase Console, under the Auth tab.
- *
auth/weak-password
- *
Thrown if the password is not strong enough.
- *
- * - * @example - * ```javascript - * firebase.auth().createUserWithEmailAndPassword(email, password) - * .catch(function(error) { - * // Handle Errors here. - * var errorCode = error.code; - * var errorMessage = error.message; - * if (errorCode == 'auth/weak-password') { - * alert('The password is too weak.'); - * } else { - * alert(errorMessage); - * } - * console.log(error); - * }); - * ``` - * @param email The user's email address. - * @param password The user's chosen password. - */ - createUserWithEmailAndPassword( - email: string, - password: string - ): Promise; - /** - * The currently signed-in user (or null). - */ - currentUser: firebase.User | null; - - /** - * Gets the list of possible sign in methods for the given email address. This - * is useful to differentiate methods of sign-in for the same provider, - * eg. `EmailAuthProvider` which has 2 methods of sign-in, email/password and - * email/link. - * - *

Error Codes

- *
- *
auth/invalid-email
- *
Thrown if the email address is not valid.
- *
- */ - fetchSignInMethodsForEmail(email: string): Promise>; - - /** - * Checks if an incoming link is a sign-in with email link. - */ - isSignInWithEmailLink(emailLink: string): boolean; - /** - * Returns a UserCredential from the redirect-based sign-in flow. - * - * If sign-in succeeded, returns the signed in user. If sign-in was - * unsuccessful, fails with an error. If no redirect operation was called, - * returns a UserCredential with a null User. - * - *

Error Codes

- *
- *
auth/account-exists-with-different-credential
- *
Thrown if there already exists an account with the email address - * asserted by the credential. Resolve this by calling - * {@link firebase.auth.Auth.fetchSignInMethodsForEmail} with the error.email - * and then asking the user to sign in using one of the returned providers. - * Once the user is signed in, the original credential retrieved from the - * error.credential can be linked to the user with - * {@link firebase.User.linkWithCredential} to prevent the user from signing - * in again to the original provider via popup or redirect. If you are using - * redirects for sign in, save the credential in session storage and then - * retrieve on redirect and repopulate the credential using for example - * {@link firebase.auth.GoogleAuthProvider.credential} depending on the - * credential provider id and complete the link.
- *
auth/auth-domain-config-required
- *
Thrown if authDomain configuration is not provided when calling - * firebase.initializeApp(). Check Firebase Console for instructions on - * determining and passing that field.
- *
auth/credential-already-in-use
- *
Thrown if the account corresponding to the credential already exists - * among your users, or is already linked to a Firebase User. - * For example, this error could be thrown if you are upgrading an anonymous - * user to a Google user by linking a Google credential to it and the Google - * credential used is already associated with an existing Firebase Google - * user. - * An error.email and error.credential - * ({@link firebase.auth.AuthCredential}) fields are also provided. You can - * recover from this error by signing in with that credential directly via - * {@link firebase.auth.Auth.signInWithCredential}.
- *
auth/email-already-in-use
- *
Thrown if the email corresponding to the credential already exists - * among your users. When thrown while linking a credential to an existing - * user, an error.email and error.credential - * ({@link firebase.auth.AuthCredential}) fields are also provided. - * You have to link the credential to the existing user with that email if - * you wish to continue signing in with that credential. To do so, call - * {@link firebase.auth.Auth.fetchSignInMethodsForEmail}, sign in to - * error.email via one of the providers returned and then - * {@link firebase.User.linkWithCredential} the original credential to that - * newly signed in user.
- *
auth/operation-not-allowed
- *
Thrown if the type of account corresponding to the credential - * is not enabled. Enable the account type in the Firebase Console, under - * the Auth tab.
- *
auth/operation-not-supported-in-this-environment
- *
Thrown if this operation is not supported in the environment your - * application is running on. "location.protocol" must be http or https. - *
- *
auth/timeout
- *
Thrown typically if the app domain is not authorized for OAuth operations - * for your Firebase project. Edit the list of authorized domains from the - * Firebase console.
- *
- * - * @webonly - * - * @example - * ```javascript - * // First, we perform the signInWithRedirect. - * // Creates the provider object. - * var provider = new firebase.auth.FacebookAuthProvider(); - * // You can add additional scopes to the provider: - * provider.addScope('email'); - * provider.addScope('user_friends'); - * // Sign in with redirect: - * auth.signInWithRedirect(provider) - * //////////////////////////////////////////////////////////// - * // The user is redirected to the provider's sign in flow... - * //////////////////////////////////////////////////////////// - * // Then redirected back to the app, where we check the redirect result: - * auth.getRedirectResult().then(function(result) { - * // The firebase.User instance: - * var user = result.user; - * // The Facebook firebase.auth.AuthCredential containing the Facebook - * // access token: - * var credential = result.credential; - * // As this API can be used for sign-in, linking and reauthentication, - * // check the operationType to determine what triggered this redirect - * // operation. - * var operationType = result.operationType; - * }, function(error) { - * // The provider's account email, can be used in case of - * // auth/account-exists-with-different-credential to fetch the providers - * // linked to the email: - * var email = error.email; - * // The provider's credential: - * var credential = error.credential; - * // In case of auth/account-exists-with-different-credential error, - * // you can fetch the providers using this: - * if (error.code === 'auth/account-exists-with-different-credential') { - * auth.fetchSignInMethodsForEmail(email).then(function(providers) { - * // The returned 'providers' is a list of the available providers - * // linked to the email address. Please refer to the guide for a more - * // complete explanation on how to recover from this error. - * }); - * } - * }); - * ``` - */ - getRedirectResult(): Promise; - /** - * The current Auth instance's language code. This is a readable/writable - * property. When set to null, the default Firebase Console language setting - * is applied. The language code will propagate to email action templates - * (password reset, email verification and email change revocation), SMS - * templates for phone authentication, reCAPTCHA verifier and OAuth - * popup/redirect operations provided the specified providers support - * localization with the language code specified. - */ - languageCode: string | null; - /** - * The current Auth instance's settings. This is used to edit/read configuration - * related options like app verification mode for phone authentication. - */ - settings: firebase.auth.AuthSettings; - /** - * Adds an observer for changes to the user's sign-in state. - * - * Prior to 4.0.0, this triggered the observer when users were signed in, - * signed out, or when the user's ID token changed in situations such as token - * expiry or password change. After 4.0.0, the observer is only triggered - * on sign-in or sign-out. - * - * To keep the old behavior, see {@link firebase.auth.Auth.onIdTokenChanged}. - * - * @example - * ```javascript - * firebase.auth().onAuthStateChanged(function(user) { - * if (user) { - * // User is signed in. - * } - * }); - * ``` - */ - onAuthStateChanged( - nextOrObserver: - | firebase.Observer - | ((a: firebase.User | null) => any), - error?: (a: firebase.auth.Error) => any, - completed?: firebase.Unsubscribe - ): firebase.Unsubscribe; - /** - * Adds an observer for changes to the signed-in user's ID token, which includes - * sign-in, sign-out, and token refresh events. This method has the same - * behavior as {@link firebase.auth.Auth.onAuthStateChanged} had prior to 4.0.0. - * - * @example - * ```javascript - * firebase.auth().onIdTokenChanged(function(user) { - * if (user) { - * // User is signed in or token was refreshed. - * } - * }); - * ``` - * @param - * nextOrObserver An observer object or a function triggered on change. - * @param error Optional A function - * triggered on auth error. - * @param completed Optional A function triggered when the - * observer is removed. - */ - onIdTokenChanged( - nextOrObserver: - | firebase.Observer - | ((a: firebase.User | null) => any), - error?: (a: firebase.auth.Error) => any, - completed?: firebase.Unsubscribe - ): firebase.Unsubscribe; - /** - * Sends a sign-in email link to the user with the specified email. - * - * The sign-in operation has to always be completed in the app unlike other out - * of band email actions (password reset and email verifications). This is - * because, at the end of the flow, the user is expected to be signed in and - * their Auth state persisted within the app. - * - * To complete sign in with the email link, call - * {@link firebase.auth.Auth.signInWithEmailLink} with the email address and - * the email link supplied in the email sent to the user. - * - *

Error Codes

- *
- *
auth/argument-error
- *
Thrown if handleCodeInApp is false.
- *
auth/invalid-email
- *
Thrown if the email address is not valid.
- *
auth/missing-android-pkg-name
- *
An Android package name must be provided if the Android app is required - * to be installed.
- *
auth/missing-continue-uri
- *
A continue URL must be provided in the request.
- *
auth/missing-ios-bundle-id
- *
An iOS Bundle ID must be provided if an App Store ID is provided.
- *
auth/invalid-continue-uri
- *
The continue URL provided in the request is invalid.
- *
auth/unauthorized-continue-uri
- *
The domain of the continue URL is not whitelisted. Whitelist - * the domain in the Firebase console.
- *
- * - * @example - * ```javascript - * var actionCodeSettings = { - * // The URL to redirect to for sign-in completion. This is also the deep - * // link for mobile redirects. The domain (www.example.com) for this URL - * // must be whitelisted in the Firebase Console. - * url: 'https://www.example.com/finishSignUp?cartId=1234', - * iOS: { - * bundleId: 'com.example.ios' - * }, - * android: { - * packageName: 'com.example.android', - * installApp: true, - * minimumVersion: '12' - * }, - * // This must be true. - * handleCodeInApp: true - * }; - * firebase.auth().sendSignInLinkToEmail('user@example.com', actionCodeSettings) - * .then(function() { - * // The link was successfully sent. Inform the user. Save the email - * // locally so you don't need to ask the user for it again if they open - * // the link on the same device. - * }) - * .catch(function(error) { - * // Some error occurred, you can inspect the code: error.code - * }); - * ``` - * @param email The email account to sign in with. - * @param actionCodeSettings The action - * code settings. The action code settings which provides Firebase with - * instructions on how to construct the email link. This includes the - * sign in completion URL or the deep link for mobile redirects, the mobile - * apps to use when the sign-in link is opened on an Android or iOS device. - * Mobile app redirects will only be applicable if the developer configures - * and accepts the Firebase Dynamic Links terms of condition. - * The Android package name and iOS bundle ID will be respected only if they - * are configured in the same Firebase Auth project used. - */ - sendSignInLinkToEmail( - email: string, - actionCodeSettings: firebase.auth.ActionCodeSettings - ): Promise; - - /** - * Sends a password reset email to the given email address. - * - * To complete the password reset, call - * {@link firebase.auth.Auth.confirmPasswordReset} with the code supplied in the - * email sent to the user, along with the new password specified by the user. - * - *

Error Codes

- *
- *
auth/invalid-email
- *
Thrown if the email address is not valid.
- *
auth/missing-android-pkg-name
- *
An Android package name must be provided if the Android app is required - * to be installed.
- *
auth/missing-continue-uri
- *
A continue URL must be provided in the request.
- *
auth/missing-ios-bundle-id
- *
An iOS Bundle ID must be provided if an App Store ID is provided.
- *
auth/invalid-continue-uri
- *
The continue URL provided in the request is invalid.
- *
auth/unauthorized-continue-uri
- *
The domain of the continue URL is not whitelisted. Whitelist - * the domain in the Firebase console.
- *
auth/user-not-found
- *
Thrown if there is no user corresponding to the email address.
- *
- * - * @example - * ```javascript - * var actionCodeSettings = { - * url: 'https://www.example.com/?email=user@example.com', - * iOS: { - * bundleId: 'com.example.ios' - * }, - * android: { - * packageName: 'com.example.android', - * installApp: true, - * minimumVersion: '12' - * }, - * handleCodeInApp: true - * }; - * firebase.auth().sendPasswordResetEmail( - * 'user@example.com', actionCodeSettings) - * .then(function() { - * // Password reset email sent. - * }) - * .catch(function(error) { - * // Error occurred. Inspect error.code. - * }); - * ``` - * - * @param email The email address with the password to be reset. - * @param actionCodeSettings The action - * code settings. If specified, the state/continue URL will be set as the - * "continueUrl" parameter in the password reset link. The default password - * reset landing page will use this to display a link to go back to the app - * if it is installed. - * If the actionCodeSettings is not specified, no URL is appended to the - * action URL. - * The state URL provided must belong to a domain that is whitelisted by the - * developer in the console. Otherwise an error will be thrown. - * Mobile app redirects will only be applicable if the developer configures - * and accepts the Firebase Dynamic Links terms of condition. - * The Android package name and iOS bundle ID will be respected only if they - * are configured in the same Firebase Auth project used. - */ - sendPasswordResetEmail( - email: string, - actionCodeSettings?: firebase.auth.ActionCodeSettings | null - ): Promise; - - /** - * Changes the current type of persistence on the current Auth instance for the - * currently saved Auth session and applies this type of persistence for - * future sign-in requests, including sign-in with redirect requests. This will - * return a promise that will resolve once the state finishes copying from one - * type of storage to the other. - * Calling a sign-in method after changing persistence will wait for that - * persistence change to complete before applying it on the new Auth state. - * - * This makes it easy for a user signing in to specify whether their session - * should be remembered or not. It also makes it easier to never persist the - * Auth state for applications that are shared by other users or have sensitive - * data. - * - * The default for web browser apps and React Native apps is 'local' (provided - * the browser supports this mechanism) whereas it is 'none' for Node.js backend - * apps. - * - *

Error Codes (thrown synchronously)

- *
- *
auth/invalid-persistence-type
- *
Thrown if the specified persistence type is invalid.
- *
auth/unsupported-persistence-type
- *
Thrown if the current environment does not support the specified - * persistence type.
- *
- * - * @example - * ```javascript - * firebase.auth().setPersistence(firebase.auth.Auth.Persistence.SESSION) - * .then(function() { - * // Existing and future Auth states are now persisted in the current - * // session only. Closing the window would clear any existing state even if - * // a user forgets to sign out. - * }); - * ``` - */ - setPersistence(persistence: firebase.auth.Auth.Persistence): Promise; - - /** - * Asynchronously signs in with the given credentials, and returns any available - * additional user information, such as user name. - * - *

Error Codes

- *
- *
auth/account-exists-with-different-credential
- *
Thrown if there already exists an account with the email address - * asserted by the credential. Resolve this by calling - * {@link firebase.auth.Auth.fetchSignInMethodsForEmail} and then asking the - * user to sign in using one of the returned providers. Once the user is - * signed in, the original credential can be linked to the user with - * {@link firebase.User.linkWithCredential}.
- *
auth/invalid-credential
- *
Thrown if the credential is malformed or has expired.
- *
auth/operation-not-allowed
- *
Thrown if the type of account corresponding to the credential - * is not enabled. Enable the account type in the Firebase Console, under - * the Auth tab.
- *
auth/user-disabled
- *
Thrown if the user corresponding to the given credential has been - * disabled.
- *
auth/user-not-found
- *
Thrown if signing in with a credential from - * {@link firebase.auth.EmailAuthProvider.credential} and there is no user - * corresponding to the given email.
- *
auth/wrong-password
- *
Thrown if signing in with a credential from - * {@link firebase.auth.EmailAuthProvider.credential} and the password is - * invalid for the given email, or if the account corresponding to the email - * does not have a password set.
- *
auth/invalid-verification-code
- *
Thrown if the credential is a - * {@link firebase.auth.PhoneAuthProvider.credential} and the verification - * code of the credential is not valid.
- *
auth/invalid-verification-id
- *
Thrown if the credential is a - * {@link firebase.auth.PhoneAuthProvider.credential} and the verification - * ID of the credential is not valid.
- *
- * - * @deprecated - * This method is deprecated. Use - * {@link firebase.auth.Auth.signInWithCredential} instead. - * - * @example - * ```javascript - * firebase.auth().signInAndRetrieveDataWithCredential(credential) - * .then(function(userCredential) { - * console.log(userCredential.additionalUserInfo.username); - * }); - * ``` - * @param credential The auth credential. - */ - signInAndRetrieveDataWithCredential( - credential: firebase.auth.AuthCredential - ): Promise; - /** - * Asynchronously signs in as an anonymous user. - * - * - * If there is already an anonymous user signed in, that user will be returned; - * otherwise, a new anonymous user identity will be created and returned. - * - *

Error Codes

- *
- *
auth/operation-not-allowed
- *
Thrown if anonymous accounts are not enabled. Enable anonymous accounts - * in the Firebase Console, under the Auth tab.
- *
- * - * @example - * ```javascript - * firebase.auth().signInAnonymously().catch(function(error) { - * // Handle Errors here. - * var errorCode = error.code; - * var errorMessage = error.message; - * - * if (errorCode === 'auth/operation-not-allowed') { - * alert('You must enable Anonymous auth in the Firebase Console.'); - * } else { - * console.error(error); - * } - * }); - * ``` - */ - signInAnonymously(): Promise; - - /** - * Asynchronously signs in with the given credentials. - * - *

Error Codes

- *
- *
auth/account-exists-with-different-credential
- *
Thrown if there already exists an account with the email address - * asserted by the credential. Resolve this by calling - * {@link firebase.auth.Auth.fetchSignInMethodsForEmail} and then asking the - * user to sign in using one of the returned providers. Once the user is - * signed in, the original credential can be linked to the user with - * {@link firebase.User.linkWithCredential}.
- *
auth/invalid-credential
- *
Thrown if the credential is malformed or has expired.
- *
auth/operation-not-allowed
- *
Thrown if the type of account corresponding to the credential - * is not enabled. Enable the account type in the Firebase Console, under - * the Auth tab.
- *
auth/user-disabled
- *
Thrown if the user corresponding to the given credential has been - * disabled.
- *
auth/user-not-found
- *
Thrown if signing in with a credential from - * {@link firebase.auth.EmailAuthProvider.credential} and there is no user - * corresponding to the given email.
- *
auth/wrong-password
- *
Thrown if signing in with a credential from - * {@link firebase.auth.EmailAuthProvider.credential} and the password is - * invalid for the given email, or if the account corresponding to the email - * does not have a password set.
- *
auth/invalid-verification-code
- *
Thrown if the credential is a - * {@link firebase.auth.PhoneAuthProvider.credential} and the verification - * code of the credential is not valid.
- *
auth/invalid-verification-id
- *
Thrown if the credential is a - * {@link firebase.auth.PhoneAuthProvider.credential} and the verification - * ID of the credential is not valid.
- *
- * - * @example - * ```javascript - * firebase.auth().signInWithCredential(credential).catch(function(error) { - * // Handle Errors here. - * var errorCode = error.code; - * var errorMessage = error.message; - * // The email of the user's account used. - * var email = error.email; - * // The firebase.auth.AuthCredential type that was used. - * var credential = error.credential; - * if (errorCode === 'auth/account-exists-with-different-credential') { - * alert('Email already associated with another account.'); - * // Handle account linking here, if using. - * } else { - * console.error(error); - * } - * }); - * ``` - * - * @param credential The auth credential. - */ - signInWithCredential( - credential: firebase.auth.AuthCredential - ): Promise; - /** - * Asynchronously signs in using a custom token. - * - * Custom tokens are used to integrate Firebase Auth with existing auth systems, - * and must be generated by the auth backend. - * - * Fails with an error if the token is invalid, expired, or not accepted by the - * Firebase Auth service. - * - *

Error Codes

- *
- *
auth/custom-token-mismatch
- *
Thrown if the custom token is for a different Firebase App.
- *
auth/invalid-custom-token
- *
Thrown if the custom token format is incorrect.
- *
- * - * @example - * ```javascript - * firebase.auth().signInWithCustomToken(token).catch(function(error) { - * // Handle Errors here. - * var errorCode = error.code; - * var errorMessage = error.message; - * if (errorCode === 'auth/invalid-custom-token') { - * alert('The token you provided is not valid.'); - * } else { - * console.error(error); - * } - * }); - * ``` - * - * @param token The custom token to sign in with. - */ - signInWithCustomToken(token: string): Promise; - /** - * Asynchronously signs in using an email and password. - * - * Fails with an error if the email address and password do not match. - * - * Note: The user's password is NOT the password used to access the user's email - * account. The email address serves as a unique identifier for the user, and - * the password is used to access the user's account in your Firebase project. - * - * See also: {@link firebase.auth.Auth.createUserWithEmailAndPassword}. - * - *

Error Codes

- *
- *
auth/invalid-email
- *
Thrown if the email address is not valid.
- *
auth/user-disabled
- *
Thrown if the user corresponding to the given email has been - * disabled.
- *
auth/user-not-found
- *
Thrown if there is no user corresponding to the given email.
- *
auth/wrong-password
- *
Thrown if the password is invalid for the given email, or the account - * corresponding to the email does not have a password set.
- *
- * - * @example - * ```javascript - * firebase.auth().signInWithEmailAndPassword(email, password) - * .catch(function(error) { - * // Handle Errors here. - * var errorCode = error.code; - * var errorMessage = error.message; - * if (errorCode === 'auth/wrong-password') { - * alert('Wrong password.'); - * } else { - * alert(errorMessage); - * } - * console.log(error); - * }); - * ``` - * - * @param email The users email address. - * @param password The users password. - */ - signInWithEmailAndPassword( - email: string, - password: string - ): Promise; - - /** - * Asynchronously signs in using a phone number. This method sends a code via - * SMS to the given phone number, and returns a - * {@link firebase.auth.ConfirmationResult}. After the user provides the code - * sent to their phone, call {@link firebase.auth.ConfirmationResult.confirm} - * with the code to sign the user in. - * - * For abuse prevention, this method also requires a - * {@link firebase.auth.ApplicationVerifier}. The Firebase Auth SDK includes - * a reCAPTCHA-based implementation, {@link firebase.auth.RecaptchaVerifier}. - * - *

Error Codes

- *
- *
auth/captcha-check-failed
- *
Thrown if the reCAPTCHA response token was invalid, expired, or if - * this method was called from a non-whitelisted domain.
- *
auth/invalid-phone-number
- *
Thrown if the phone number has an invalid format.
- *
auth/missing-phone-number
- *
Thrown if the phone number is missing.
- *
auth/quota-exceeded
- *
Thrown if the SMS quota for the Firebase project has been exceeded.
- *
auth/user-disabled
- *
Thrown if the user corresponding to the given phone number has been - * disabled.
- *
auth/operation-not-allowed
- *
Thrown if you have not enabled the provider in the Firebase Console. Go - * to the Firebase Console for your project, in the Auth section and the - * Sign in Method tab and configure the provider.
- *
- * - * @example - * ```javascript - * // 'recaptcha-container' is the ID of an element in the DOM. - * var applicationVerifier = new firebase.auth.RecaptchaVerifier( - * 'recaptcha-container'); - * firebase.auth().signInWithPhoneNumber(phoneNumber, applicationVerifier) - * .then(function(confirmationResult) { - * var verificationCode = window.prompt('Please enter the verification ' + - * 'code that was sent to your mobile device.'); - * return confirmationResult.confirm(verificationCode); - * }) - * .catch(function(error) { - * // Handle Errors here. - * }); - * ``` - * - * @param phoneNumber The user's phone number in E.164 format (e.g. - * +16505550101). - * @param applicationVerifier - */ - signInWithPhoneNumber( - phoneNumber: string, - applicationVerifier: firebase.auth.ApplicationVerifier - ): Promise; - /** - * Asynchronously signs in using an email and sign-in email link. If no link - * is passed, the link is inferred from the current URL. - * - * Fails with an error if the email address is invalid or OTP in email link - * expires. - * - * Note: Confirm the link is a sign-in email link before calling this method - * {@link firebase.auth.Auth.isSignInWithEmailLink}. - * - *

Error Codes

- *
- *
auth/expired-action-code
- *
Thrown if OTP in email link expires.
- *
auth/invalid-email
- *
Thrown if the email address is not valid.
- *
auth/user-disabled
- *
Thrown if the user corresponding to the given email has been - * disabled.
- *
- * - * @example - * ```javascript - * firebase.auth().signInWithEmailLink(email, emailLink) - * .catch(function(error) { - * // Some error occurred, you can inspect the code: error.code - * // Common errors could be invalid email and invalid or expired OTPs. - * }); - * ``` - * - * @param email The email account to sign in with. - * @param emailLink The optional link which contains the OTP needed - * to complete the sign in with email link. If not specified, the current - * URL is used instead. - */ - signInWithEmailLink( - email: string, - emailLink?: string - ): Promise; - /** - * Authenticates a Firebase client using a popup-based OAuth authentication - * flow. - * - * If succeeds, returns the signed in user along with the provider's credential. - * If sign in was unsuccessful, returns an error object containing additional - * information about the error. - * - *

Error Codes

- *
- *
auth/account-exists-with-different-credential
- *
Thrown if there already exists an account with the email address - * asserted by the credential. Resolve this by calling - * {@link firebase.auth.Auth.fetchSignInMethodsForEmail} with the error.email - * and then asking the user to sign in using one of the returned providers. - * Once the user is signed in, the original credential retrieved from the - * error.credential can be linked to the user with - * {@link firebase.User.linkWithCredential} to prevent the user from signing - * in again to the original provider via popup or redirect. If you are using - * redirects for sign in, save the credential in session storage and then - * retrieve on redirect and repopulate the credential using for example - * {@link firebase.auth.GoogleAuthProvider.credential} depending on the - * credential provider id and complete the link.
- *
auth/auth-domain-config-required
- *
Thrown if authDomain configuration is not provided when calling - * firebase.initializeApp(). Check Firebase Console for instructions on - * determining and passing that field.
- *
auth/cancelled-popup-request
- *
Thrown if successive popup operations are triggered. Only one popup - * request is allowed at one time. All the popups would fail with this error - * except for the last one.
- *
auth/operation-not-allowed
- *
Thrown if the type of account corresponding to the credential - * is not enabled. Enable the account type in the Firebase Console, under - * the Auth tab.
- *
auth/operation-not-supported-in-this-environment
- *
Thrown if this operation is not supported in the environment your - * application is running on. "location.protocol" must be http or https. - *
- *
auth/popup-blocked
- *
Thrown if the popup was blocked by the browser, typically when this - * operation is triggered outside of a click handler.
- *
auth/popup-closed-by-user
- *
Thrown if the popup window is closed by the user without completing the - * sign in to the provider.
- *
auth/unauthorized-domain
- *
Thrown if the app domain is not authorized for OAuth operations for your - * Firebase project. Edit the list of authorized domains from the Firebase - * console.
- *
- * - * @webonly - * - * @example - * ```javascript - * // Creates the provider object. - * var provider = new firebase.auth.FacebookAuthProvider(); - * // You can add additional scopes to the provider: - * provider.addScope('email'); - * provider.addScope('user_friends'); - * // Sign in with popup: - * auth.signInWithPopup(provider).then(function(result) { - * // The firebase.User instance: - * var user = result.user; - * // The Facebook firebase.auth.AuthCredential containing the Facebook - * // access token: - * var credential = result.credential; - * }, function(error) { - * // The provider's account email, can be used in case of - * // auth/account-exists-with-different-credential to fetch the providers - * // linked to the email: - * var email = error.email; - * // The provider's credential: - * var credential = error.credential; - * // In case of auth/account-exists-with-different-credential error, - * // you can fetch the providers using this: - * if (error.code === 'auth/account-exists-with-different-credential') { - * auth.fetchSignInMethodsForEmail(email).then(function(providers) { - * // The returned 'providers' is a list of the available providers - * // linked to the email address. Please refer to the guide for a more - * // complete explanation on how to recover from this error. - * }); - * } - * }); - * ``` - * - * @param provider The provider to authenticate. - * The provider has to be an OAuth provider. Non-OAuth providers like {@link - * firebase.auth.EmailAuthProvider} will throw an error. - */ - signInWithPopup( - provider: firebase.auth.AuthProvider - ): Promise; - /** - * Authenticates a Firebase client using a full-page redirect flow. To handle - * the results and errors for this operation, refer to {@link - * firebase.auth.Auth.getRedirectResult}. - * - *

Error Codes

- *
- *
auth/auth-domain-config-required
- *
Thrown if authDomain configuration is not provided when calling - * firebase.initializeApp(). Check Firebase Console for instructions on - * determining and passing that field.
- *
auth/operation-not-supported-in-this-environment
- *
Thrown if this operation is not supported in the environment your - * application is running on. "location.protocol" must be http or https. - *
- *
auth/unauthorized-domain
- *
Thrown if the app domain is not authorized for OAuth operations for your - * Firebase project. Edit the list of authorized domains from the Firebase - * console.
- *
- * - * @webonly - * - * @param provider The provider to authenticate. - * The provider has to be an OAuth provider. Non-OAuth providers like {@link - * firebase.auth.EmailAuthProvider} will throw an error. - */ - signInWithRedirect(provider: firebase.auth.AuthProvider): Promise; - /** - * Signs out the current user. - */ - signOut(): Promise; - /** - * The current Auth instance's tenant ID. This is a readable/writable - * property. When you set the tenant ID of an Auth instance, all future - * sign-in/sign-up operations will pass this tenant ID and sign in or - * sign up users to the specified tenant project. - * When set to null, users are signed in to the parent project. By default, - * this is set to null. - * - * @example - * ```javascript - * // Set the tenant ID on Auth instance. - * firebase.auth().tenantId = ‘TENANT_PROJECT_ID’; - * - * // All future sign-in request now include tenant ID. - * firebase.auth().signInWithEmailAndPassword(email, password) - * .then(function(result) { - * // result.user.tenantId should be ‘TENANT_PROJECT_ID’. - * }).catch(function(error) { - * // Handle error. - * }); - * ``` - */ - tenantId: string | null; - /** - * Asynchronously sets the provided user as `currentUser` on the current Auth - * instance. A new instance copy of the user provided will be made and set as - * `currentUser`. - * - * This will trigger {@link firebase.auth.Auth.onAuthStateChanged} and - * {@link firebase.auth.Auth.onIdTokenChanged} listeners like other sign in - * methods. - * - * The operation fails with an error if the user to be updated belongs to a - * different Firebase project. - * - *

Error Codes

- *
- *
auth/invalid-user-token
- *
Thrown if the user to be updated belongs to a diffent Firebase - * project.
- *
auth/user-token-expired
- *
Thrown if the token of the user to be updated is expired.
- *
auth/null-user
- *
Thrown if the user to be updated is null.
- *
auth/tenant-id-mismatch
- *
Thrown if the provided user's tenant ID does not match the - * underlying Auth instance's configured tenant ID
- *
- */ - updateCurrentUser(user: firebase.User | null): Promise; - /** - * Sets the current language to the default device/browser preference. - */ - useDeviceLanguage(): void; - /** - * Modify this Auth instance to communicate with the Firebase Auth emulator. This must be - * called synchronously immediately following the first call to `firebase.auth()`. Do not use - * with production credentials as emulator traffic is not encrypted. - * - * @param url The URL at which the emulator is running (eg, 'http://localhost:9099') - */ - useEmulator(url: string): void; - /** - * Checks a password reset code sent to the user by email or other out-of-band - * mechanism. - * - * Returns the user's email address if valid. - * - *

Error Codes

- *
- *
auth/expired-action-code
- *
Thrown if the password reset code has expired.
- *
auth/invalid-action-code
- *
Thrown if the password reset code is invalid. This can happen if the code - * is malformed or has already been used.
- *
auth/user-disabled
- *
Thrown if the user corresponding to the given password reset code has - * been disabled.
- *
auth/user-not-found
- *
Thrown if there is no user corresponding to the password reset code. This - * may have happened if the user was deleted between when the code was - * issued and when this method was called.
- *
- * - * @param code A verification code sent to the user. - */ - verifyPasswordResetCode(code: string): Promise; - } - - /** - * Interface that represents the credentials returned by an auth provider. - * Implementations specify the details about each auth provider's credential - * requirements. - * - */ - abstract class AuthCredential { - /** - * The authentication provider ID for the credential. - * For example, 'facebook.com', or 'google.com'. - */ - providerId: string; - /** - * The authentication sign in method for the credential. - * For example, 'password', or 'emailLink. This corresponds to the sign-in - * method identifier as returned in - * {@link firebase.auth.Auth.fetchSignInMethodsForEmail}. - */ - signInMethod: string; - /** - * Returns a JSON-serializable representation of this object. - */ - toJSON(): Object; - /** - * Static method to deserialize a JSON representation of an object into an - * {@link firebase.auth.AuthCredential}. Input can be either Object or the - * stringified representation of the object. When string is provided, - * JSON.parse would be called first. If the JSON input does not represent - * an`AuthCredential`, null is returned. - * @param json The plain object representation of an - * AuthCredential. - */ - static fromJSON(json: Object | string): AuthCredential | null; - } - - /** - * Interface that represents the OAuth credentials returned by an OAuth - * provider. Implementations specify the details about each auth provider's - * credential requirements. - * - */ - class OAuthCredential extends AuthCredential { - private constructor(); - /** - * The OAuth ID token associated with the credential if it belongs to an - * OIDC provider, such as `google.com`. - */ - idToken?: string; - /** - * The OAuth access token associated with the credential if it belongs to - * an OAuth provider, such as `facebook.com`, `twitter.com`, etc. - */ - accessToken?: string; - /** - * The OAuth access token secret associated with the credential if it - * belongs to an OAuth 1.0 provider, such as `twitter.com`. - */ - secret?: string; - } - - /** - * Interface that represents an auth provider. - */ - interface AuthProvider { - providerId: string; - } - - /** - * A result from a phone number sign-in, link, or reauthenticate call. - */ - interface ConfirmationResult { - /** - * Finishes a phone number sign-in, link, or reauthentication, given the code - * that was sent to the user's mobile device. - * - *

Error Codes

- *
- *
auth/invalid-verification-code
- *
Thrown if the verification code is not valid.
- *
auth/missing-verification-code
- *
Thrown if the verification code is missing.
- *
- */ - confirm(verificationCode: string): Promise; - /** - * The phone number authentication operation's verification ID. This can be used - * along with the verification code to initialize a phone auth credential. - */ - verificationId: string; - } - - /** - * Email and password auth provider implementation. - * - * To authenticate: {@link firebase.auth.Auth.createUserWithEmailAndPassword} - * and {@link firebase.auth.Auth.signInWithEmailAndPassword}. - */ - class EmailAuthProvider extends EmailAuthProvider_Instance { - static PROVIDER_ID: string; - /** - * This corresponds to the sign-in method identifier as returned in - * {@link firebase.auth.Auth.fetchSignInMethodsForEmail}. - */ - static EMAIL_PASSWORD_SIGN_IN_METHOD: string; - /** - * This corresponds to the sign-in method identifier as returned in - * {@link firebase.auth.Auth.fetchSignInMethodsForEmail}. - */ - static EMAIL_LINK_SIGN_IN_METHOD: string; - /** - * @example - * ```javascript - * var cred = firebase.auth.EmailAuthProvider.credential( - * email, - * password - * ); - * ``` - * - * @param email Email address. - * @param password User account password. - * @return The auth provider credential. - */ - static credential( - email: string, - password: string - ): firebase.auth.AuthCredential; - /** - * Initialize an `EmailAuthProvider` credential using an email and an email link - * after a sign in with email link operation. - * - * @example - * ```javascript - * var cred = firebase.auth.EmailAuthProvider.credentialWithLink( - * email, - * emailLink - * ); - * ``` - * - * @param email Email address. - * @param emailLink Sign-in email link. - * @return The auth provider credential. - */ - static credentialWithLink( - email: string, - emailLink: string - ): firebase.auth.AuthCredential; - } - /** - * @hidden - */ - class EmailAuthProvider_Instance implements firebase.auth.AuthProvider { - providerId: string; - } - - /** - * An authentication error. - * For method-specific error codes, refer to the specific methods in the - * documentation. For common error codes, check the reference below. Use{@link - * firebase.auth.Error.code} to get the specific error code. For a detailed - * message, use {@link firebase.auth.Error.message}. - * Errors with the code auth/account-exists-with-different-credential - * will have the additional fields email and - * credential which are needed to provide a way to resolve these - * specific errors. Refer to {@link firebase.auth.Auth.signInWithPopup} for more - * information. - * - *

Common Error Codes

- *
- *
auth/app-deleted
- *
Thrown if the instance of FirebaseApp has been deleted.
- *
auth/app-not-authorized
- *
Thrown if the app identified by the domain where it's hosted, is not - * authorized to use Firebase Authentication with the provided API key. - * Review your key configuration in the Google API console.
- *
auth/argument-error
- *
Thrown if a method is called with incorrect arguments.
- *
auth/invalid-api-key
- *
Thrown if the provided API key is invalid. Please check that you have - * copied it correctly from the Firebase Console.
- *
auth/invalid-user-token
- *
Thrown if the user's credential is no longer valid. The user must sign in - * again.
- *
auth/invalid-tenant-id
- *
Thrown if the tenant ID provided is invalid.
- *
auth/network-request-failed
- *
Thrown if a network error (such as timeout, interrupted connection or - * unreachable host) has occurred.
- *
auth/operation-not-allowed
- *
Thrown if you have not enabled the provider in the Firebase Console. Go - * to the Firebase Console for your project, in the Auth section and the - * Sign in Method tab and configure the provider.
- *
auth/requires-recent-login
- *
Thrown if the user's last sign-in time does not meet the security - * threshold. Use {@link firebase.User.reauthenticateWithCredential} to - * resolve. This does not apply if the user is anonymous.
- *
auth/too-many-requests
- *
Thrown if requests are blocked from a device due to unusual activity. - * Trying again after some delay would unblock.
- *
auth/unauthorized-domain
- *
Thrown if the app domain is not authorized for OAuth operations for your - * Firebase project. Edit the list of authorized domains from the Firebase - * console.
- *
auth/user-disabled
- *
Thrown if the user account has been disabled by an administrator. - * Accounts can be enabled or disabled in the Firebase Console, the Auth - * section and Users subsection.
- *
auth/user-token-expired
- *
Thrown if the user's credential has expired. This could also be thrown if - * a user has been deleted. Prompting the user to sign in again should - * resolve this for either case.
- *
auth/web-storage-unsupported
- *
Thrown if the browser does not support web storage or if the user - * disables them.
- *
- */ - interface Error { - /** - * Unique error code. - */ - code: string; - /** - * Complete error message. - */ - message: string; - } - - /** - * The account conflict error. - * Refer to {@link firebase.auth.Auth.signInWithPopup} for more information. - * - *

Common Error Codes

- *
- *
auth/account-exists-with-different-credential
- *
Thrown if there already exists an account with the email address - * asserted by the credential. Resolve this by calling - * {@link firebase.auth.Auth.fetchSignInMethodsForEmail} with the error.email - * and then asking the user to sign in using one of the returned providers. - * Once the user is signed in, the original credential retrieved from the - * error.credential can be linked to the user with - * {@link firebase.User.linkWithCredential} to prevent the user from signing - * in again to the original provider via popup or redirect. If you are using - * redirects for sign in, save the credential in session storage and then - * retrieve on redirect and repopulate the credential using for example - * {@link firebase.auth.GoogleAuthProvider.credential} depending on the - * credential provider id and complete the link.
- *
auth/credential-already-in-use
- *
Thrown if the account corresponding to the credential already exists - * among your users, or is already linked to a Firebase User. - * For example, this error could be thrown if you are upgrading an anonymous - * user to a Google user by linking a Google credential to it and the Google - * credential used is already associated with an existing Firebase Google - * user. - * The fields error.email, error.phoneNumber, and - * error.credential ({@link firebase.auth.AuthCredential}) - * may be provided, depending on the type of credential. You can recover - * from this error by signing in with error.credential directly - * via {@link firebase.auth.Auth.signInWithCredential}.
- *
auth/email-already-in-use
- *
Thrown if the email corresponding to the credential already exists - * among your users. When thrown while linking a credential to an existing - * user, an error.email and error.credential - * ({@link firebase.auth.AuthCredential}) fields are also provided. - * You have to link the credential to the existing user with that email if - * you wish to continue signing in with that credential. To do so, call - * {@link firebase.auth.Auth.fetchSignInMethodsForEmail}, sign in to - * error.email via one of the providers returned and then - * {@link firebase.User.linkWithCredential} the original credential to that - * newly signed in user.
- *
- */ - interface AuthError extends firebase.auth.Error { - /** - * The {@link firebase.auth.AuthCredential} that can be used to resolve the - * error. - */ - credential?: firebase.auth.AuthCredential; - /** - * The email of the user's account used for sign-in/linking. - */ - email?: string; - /** - * The phone number of the user's account used for sign-in/linking. - */ - phoneNumber?: string; - /** - * The tenant ID being used for sign-in/linking. If you use - * {@link firebase.auth.Auth.signInWithRedirect} to sign in, you have to - * set the tenant ID on Auth instanace again as the tenant ID is not - * persisted after redirection. - */ - tenantId?: string; - } - - /** - * The error thrown when the user needs to provide a second factor to sign in - * successfully. - * The error code for this error is auth/multi-factor-auth-required. - * This error provides a {@link firebase.auth.MultiFactorResolver} object, - * which you can use to get the second sign-in factor from the user. - * - * @example - * ```javascript - * firebase.auth().signInWithEmailAndPassword() - * .then(function(result) { - * // User signed in. No 2nd factor challenge is needed. - * }) - * .catch(function(error) { - * if (error.code == 'auth/multi-factor-auth-required') { - * var resolver = error.resolver; - * var multiFactorHints = resolver.hints; - * } else { - * // Handle other errors. - * } - * }); - * - * resolver.resolveSignIn(multiFactorAssertion) - * .then(function(userCredential) { - * // User signed in. - * }); - * ``` - */ - interface MultiFactorError extends firebase.auth.AuthError { - /** - * The multi-factor resolver to complete second factor sign-in. - */ - resolver: firebase.auth.MultiFactorResolver; - } - - /** - * Facebook auth provider. - * - * @example - * ```javascript - * // Sign in using a redirect. - * firebase.auth().getRedirectResult().then(function(result) { - * if (result.credential) { - * // This gives you a Google Access Token. - * var token = result.credential.accessToken; - * } - * var user = result.user; - * }) - * // Start a sign in process for an unauthenticated user. - * var provider = new firebase.auth.FacebookAuthProvider(); - * provider.addScope('user_birthday'); - * firebase.auth().signInWithRedirect(provider); - * ``` - * - * @example - * ```javascript - * // Sign in using a popup. - * var provider = new firebase.auth.FacebookAuthProvider(); - * provider.addScope('user_birthday'); - * firebase.auth().signInWithPopup(provider).then(function(result) { - * // This gives you a Facebook Access Token. - * var token = result.credential.accessToken; - * // The signed-in user info. - * var user = result.user; - * }); - * ``` - * - * @see {@link firebase.auth.Auth.onAuthStateChanged} to receive sign in state - * changes. - */ - class FacebookAuthProvider extends FacebookAuthProvider_Instance { - static PROVIDER_ID: string; - /** - * This corresponds to the sign-in method identifier as returned in - * {@link firebase.auth.Auth.fetchSignInMethodsForEmail}. - */ - static FACEBOOK_SIGN_IN_METHOD: string; - /** - * @example - * ```javascript - * var cred = firebase.auth.FacebookAuthProvider.credential( - * // `event` from the Facebook auth.authResponseChange callback. - * event.authResponse.accessToken - * ); - * ``` - * - * @param token Facebook access token. - */ - static credential(token: string): firebase.auth.OAuthCredential; - } - /** - * @hidden - */ - class FacebookAuthProvider_Instance implements firebase.auth.AuthProvider { - /** - * @param scope Facebook OAuth scope. - * @return The provider instance itself. - */ - addScope(scope: string): firebase.auth.AuthProvider; - providerId: string; - /** - * Sets the OAuth custom parameters to pass in a Facebook OAuth request for - * popup and redirect sign-in operations. - * Valid parameters include 'auth_type', 'display' and 'locale'. - * For a detailed list, check the - * {@link https://goo.gl/pve4fo Facebook} - * documentation. - * Reserved required OAuth 2.0 parameters such as 'client_id', 'redirect_uri', - * 'scope', 'response_type' and 'state' are not allowed and will be ignored. - * @param customOAuthParameters The custom OAuth parameters to pass - * in the OAuth request. - * @return The provider instance itself. - */ - setCustomParameters( - customOAuthParameters: Object - ): firebase.auth.AuthProvider; - } - - /** - * GitHub auth provider. - * - * GitHub requires an OAuth 2.0 redirect, so you can either handle the redirect - * directly, or use the signInWithPopup handler: - * - * @example - * ```javascript - * // Using a redirect. - * firebase.auth().getRedirectResult().then(function(result) { - * if (result.credential) { - * // This gives you a GitHub Access Token. - * var token = result.credential.accessToken; - * } - * var user = result.user; - * }).catch(function(error) { - * // Handle Errors here. - * var errorCode = error.code; - * var errorMessage = error.message; - * // The email of the user's account used. - * var email = error.email; - * // The firebase.auth.AuthCredential type that was used. - * var credential = error.credential; - * if (errorCode === 'auth/account-exists-with-different-credential') { - * alert('You have signed up with a different provider for that email.'); - * // Handle linking here if your app allows it. - * } else { - * console.error(error); - * } - * }); - * - * // Start a sign in process for an unauthenticated user. - * var provider = new firebase.auth.GithubAuthProvider(); - * provider.addScope('repo'); - * firebase.auth().signInWithRedirect(provider); - * ``` - * - * @example - * ```javascript - * // With popup. - * var provider = new firebase.auth.GithubAuthProvider(); - * provider.addScope('repo'); - * firebase.auth().signInWithPopup(provider).then(function(result) { - * // This gives you a GitHub Access Token. - * var token = result.credential.accessToken; - * // The signed-in user info. - * var user = result.user; - * }).catch(function(error) { - * // Handle Errors here. - * var errorCode = error.code; - * var errorMessage = error.message; - * // The email of the user's account used. - * var email = error.email; - * // The firebase.auth.AuthCredential type that was used. - * var credential = error.credential; - * if (errorCode === 'auth/account-exists-with-different-credential') { - * alert('You have signed up with a different provider for that email.'); - * // Handle linking here if your app allows it. - * } else { - * console.error(error); - * } - * }); - * ``` - * - * @see {@link firebase.auth.Auth.onAuthStateChanged} to receive sign in state - * changes. - */ - class GithubAuthProvider extends GithubAuthProvider_Instance { - static PROVIDER_ID: string; - /** - * This corresponds to the sign-in method identifier as returned in - * {@link firebase.auth.Auth.fetchSignInMethodsForEmail}. - */ - static GITHUB_SIGN_IN_METHOD: string; - /** - * @example - * ```javascript - * var cred = firebase.auth.FacebookAuthProvider.credential( - * // `event` from the Facebook auth.authResponseChange callback. - * event.authResponse.accessToken - * ); - * ``` - * - * @param token Github access token. - * @return {!firebase.auth.OAuthCredential} The auth provider credential. - */ - static credential(token: string): firebase.auth.OAuthCredential; - } - /** - * @hidden - */ - class GithubAuthProvider_Instance implements firebase.auth.AuthProvider { - /** - * @param scope Github OAuth scope. - * @return The provider instance itself. - */ - addScope(scope: string): firebase.auth.AuthProvider; - providerId: string; - /** - * Sets the OAuth custom parameters to pass in a GitHub OAuth request for popup - * and redirect sign-in operations. - * Valid parameters include 'allow_signup'. - * For a detailed list, check the - * {@link https://developer.github.com/v3/oauth/ GitHub} documentation. - * Reserved required OAuth 2.0 parameters such as 'client_id', 'redirect_uri', - * 'scope', 'response_type' and 'state' are not allowed and will be ignored. - * @param customOAuthParameters The custom OAuth parameters to pass - * in the OAuth request. - * @return The provider instance itself. - */ - setCustomParameters( - customOAuthParameters: Object - ): firebase.auth.AuthProvider; - } - - /** - * Google auth provider. - * - * @example - * ```javascript - * // Using a redirect. - * firebase.auth().getRedirectResult().then(function(result) { - * if (result.credential) { - * // This gives you a Google Access Token. - * var token = result.credential.accessToken; - * } - * var user = result.user; - * }); - * - * // Start a sign in process for an unauthenticated user. - * var provider = new firebase.auth.GoogleAuthProvider(); - * provider.addScope('profile'); - * provider.addScope('email'); - * firebase.auth().signInWithRedirect(provider); - * ``` - * - * @example - * ```javascript - * // Using a popup. - * var provider = new firebase.auth.GoogleAuthProvider(); - * provider.addScope('profile'); - * provider.addScope('email'); - * firebase.auth().signInWithPopup(provider).then(function(result) { - * // This gives you a Google Access Token. - * var token = result.credential.accessToken; - * // The signed-in user info. - * var user = result.user; - * }); - * ``` - * - * @see {@link firebase.auth.Auth.onAuthStateChanged} to receive sign in state - * changes. - */ - class GoogleAuthProvider extends GoogleAuthProvider_Instance { - static PROVIDER_ID: string; - /** - * This corresponds to the sign-in method identifier as returned in - * {@link firebase.auth.Auth.fetchSignInMethodsForEmail}. - */ - static GOOGLE_SIGN_IN_METHOD: string; - /** - * Creates a credential for Google. At least one of ID token and access token - * is required. - * - * @example - * ```javascript - * // \`googleUser\` from the onsuccess Google Sign In callback. - * var credential = firebase.auth.GoogleAuthProvider.credential( - googleUser.getAuthResponse().id_token); - * firebase.auth().signInWithCredential(credential) - * ``` - * @param idToken Google ID token. - * @param accessToken Google access token. - * @return The auth provider credential. - */ - static credential( - idToken?: string | null, - accessToken?: string | null - ): firebase.auth.OAuthCredential; - } - /** - * @hidden - */ - class GoogleAuthProvider_Instance implements firebase.auth.AuthProvider { - /** - * @param scope Google OAuth scope. - * @return The provider instance itself. - */ - addScope(scope: string): firebase.auth.AuthProvider; - providerId: string; - /** - * Sets the OAuth custom parameters to pass in a Google OAuth request for popup - * and redirect sign-in operations. - * Valid parameters include 'hd', 'hl', 'include_granted_scopes', 'login_hint' - * and 'prompt'. - * For a detailed list, check the - * {@link https://goo.gl/Xo01Jm Google} - * documentation. - * Reserved required OAuth 2.0 parameters such as 'client_id', 'redirect_uri', - * 'scope', 'response_type' and 'state' are not allowed and will be ignored. - * @param customOAuthParameters The custom OAuth parameters to pass - * in the OAuth request. - * @return The provider instance itself. - */ - setCustomParameters( - customOAuthParameters: Object - ): firebase.auth.AuthProvider; - } - - /** - * Generic OAuth provider. - * - * @example - * ```javascript - * // Using a redirect. - * firebase.auth().getRedirectResult().then(function(result) { - * if (result.credential) { - * // This gives you the OAuth Access Token for that provider. - * var token = result.credential.accessToken; - * } - * var user = result.user; - * }); - * - * // Start a sign in process for an unauthenticated user. - * var provider = new firebase.auth.OAuthProvider('google.com'); - * provider.addScope('profile'); - * provider.addScope('email'); - * firebase.auth().signInWithRedirect(provider); - * ``` - * @example - * ```javascript - * // Using a popup. - * var provider = new firebase.auth.OAuthProvider('google.com'); - * provider.addScope('profile'); - * provider.addScope('email'); - * firebase.auth().signInWithPopup(provider).then(function(result) { - * // This gives you the OAuth Access Token for that provider. - * var token = result.credential.accessToken; - * // The signed-in user info. - * var user = result.user; - * }); - * ``` - * - * @see {@link firebase.auth.Auth.onAuthStateChanged} to receive sign in state - * changes. - * @param providerId The associated provider ID, such as `github.com`. - */ - class OAuthProvider implements firebase.auth.AuthProvider { - constructor(providerId: string); - providerId: string; - /** - * @param scope Provider OAuth scope to add. - */ - addScope(scope: string): firebase.auth.AuthProvider; - /** - * Creates a Firebase credential from a generic OAuth provider's access token or - * ID token. The raw nonce is required when an ID token with a nonce field is - * provided. The SHA-256 hash of the raw nonce must match the nonce field in - * the ID token. - * - * @example - * ```javascript - * // `googleUser` from the onsuccess Google Sign In callback. - * // Initialize a generate OAuth provider with a `google.com` providerId. - * var provider = new firebase.auth.OAuthProvider('google.com'); - * var credential = provider.credential({ - * idToken: googleUser.getAuthResponse().id_token, - * }); - * firebase.auth().signInWithCredential(credential) - * ``` - * - * @param optionsOrIdToken Either the options object containing - * the ID token, access token and raw nonce or the ID token string. - * @param accessToken The OAuth access token. - */ - credential( - optionsOrIdToken: firebase.auth.OAuthCredentialOptions | string | null, - accessToken?: string - ): firebase.auth.OAuthCredential; - /** - * Sets the OAuth custom parameters to pass in an OAuth request for popup - * and redirect sign-in operations. - * For a detailed list, check the - * reserved required OAuth 2.0 parameters such as `client_id`, `redirect_uri`, - * `scope`, `response_type` and `state` are not allowed and will be ignored. - * @param customOAuthParameters The custom OAuth parameters to pass - * in the OAuth request. - */ - setCustomParameters( - customOAuthParameters: Object - ): firebase.auth.AuthProvider; - } - - class SAMLAuthProvider implements firebase.auth.AuthProvider { - constructor(providerId: string); - providerId: string; - } - - /** - * Interface representing ID token result obtained from - * {@link firebase.User.getIdTokenResult}. It contains the ID token JWT string - * and other helper properties for getting different data associated with the - * token as well as all the decoded payload claims. - * - * Note that these claims are not to be trusted as they are parsed client side. - * Only server side verification can guarantee the integrity of the token - * claims. - */ - interface IdTokenResult { - /** - * The Firebase Auth ID token JWT string. - */ - token: string; - /** - * The ID token expiration time formatted as a UTC string. - */ - expirationTime: string; - /** - * The authentication time formatted as a UTC string. This is the time the - * user authenticated (signed in) and not the time the token was refreshed. - */ - authTime: string; - /** - * The ID token issued at time formatted as a UTC string. - */ - issuedAtTime: string; - /** - * The sign-in provider through which the ID token was obtained (anonymous, - * custom, phone, password, etc). Note, this does not map to provider IDs. - */ - signInProvider: string | null; - /** - * The type of second factor associated with this session, provided the user - * was multi-factor authenticated (eg. phone, etc). - */ - signInSecondFactor: string | null; - /** - * The entire payload claims of the ID token including the standard reserved - * claims as well as the custom claims. - */ - claims: { - [key: string]: any; - }; - } - - /** - * Defines the options for initializing an - * {@link firebase.auth.OAuthCredential}. For ID tokens with nonce claim, - * the raw nonce has to also be provided. - */ - interface OAuthCredentialOptions { - /** - * The OAuth ID token used to initialize the OAuthCredential. - */ - idToken?: string; - /** - * The OAuth access token used to initialize the OAuthCredential. - */ - accessToken?: string; - /** - * The raw nonce associated with the ID token. It is required when an ID token - * with a nonce field is provided. The SHA-256 hash of the raw nonce must match - * the nonce field in the ID token. - */ - rawNonce?: string; - } - - /** - * The base class for asserting ownership of a second factor. This is used to - * facilitate enrollment of a second factor on an existing user - * or sign-in of a user who already verified the first factor. - * - */ - abstract class MultiFactorAssertion { - /** - * The identifier of the second factor. - */ - factorId: string; - } - - /** - * The class for asserting ownership of a phone second factor. - */ - class PhoneMultiFactorAssertion extends firebase.auth.MultiFactorAssertion { - private constructor(); - } - - /** - * The class used to initialize {@link firebase.auth.PhoneMultiFactorAssertion}. - */ - class PhoneMultiFactorGenerator { - private constructor(); - /** - * The identifier of the phone second factor: `phone`. - */ - static FACTOR_ID: string; - /** - * Initializes the {@link firebase.auth.PhoneMultiFactorAssertion} to confirm ownership - * of the phone second factor. - */ - static assertion( - phoneAuthCredential: firebase.auth.PhoneAuthCredential - ): firebase.auth.PhoneMultiFactorAssertion; - } - - /** - * A structure containing the information of a second factor entity. - */ - interface MultiFactorInfo { - /** - * The multi-factor enrollment ID. - */ - uid: string; - /** - * The user friendly name of the current second factor. - */ - displayName?: string | null; - /** - * The enrollment date of the second factor formatted as a UTC string. - */ - enrollmentTime: string; - /** - * The identifier of the second factor. - */ - factorId: string; - } - - /** - * The subclass of the MultiFactorInfo interface for phone number second factors. - * The factorId of this second factor is - * {@link firebase.auth.PhoneMultiFactorGenerator.FACTOR_ID}. - */ - interface PhoneMultiFactorInfo extends firebase.auth.MultiFactorInfo { - /** - * The phone number associated with the current second factor. - */ - phoneNumber: string; - } - - /** - * The information required to verify the ownership of a phone number. The - * information that's required depends on whether you are doing single-factor - * sign-in, multi-factor enrollment or multi-factor sign-in. - */ - type PhoneInfoOptions = - | firebase.auth.PhoneSingleFactorInfoOptions - | firebase.auth.PhoneMultiFactorEnrollInfoOptions - | firebase.auth.PhoneMultiFactorSignInInfoOptions; - /** - * The phone info options for single-factor sign-in. Only phone number is - * required. - */ - interface PhoneSingleFactorInfoOptions { - phoneNumber: string; - } - - /** - * The phone info options for multi-factor enrollment. Phone number and - * multi-factor session are required. - */ - interface PhoneMultiFactorEnrollInfoOptions { - phoneNumber: string; - session: firebase.auth.MultiFactorSession; - } - - /** - * The phone info options for multi-factor sign-in. Either multi-factor hint or - * multi-factor UID and multi-factor session are required. - */ - interface PhoneMultiFactorSignInInfoOptions { - multiFactorHint?: firebase.auth.MultiFactorInfo; - multiFactorUid?: string; - session: firebase.auth.MultiFactorSession; - } - - /** - * The class used to facilitate recovery from - * {@link firebase.auth.MultiFactorError} when a user needs to provide a second - * factor to sign in. - * - * @example - * ```javascript - * firebase.auth().signInWithEmailAndPassword() - * .then(function(result) { - * // User signed in. No 2nd factor challenge is needed. - * }) - * .catch(function(error) { - * if (error.code == 'auth/multi-factor-auth-required') { - * var resolver = error.resolver; - * // Show UI to let user select second factor. - * var multiFactorHints = resolver.hints; - * } else { - * // Handle other errors. - * } - * }); - * - * // The enrolled second factors that can be used to complete - * // sign-in are returned in the `MultiFactorResolver.hints` list. - * // UI needs to be presented to allow the user to select a second factor - * // from that list. - * - * var selectedHint = // ; selected from multiFactorHints - * var phoneAuthProvider = new firebase.auth.PhoneAuthProvider(); - * var phoneInfoOptions = { - * multiFactorHint: selectedHint, - * session: resolver.session - * }; - * phoneAuthProvider.verifyPhoneNumber( - * phoneInfoOptions, - * appVerifier - * ).then(function(verificationId) { - * // store verificationID and show UI to let user enter verification code. - * }); - * - * // UI to enter verification code and continue. - * // Continue button click handler - * var phoneAuthCredential = - * firebase.auth.PhoneAuthProvider.credential(verificationId, verificationCode); - * var multiFactorAssertion = - * firebase.auth.PhoneMultiFactorGenerator.assertion(phoneAuthCredential); - * resolver.resolveSignIn(multiFactorAssertion) - * .then(function(userCredential) { - * // User signed in. - * }); - * ``` - */ - class MultiFactorResolver { - private constructor(); - /** - * The Auth instance used to sign in with the first factor. - */ - auth: firebase.auth.Auth; - /** - * The session identifier for the current sign-in flow, which can be used - * to complete the second factor sign-in. - */ - session: firebase.auth.MultiFactorSession; - /** - * The list of hints for the second factors needed to complete the sign-in - * for the current session. - */ - hints: firebase.auth.MultiFactorInfo[]; - /** - * A helper function to help users complete sign in with a second factor - * using an {@link firebase.auth.MultiFactorAssertion} confirming the user - * successfully completed the second factor challenge. - * - *

Error Codes

- *
- *
auth/invalid-verification-code
- *
Thrown if the verification code is not valid.
- *
auth/missing-verification-code
- *
Thrown if the verification code is missing.
- *
auth/invalid-verification-id
- *
Thrown if the credential is a - * {@link firebase.auth.PhoneAuthProvider.credential} and the verification - * ID of the credential is not valid.
- *
auth/missing-verification-id
- *
Thrown if the verification ID is missing.
- *
auth/code-expired
- *
Thrown if the verification code has expired.
- *
auth/invalid-multi-factor-session
- *
Thrown if the request does not contain a valid proof of first factor - * successful sign-in.
- *
auth/missing-multi-factor-session
- *
Thrown if The request is missing proof of first factor successful - * sign-in.
- *
- * - * @param assertion The multi-factor assertion to resolve sign-in with. - * @return The promise that resolves with the user credential object. - */ - resolveSignIn( - assertion: firebase.auth.MultiFactorAssertion - ): Promise; - } - - /** - * The multi-factor session object used for enrolling a second factor on a - * user or helping sign in an enrolled user with a second factor. - */ - class MultiFactorSession { - private constructor(); - } - - /** - * Classes that represents the Phone Auth credentials returned by a - * {@link firebase.auth.PhoneAuthProvider}. - * - */ - class PhoneAuthCredential extends AuthCredential { - private constructor(); - } - - /** - * Phone number auth provider. - * - * @example - * ```javascript - * // 'recaptcha-container' is the ID of an element in the DOM. - * var applicationVerifier = new firebase.auth.RecaptchaVerifier( - * 'recaptcha-container'); - * var provider = new firebase.auth.PhoneAuthProvider(); - * provider.verifyPhoneNumber('+16505550101', applicationVerifier) - * .then(function(verificationId) { - * var verificationCode = window.prompt('Please enter the verification ' + - * 'code that was sent to your mobile device.'); - * return firebase.auth.PhoneAuthProvider.credential(verificationId, - * verificationCode); - * }) - * .then(function(phoneCredential) { - * return firebase.auth().signInWithCredential(phoneCredential); - * }); - * ``` - * @param auth The Firebase Auth instance in which - * sign-ins should occur. Uses the default Auth instance if unspecified. - */ - class PhoneAuthProvider extends PhoneAuthProvider_Instance { - static PROVIDER_ID: string; - /** - * This corresponds to the sign-in method identifier as returned in - * {@link firebase.auth.Auth.fetchSignInMethodsForEmail}. - */ - static PHONE_SIGN_IN_METHOD: string; - /** - * Creates a phone auth credential, given the verification ID from - * {@link firebase.auth.PhoneAuthProvider.verifyPhoneNumber} and the code - * that was sent to the user's mobile device. - * - *

Error Codes

- *
- *
auth/missing-verification-code
- *
Thrown if the verification code is missing.
- *
auth/missing-verification-id
- *
Thrown if the verification ID is missing.
- *
- * - * @param verificationId The verification ID returned from - * {@link firebase.auth.PhoneAuthProvider.verifyPhoneNumber}. - * @param verificationCode The verification code sent to the user's - * mobile device. - * @return The auth provider credential. - */ - static credential( - verificationId: string, - verificationCode: string - ): firebase.auth.AuthCredential; - } - /** - * @hidden - */ - class PhoneAuthProvider_Instance implements firebase.auth.AuthProvider { - constructor(auth?: firebase.auth.Auth | null); - providerId: string; - /** - * Starts a phone number authentication flow by sending a verification code to - * the given phone number. Returns an ID that can be passed to - * {@link firebase.auth.PhoneAuthProvider.credential} to identify this flow. - * - * For abuse prevention, this method also requires a - * {@link firebase.auth.ApplicationVerifier}. The Firebase Auth SDK includes - * a reCAPTCHA-based implementation, {@link firebase.auth.RecaptchaVerifier}. - * - *

Error Codes

- *
- *
auth/captcha-check-failed
- *
Thrown if the reCAPTCHA response token was invalid, expired, or if - * this method was called from a non-whitelisted domain.
- *
auth/invalid-phone-number
- *
Thrown if the phone number has an invalid format.
- *
auth/missing-phone-number
- *
Thrown if the phone number is missing.
- *
auth/quota-exceeded
- *
Thrown if the SMS quota for the Firebase project has been exceeded.
- *
auth/user-disabled
- *
Thrown if the user corresponding to the given phone number has been - * disabled.
- *
auth/maximum-second-factor-count-exceeded
- *
Thrown if The maximum allowed number of second factors on a user - * has been exceeded.
- *
auth/second-factor-already-in-use
- *
Thrown if the second factor is already enrolled on this account.
- *
auth/unsupported-first-factor
- *
Thrown if the first factor being used to sign in is not supported.
- *
auth/unverified-email
- *
Thrown if the email of the account is not verified.
- *
- * - * @param phoneInfoOptions The user's {@link firebase.auth.PhoneInfoOptions}. - * The phone number should be in E.164 format (e.g. +16505550101). - * @param applicationVerifier - * @return A Promise for the verification ID. - */ - verifyPhoneNumber( - phoneInfoOptions: firebase.auth.PhoneInfoOptions | string, - applicationVerifier: firebase.auth.ApplicationVerifier - ): Promise; - } - - /** - * An {@link https://www.google.com/recaptcha/ reCAPTCHA}-based application - * verifier. - * - * @webonly - * - * @param container The reCAPTCHA container parameter. This - * has different meaning depending on whether the reCAPTCHA is hidden or - * visible. For a visible reCAPTCHA the container must be empty. If a string - * is used, it has to correspond to an element ID. The corresponding element - * must also must be in the DOM at the time of initialization. - * @param parameters The optional reCAPTCHA parameters. Check the - * reCAPTCHA docs for a comprehensive list. All parameters are accepted - * except for the sitekey. Firebase Auth backend provisions a reCAPTCHA for - * each project and will configure this upon rendering. For an invisible - * reCAPTCHA, a size key must have the value 'invisible'. - * @param app The corresponding Firebase app. If none is - * provided, the default Firebase App instance is used. A Firebase App - * instance must be initialized with an API key, otherwise an error will be - * thrown. - */ - class RecaptchaVerifier extends RecaptchaVerifier_Instance {} - /** - * @webonly - * @hidden - */ - class RecaptchaVerifier_Instance - implements firebase.auth.ApplicationVerifier - { - constructor( - container: any | string, - parameters?: Object | null, - app?: firebase.app.App | null - ); - /** - * Clears the reCAPTCHA widget from the page and destroys the current instance. - */ - clear(): void; - /** - * Renders the reCAPTCHA widget on the page. - * @return A Promise that resolves with the - * reCAPTCHA widget ID. - */ - render(): Promise; - /** - * The application verifier type. For a reCAPTCHA verifier, this is 'recaptcha'. - */ - type: string; - /** - * Waits for the user to solve the reCAPTCHA and resolves with the reCAPTCHA - * token. - * @return A Promise for the reCAPTCHA token. - */ - verify(): Promise; - } - - /** - * Twitter auth provider. - * - * @example - * ```javascript - * // Using a redirect. - * firebase.auth().getRedirectResult().then(function(result) { - * if (result.credential) { - * // For accessing the Twitter API. - * var token = result.credential.accessToken; - * var secret = result.credential.secret; - * } - * var user = result.user; - * }); - * - * // Start a sign in process for an unauthenticated user. - * var provider = new firebase.auth.TwitterAuthProvider(); - * firebase.auth().signInWithRedirect(provider); - * ``` - * @example - * ```javascript - * // Using a popup. - * var provider = new firebase.auth.TwitterAuthProvider(); - * firebase.auth().signInWithPopup(provider).then(function(result) { - * // For accessing the Twitter API. - * var token = result.credential.accessToken; - * var secret = result.credential.secret; - * // The signed-in user info. - * var user = result.user; - * }); - * ``` - * - * @see {@link firebase.auth.Auth.onAuthStateChanged} to receive sign in state - * changes. - */ - class TwitterAuthProvider extends TwitterAuthProvider_Instance { - static PROVIDER_ID: string; - /** - * This corresponds to the sign-in method identifier as returned in - * {@link firebase.auth.Auth.fetchSignInMethodsForEmail}. - * - */ - static TWITTER_SIGN_IN_METHOD: string; - /** - * @param token Twitter access token. - * @param secret Twitter secret. - * @return The auth provider credential. - */ - static credential( - token: string, - secret: string - ): firebase.auth.OAuthCredential; - } - /** - * @hidden - */ - class TwitterAuthProvider_Instance implements firebase.auth.AuthProvider { - providerId: string; - /** - * Sets the OAuth custom parameters to pass in a Twitter OAuth request for popup - * and redirect sign-in operations. - * Valid parameters include 'lang'. - * Reserved required OAuth 1.0 parameters such as 'oauth_consumer_key', - * 'oauth_token', 'oauth_signature', etc are not allowed and will be ignored. - * @param customOAuthParameters The custom OAuth parameters to pass - * in the OAuth request. - * @return The provider instance itself. - */ - setCustomParameters( - customOAuthParameters: Object - ): firebase.auth.AuthProvider; - } - - /** - * A structure containing a User, an AuthCredential, the operationType, and - * any additional user information that was returned from the identity provider. - * operationType could be 'signIn' for a sign-in operation, 'link' for a linking - * operation and 'reauthenticate' for a reauthentication operation. - */ - type UserCredential = { - additionalUserInfo?: firebase.auth.AdditionalUserInfo | null; - credential: firebase.auth.AuthCredential | null; - operationType?: string | null; - user: firebase.User | null; - }; - - /** - * Interface representing a user's metadata. - */ - interface UserMetadata { - creationTime?: string; - lastSignInTime?: string; - } -} - -/** - * @webonly - */ -declare namespace firebase.analytics { - /** - * The Firebase Analytics service interface. - * - * Do not call this constructor directly. Instead, use - * {@link firebase.analytics `firebase.analytics()`}. - */ - export interface Analytics { - /** - * The {@link firebase.app.App app} associated with the `Analytics` service - * instance. - * - * @example - * ```javascript - * var app = analytics.app; - * ``` - */ - app: firebase.app.App; - - /** - * Sends analytics event with given `eventParams`. This method - * automatically associates this logged event with this Firebase web - * app instance on this device. - * List of recommended event parameters can be found in - * {@link https://developers.google.com/gtagjs/reference/ga4-events - * | the GA4 reference documentation}. - */ - logEvent( - eventName: 'add_payment_info', - eventParams?: { - coupon?: EventParams['coupon']; - currency?: EventParams['currency']; - items?: EventParams['items']; - payment_type?: EventParams['payment_type']; - value?: EventParams['value']; - [key: string]: any; - }, - options?: firebase.analytics.AnalyticsCallOptions - ): void; - - /** - * Sends analytics event with given `eventParams`. This method - * automatically associates this logged event with this Firebase web - * app instance on this device. - * List of recommended event parameters can be found in - * {@link https://developers.google.com/gtagjs/reference/ga4-events - * | the GA4 reference documentation}. - */ - logEvent( - eventName: 'add_shipping_info', - eventParams?: { - coupon?: EventParams['coupon']; - currency?: EventParams['currency']; - items?: EventParams['items']; - shipping_tier?: EventParams['shipping_tier']; - value?: EventParams['value']; - [key: string]: any; - }, - options?: firebase.analytics.AnalyticsCallOptions - ): void; - - /** - * Sends analytics event with given `eventParams`. This method - * automatically associates this logged event with this Firebase web - * app instance on this device. - * List of recommended event parameters can be found in - * {@link https://developers.google.com/gtagjs/reference/ga4-events - * | the GA4 reference documentation}. - */ - logEvent( - eventName: 'add_to_cart' | 'add_to_wishlist' | 'remove_from_cart', - eventParams?: { - currency?: EventParams['currency']; - value?: EventParams['value']; - items?: EventParams['items']; - [key: string]: any; - }, - options?: firebase.analytics.AnalyticsCallOptions - ): void; - - /** - * Sends analytics event with given `eventParams`. This method - * automatically associates this logged event with this Firebase web - * app instance on this device. - * List of recommended event parameters can be found in - * {@link https://developers.google.com/gtagjs/reference/ga4-events - * | the GA4 reference documentation}. - */ - logEvent( - eventName: 'begin_checkout', - eventParams?: { - currency?: EventParams['currency']; - coupon?: EventParams['coupon']; - value?: EventParams['value']; - items?: EventParams['items']; - [key: string]: any; - }, - options?: firebase.analytics.AnalyticsCallOptions - ): void; - - /** - * Sends analytics event with given `eventParams`. This method - * automatically associates this logged event with this Firebase web - * app instance on this device. - * List of recommended event parameters can be found in - * {@link https://developers.google.com/gtagjs/reference/ga4-events - * | the GA4 reference documentation}. - */ - logEvent( - eventName: 'checkout_progress', - eventParams?: { - currency?: EventParams['currency']; - coupon?: EventParams['coupon']; - value?: EventParams['value']; - items?: EventParams['items']; - checkout_step?: EventParams['checkout_step']; - checkout_option?: EventParams['checkout_option']; - [key: string]: any; - }, - options?: firebase.analytics.AnalyticsCallOptions - ): void; - - /** - * Sends analytics event with given `eventParams`. This method - * automatically associates this logged event with this Firebase web - * app instance on this device. - * See - * {@link https://developers.google.com/analytics/devguides/collection/ga4/exceptions - * | Measure exceptions}. - */ - logEvent( - eventName: 'exception', - eventParams?: { - description?: EventParams['description']; - fatal?: EventParams['fatal']; - [key: string]: any; - }, - options?: firebase.analytics.AnalyticsCallOptions - ): void; - - /** - * Sends analytics event with given `eventParams`. This method - * automatically associates this logged event with this Firebase web - * app instance on this device. - * List of recommended event parameters can be found in - * {@link https://developers.google.com/gtagjs/reference/ga4-events - * | the GA4 reference documentation}. - */ - logEvent( - eventName: 'generate_lead', - eventParams?: { - value?: EventParams['value']; - currency?: EventParams['currency']; - [key: string]: any; - }, - options?: firebase.analytics.AnalyticsCallOptions - ): void; - - /** - * Sends analytics event with given `eventParams`. This method - * automatically associates this logged event with this Firebase web - * app instance on this device. - * List of recommended event parameters can be found in - * {@link https://developers.google.com/gtagjs/reference/ga4-events - * | the GA4 reference documentation}. - */ - logEvent( - eventName: 'login', - eventParams?: { - method?: EventParams['method']; - [key: string]: any; - }, - options?: firebase.analytics.AnalyticsCallOptions - ): void; - - /** - * Sends analytics event with given `eventParams`. This method - * automatically associates this logged event with this Firebase web - * app instance on this device. - * See - * {@link https://developers.google.com/analytics/devguides/collection/ga4/page-view - * | Page views}. - */ - logEvent( - eventName: 'page_view', - eventParams?: { - page_title?: string; - page_location?: string; - page_path?: string; - [key: string]: any; - }, - options?: firebase.analytics.AnalyticsCallOptions - ): void; - - /** - * Sends analytics event with given `eventParams`. This method - * automatically associates this logged event with this Firebase web - * app instance on this device. - * List of recommended event parameters can be found in - * {@link https://developers.google.com/gtagjs/reference/ga4-events - * | the GA4 reference documentation}. - */ - logEvent( - eventName: 'purchase' | 'refund', - eventParams?: { - value?: EventParams['value']; - currency?: EventParams['currency']; - transaction_id: EventParams['transaction_id']; - tax?: EventParams['tax']; - shipping?: EventParams['shipping']; - items?: EventParams['items']; - coupon?: EventParams['coupon']; - affiliation?: EventParams['affiliation']; - [key: string]: any; - }, - options?: firebase.analytics.AnalyticsCallOptions - ): void; - - /** - * Sends analytics event with given `eventParams`. This method - * automatically associates this logged event with this Firebase web - * app instance on this device. - * See {@link https://firebase.google.com/docs/analytics/screenviews - * | Track Screenviews}. - */ - logEvent( - eventName: 'screen_view', - eventParams?: { - firebase_screen: EventParams['firebase_screen']; - firebase_screen_class: EventParams['firebase_screen_class']; - [key: string]: any; - }, - options?: firebase.analytics.AnalyticsCallOptions - ): void; - - /** - * Sends analytics event with given `eventParams`. This method - * automatically associates this logged event with this Firebase web - * app instance on this device. - * List of recommended event parameters can be found in - * {@link https://developers.google.com/gtagjs/reference/ga4-events - * | the GA4 reference documentation}. - */ - logEvent( - eventName: 'search' | 'view_search_results', - eventParams?: { - search_term?: EventParams['search_term']; - [key: string]: any; - }, - options?: firebase.analytics.AnalyticsCallOptions - ): void; - - /** - * Sends analytics event with given `eventParams`. This method - * automatically associates this logged event with this Firebase web - * app instance on this device. - * List of recommended event parameters can be found in - * {@link https://developers.google.com/gtagjs/reference/ga4-events - * | the GA4 reference documentation}. - */ - logEvent( - eventName: 'select_content', - eventParams?: { - content_type?: EventParams['content_type']; - item_id?: EventParams['item_id']; - [key: string]: any; - }, - options?: firebase.analytics.AnalyticsCallOptions - ): void; - - /** - * Sends analytics event with given `eventParams`. This method - * automatically associates this logged event with this Firebase web - * app instance on this device. - * List of recommended event parameters can be found in - * {@link https://developers.google.com/gtagjs/reference/ga4-events - * | the GA4 reference documentation}. - */ - logEvent( - eventName: 'select_item', - eventParams?: { - items?: EventParams['items']; - item_list_name?: EventParams['item_list_name']; - item_list_id?: EventParams['item_list_id']; - [key: string]: any; - }, - options?: firebase.analytics.AnalyticsCallOptions - ): void; - - /** - * Sends analytics event with given `eventParams`. This method - * automatically associates this logged event with this Firebase web - * app instance on this device. - * List of recommended event parameters can be found in - * {@link https://developers.google.com/gtagjs/reference/ga4-events - * | the GA4 reference documentation}. - */ - logEvent( - eventName: 'select_promotion' | 'view_promotion', - eventParams?: { - items?: EventParams['items']; - promotion_id?: EventParams['promotion_id']; - promotion_name?: EventParams['promotion_name']; - [key: string]: any; - }, - options?: firebase.analytics.AnalyticsCallOptions - ): void; - - /** - * Sends analytics event with given `eventParams`. This method - * automatically associates this logged event with this Firebase web - * app instance on this device. - * List of recommended event parameters can be found in - * {@link https://developers.google.com/gtagjs/reference/ga4-events - * | the GA4 reference documentation}. - */ - logEvent( - eventName: 'set_checkout_option', - eventParams?: { - checkout_step?: EventParams['checkout_step']; - checkout_option?: EventParams['checkout_option']; - [key: string]: any; - }, - options?: firebase.analytics.AnalyticsCallOptions - ): void; - - /** - * Sends analytics event with given `eventParams`. This method - * automatically associates this logged event with this Firebase web - * app instance on this device. - * List of recommended event parameters can be found in - * {@link https://developers.google.com/gtagjs/reference/ga4-events - * | the GA4 reference documentation}. - */ - logEvent( - eventName: 'share', - eventParams?: { - method?: EventParams['method']; - content_type?: EventParams['content_type']; - item_id?: EventParams['item_id']; - [key: string]: any; - }, - options?: firebase.analytics.AnalyticsCallOptions - ): void; - - /** - * Sends analytics event with given `eventParams`. This method - * automatically associates this logged event with this Firebase web - * app instance on this device. - * List of recommended event parameters can be found in - * {@link https://developers.google.com/gtagjs/reference/ga4-events - * | the GA4 reference documentation}. - */ - logEvent( - eventName: 'sign_up', - eventParams?: { - method?: EventParams['method']; - [key: string]: any; - }, - options?: firebase.analytics.AnalyticsCallOptions - ): void; - - /** - * Sends analytics event with given `eventParams`. This method - * automatically associates this logged event with this Firebase web - * app instance on this device. - * List of recommended event parameters can be found in - * {@link https://developers.google.com/gtagjs/reference/ga4-events - * | the GA4 reference documentation}. - */ - logEvent( - eventName: 'timing_complete', - eventParams?: { - name: string; - value: number; - event_category?: string; - event_label?: string; - [key: string]: any; - }, - options?: firebase.analytics.AnalyticsCallOptions - ): void; - - /** - * Sends analytics event with given `eventParams`. This method - * automatically associates this logged event with this Firebase web - * app instance on this device. - * List of recommended event parameters can be found in - * {@link https://developers.google.com/gtagjs/reference/ga4-events - * | the GA4 reference documentation}. - */ - logEvent( - eventName: 'view_cart' | 'view_item', - eventParams?: { - currency?: EventParams['currency']; - items?: EventParams['items']; - value?: EventParams['value']; - [key: string]: any; - }, - options?: firebase.analytics.AnalyticsCallOptions - ): void; - - /** - * Sends analytics event with given `eventParams`. This method - * automatically associates this logged event with this Firebase web - * app instance on this device. - * List of recommended event parameters can be found in - * {@link https://developers.google.com/gtagjs/reference/ga4-events - * | the GA4 reference documentation}. - */ - logEvent( - eventName: 'view_item_list', - eventParams?: { - items?: EventParams['items']; - item_list_name?: EventParams['item_list_name']; - item_list_id?: EventParams['item_list_id']; - [key: string]: any; - }, - options?: firebase.analytics.AnalyticsCallOptions - ): void; - - /** - * Sends analytics event with given `eventParams`. This method - * automatically associates this logged event with this Firebase web - * app instance on this device. - * List of recommended event parameters can be found in - * {@link https://developers.google.com/gtagjs/reference/ga4-events - * | the GA4 reference documentation}. - */ - logEvent( - eventName: CustomEventName, - eventParams?: { [key: string]: any }, - options?: firebase.analytics.AnalyticsCallOptions - ): void; - - /** - * Use gtag 'config' command to set 'screen_name'. - */ - setCurrentScreen( - screenName: string, - options?: firebase.analytics.AnalyticsCallOptions - ): void; - - /** - * Use gtag 'config' command to set 'user_id'. - */ - setUserId( - id: string, - options?: firebase.analytics.AnalyticsCallOptions - ): void; - - /** - * Use gtag 'config' command to set all params specified. - */ - setUserProperties( - properties: firebase.analytics.CustomParams, - options?: firebase.analytics.AnalyticsCallOptions - ): void; - - /** - * Sets whether analytics collection is enabled for this app on this device. - * window['ga-disable-analyticsId'] = true; - */ - setAnalyticsCollectionEnabled(enabled: boolean): void; - } - - export type CustomEventName = T extends EventNameString ? never : T; - - /** - * Additional options that can be passed to Firebase Analytics method - * calls such as `logEvent`, `setCurrentScreen`, etc. - */ - export interface AnalyticsCallOptions { - /** - * If true, this config or event call applies globally to all - * analytics properties on the page. - */ - global: boolean; - } - - /** - * Specifies custom options for your Firebase Analytics instance. - * You must set these before initializing `firebase.analytics()`. - */ - export interface SettingsOptions { - /** Sets custom name for `gtag` function. */ - gtagName?: string; - /** Sets custom name for `dataLayer` array used by gtag. */ - dataLayerName?: string; - } - - /** - * Configures Firebase Analytics to use custom `gtag` or `dataLayer` names. - * Intended to be used if `gtag.js` script has been installed on - * this page independently of Firebase Analytics, and is using non-default - * names for either the `gtag` function or for `dataLayer`. - * Must be called before calling `firebase.analytics()` or it won't - * have any effect. - */ - export function settings(settings: firebase.analytics.SettingsOptions): void; - - /** - * Standard gtag.js control parameters. - * For more information, see - * {@link https://developers.google.com/gtagjs/reference/parameter - * the gtag.js documentation on parameters}. - */ - export interface ControlParams { - groups?: string | string[]; - send_to?: string | string[]; - event_callback?: () => void; - event_timeout?: number; - } - - /** - * Standard gtag.js event parameters. - * For more information, see - * {@link https://developers.google.com/gtagjs/reference/parameter - * the gtag.js documentation on parameters}. - */ - export interface EventParams { - checkout_option?: string; - checkout_step?: number; - item_id?: string; - content_type?: string; - coupon?: string; - currency?: string; - description?: string; - fatal?: boolean; - items?: Item[]; - method?: string; - number?: string; - promotions?: Promotion[]; - screen_name?: string; - /** - * Firebase-specific. Use to log a `screen_name` to Firebase Analytics. - */ - firebase_screen?: string; - /** - * Firebase-specific. Use to log a `screen_class` to Firebase Analytics. - */ - firebase_screen_class?: string; - search_term?: string; - shipping?: Currency; - tax?: Currency; - transaction_id?: string; - value?: number; - event_label?: string; - event_category: string; - shipping_tier?: string; - item_list_id?: string; - item_list_name?: string; - promotion_id?: string; - promotion_name?: string; - payment_type?: string; - affiliation?: string; - } - - /** - * Any custom params the user may pass to gtag.js. - */ - export interface CustomParams { - [key: string]: any; - } - - /** - * Type for standard gtag.js event names. `logEvent` also accepts any - * custom string and interprets it as a custom event name. - */ - export type EventNameString = - | 'add_payment_info' - | 'add_shipping_info' - | 'add_to_cart' - | 'add_to_wishlist' - | 'begin_checkout' - | 'checkout_progress' - | 'exception' - | 'generate_lead' - | 'login' - | 'page_view' - | 'purchase' - | 'refund' - | 'remove_from_cart' - | 'screen_view' - | 'search' - | 'select_content' - | 'select_item' - | 'select_promotion' - | 'set_checkout_option' - | 'share' - | 'sign_up' - | 'timing_complete' - | 'view_cart' - | 'view_item' - | 'view_item_list' - | 'view_promotion' - | 'view_search_results'; - - /** - * Enum of standard gtag.js event names provided for convenient - * developer usage. `logEvent` will also accept any custom string - * and interpret it as a custom event name. - */ - export enum EventName { - ADD_PAYMENT_INFO = 'add_payment_info', - ADD_SHIPPING_INFO = 'add_shipping_info', - ADD_TO_CART = 'add_to_cart', - ADD_TO_WISHLIST = 'add_to_wishlist', - BEGIN_CHECKOUT = 'begin_checkout', - /** @deprecated */ - CHECKOUT_PROGRESS = 'checkout_progress', - EXCEPTION = 'exception', - GENERATE_LEAD = 'generate_lead', - LOGIN = 'login', - PAGE_VIEW = 'page_view', - PURCHASE = 'purchase', - REFUND = 'refund', - REMOVE_FROM_CART = 'remove_from_cart', - SCREEN_VIEW = 'screen_view', - SEARCH = 'search', - SELECT_CONTENT = 'select_content', - SELECT_ITEM = 'select_item', - SELECT_PROMOTION = 'select_promotion', - /** @deprecated */ - SET_CHECKOUT_OPTION = 'set_checkout_option', - SHARE = 'share', - SIGN_UP = 'sign_up', - TIMING_COMPLETE = 'timing_complete', - VIEW_CART = 'view_cart', - VIEW_ITEM = 'view_item', - VIEW_ITEM_LIST = 'view_item_list', - VIEW_PROMOTION = 'view_promotion', - VIEW_SEARCH_RESULTS = 'view_search_results' - } - - export type Currency = string | number; - - export interface Item { - item_id?: string; - item_name?: string; - item_brand?: string; - item_category?: string; - item_category2?: string; - item_category3?: string; - item_category4?: string; - item_category5?: string; - item_variant?: string; - price?: Currency; - quantity?: number; - index?: number; - coupon?: string; - item_list_name?: string; - item_list_id?: string; - discount?: Currency; - affiliation?: string; - creative_name?: string; - creative_slot?: string; - promotion_id?: string; - promotion_name?: string; - location_id?: string; - /** @deprecated Use item_brand instead. */ - brand?: string; - /** @deprecated Use item_category instead. */ - category?: string; - /** @deprecated Use item_id instead. */ - id?: string; - /** @deprecated Use item_name instead. */ - name?: string; - } - - /** @deprecated Use Item instead. */ - export interface Promotion { - creative_name?: string; - creative_slot?: string; - id?: string; - name?: string; - } - - /** - * An async function that returns true if current browser context supports initialization of analytics module - * (`firebase.analytics()`). - * - * Returns false otherwise. - * - * - */ - function isSupported(): Promise; -} - -declare namespace firebase.auth.Auth { - type Persistence = string; - /** - * An enumeration of the possible persistence mechanism types. - */ - var Persistence: { - /** - * Indicates that the state will be persisted even when the browser window is - * closed or the activity is destroyed in react-native. - */ - LOCAL: Persistence; - /** - * Indicates that the state will only be stored in memory and will be cleared - * when the window or activity is refreshed. - */ - NONE: Persistence; - /** - * Indicates that the state will only persist in current session/tab, relevant - * to web only, and will be cleared when the tab is closed. - */ - SESSION: Persistence; - }; -} - -declare namespace firebase.User { - /** - * This is the interface that defines the multi-factor related properties and - * operations pertaining to a {@link firebase.User}. - */ - interface MultiFactorUser { - /** - * Returns a list of the user's enrolled second factors. - */ - enrolledFactors: firebase.auth.MultiFactorInfo[]; - /** - * Enrolls a second factor as identified by the - * {@link firebase.auth.MultiFactorAssertion} for the current user. - * On resolution, the user tokens are updated to reflect the change in the - * JWT payload. - * Accepts an additional display name parameter used to identify the second - * factor to the end user. - * Recent re-authentication is required for this operation to succeed. - * On successful enrollment, existing Firebase sessions (refresh tokens) are - * revoked. When a new factor is enrolled, an email notification is sent - * to the user’s email. - * - *

Error Codes

- *
- *
auth/invalid-verification-code
- *
Thrown if the verification code is not valid.
- *
auth/missing-verification-code
- *
Thrown if the verification code is missing.
- *
auth/invalid-verification-id
- *
Thrown if the credential is a - * {@link firebase.auth.PhoneAuthProvider.credential} and the verification - * ID of the credential is not valid.
- *
auth/missing-verification-id
- *
Thrown if the verification ID is missing.
- *
auth/code-expired
- *
Thrown if the verification code has expired.
- *
auth/maximum-second-factor-count-exceeded
- *
Thrown if The maximum allowed number of second factors on a user - * has been exceeded.
- *
auth/second-factor-already-in-use
- *
Thrown if the second factor is already enrolled on this account.
- *
auth/unsupported-first-factor
- *
Thrown if the first factor being used to sign in is not supported.
- *
auth/unverified-email
- *
Thrown if the email of the account is not verified.
- *
auth/requires-recent-login
- *
Thrown if the user's last sign-in time does not meet the security - * threshold. Use {@link firebase.User.reauthenticateWithCredential} to - * resolve.
- *
- * - * @example - * ```javascript - * firebase.auth().currentUser.multiFactor.getSession() - * .then(function(multiFactorSession) { - * // Send verification code - * var phoneAuthProvider = new firebase.auth.PhoneAuthProvider(); - * var phoneInfoOptions = { - * phoneNumber: phoneNumber, - * session: multiFactorSession - * }; - * return phoneAuthProvider.verifyPhoneNumber( - * phoneInfoOptions, appVerifier); - * }).then(function(verificationId) { - * // Store verificationID and show UI to let user enter verification code. - * }); - * - * var phoneAuthCredential = - * firebase.auth.PhoneAuthProvider.credential(verificationId, verificationCode); - * var multiFactorAssertion = - * firebase.auth.PhoneMultiFactorGenerator.assertion(phoneAuthCredential); - * firebase.auth().currentUser.multiFactor.enroll(multiFactorAssertion) - * .then(function() { - * // Second factor enrolled. - * }); - * ``` - * - * @param assertion The multi-factor assertion to enroll with. - * @param displayName The display name of the second factor. - */ - enroll( - assertion: firebase.auth.MultiFactorAssertion, - displayName?: string | null - ): Promise; - /** - * Returns the session identifier for a second factor enrollment operation. - * This is used to identify the current user trying to enroll a second factor. - * @return The promise that resolves with the - * {@link firebase.auth.MultiFactorSession}. - * - *

Error Codes

- *
- *
auth/user-token-expired
- *
Thrown if the token of the user is expired.
- *
- */ - getSession(): Promise; - /** - * Unenrolls the specified second factor. To specify the factor to remove, pass - * a {@link firebase.auth.MultiFactorInfo} object - * (retrieved from enrolledFactors()) - * or the factor's UID string. - * Sessions are not revoked when the account is downgraded. An email - * notification is likely to be sent to the user notifying them of the change. - * Recent re-authentication is required for this operation to succeed. - * When an existing factor is unenrolled, an email notification is sent to the - * user’s email. - * - *

Error Codes

- *
- *
auth/multi-factor-info-not-found
- *
Thrown if the user does not have a second factor matching the - * identifier provided.
- *
auth/requires-recent-login
- *
Thrown if the user's last sign-in time does not meet the security - * threshold. Use {@link firebase.User.reauthenticateWithCredential} to - * resolve.
- *
- * - * @example - * ```javascript - * var options = firebase.auth().currentUser.multiFactor.enrolledFactors; - * // Present user the option to unenroll. - * return firebase.auth().currentUser.multiFactor.unenroll(options[i]) - * .then(function() { - * // User successfully unenrolled selected factor. - * }).catch(function(error) { - * // Handler error. - * }); - * ``` - * - * @param option The multi-factor option to unenroll. - */ - unenroll(option: firebase.auth.MultiFactorInfo | string): Promise; - } -} - -declare namespace firebase.auth.ActionCodeInfo { - type Operation = string; - /** - * An enumeration of the possible email action types. - */ - var Operation: { - /** - * The email link sign-in action. - */ - EMAIL_SIGNIN: Operation; - /** - * The password reset action. - */ - PASSWORD_RESET: Operation; - /** - * The email revocation action. - */ - RECOVER_EMAIL: Operation; - /** - * The revert second factor addition email action. - */ - REVERT_SECOND_FACTOR_ADDITION: Operation; - /** - * The verify and update email action. - */ - VERIFY_AND_CHANGE_EMAIL: Operation; - /** - * The email verification action. - */ - VERIFY_EMAIL: Operation; - }; -} - -declare namespace firebase.database { - /** - * A `DataSnapshot` contains data from a Database location. - * - * Any time you read data from the Database, you receive the data as a - * `DataSnapshot`. A `DataSnapshot` is passed to the event callbacks you attach - * with `on()` or `once()`. You can extract the contents of the snapshot as a - * JavaScript object by calling the `val()` method. Alternatively, you can - * traverse into the snapshot by calling `child()` to return child snapshots - * (which you could then call `val()` on). - * - * A `DataSnapshot` is an efficiently generated, immutable copy of the data at - * a Database location. It cannot be modified and will never change (to modify - * data, you always call the `set()` method on a `Reference` directly). - * - */ - interface DataSnapshot { - /** - * Gets another `DataSnapshot` for the location at the specified relative path. - * - * Passing a relative path to the `child()` method of a DataSnapshot returns - * another `DataSnapshot` for the location at the specified relative path. The - * relative path can either be a simple child name (for example, "ada") or a - * deeper, slash-separated path (for example, "ada/name/first"). If the child - * location has no data, an empty `DataSnapshot` (that is, a `DataSnapshot` - * whose value is `null`) is returned. - * - * @example - * ```javascript - * // Assume we have the following data in the Database: - * { - * "name": { - * "first": "Ada", - * "last": "Lovelace" - * } - * } - * - * // Test for the existence of certain keys within a DataSnapshot - * var ref = firebase.database().ref("users/ada"); - * ref.once("value") - * .then(function(snapshot) { - * var name = snapshot.child("name").val(); // {first:"Ada",last:"Lovelace"} - * var firstName = snapshot.child("name/first").val(); // "Ada" - * var lastName = snapshot.child("name").child("last").val(); // "Lovelace" - * var age = snapshot.child("age").val(); // null - * }); - * ``` - * - * @param path A relative path to the location of child data. - */ - child(path: string): firebase.database.DataSnapshot; - /** - * Returns true if this `DataSnapshot` contains any data. It is slightly more - * efficient than using `snapshot.val() !== null`. - * - * @example - * ```javascript - * // Assume we have the following data in the Database: - * { - * "name": { - * "first": "Ada", - * "last": "Lovelace" - * } - * } - * - * // Test for the existence of certain keys within a DataSnapshot - * var ref = firebase.database().ref("users/ada"); - * ref.once("value") - * .then(function(snapshot) { - * var a = snapshot.exists(); // true - * var b = snapshot.child("name").exists(); // true - * var c = snapshot.child("name/first").exists(); // true - * var d = snapshot.child("name/middle").exists(); // false - * }); - * ``` - */ - exists(): boolean; - /** - * Exports the entire contents of the DataSnapshot as a JavaScript object. - * - * The `exportVal()` method is similar to `val()`, except priority information - * is included (if available), making it suitable for backing up your data. - * - * @return The DataSnapshot's contents as a JavaScript value (Object, - * Array, string, number, boolean, or `null`). - */ - exportVal(): any; - /** - * Enumerates the top-level children in the `DataSnapshot`. - * - * Because of the way JavaScript objects work, the ordering of data in the - * JavaScript object returned by `val()` is not guaranteed to match the ordering - * on the server nor the ordering of `child_added` events. That is where - * `forEach()` comes in handy. It guarantees the children of a `DataSnapshot` - * will be iterated in their query order. - * - * If no explicit `orderBy*()` method is used, results are returned - * ordered by key (unless priorities are used, in which case, results are - * returned by priority). - * - * @example - * ```javascript - * // Assume we have the following data in the Database: - * { - * "users": { - * "ada": { - * "first": "Ada", - * "last": "Lovelace" - * }, - * "alan": { - * "first": "Alan", - * "last": "Turing" - * } - * } - * } - * - * // Loop through users in order with the forEach() method. The callback - * // provided to forEach() will be called synchronously with a DataSnapshot - * // for each child: - * var query = firebase.database().ref("users").orderByKey(); - * query.once("value") - * .then(function(snapshot) { - * snapshot.forEach(function(childSnapshot) { - * // key will be "ada" the first time and "alan" the second time - * var key = childSnapshot.key; - * // childData will be the actual contents of the child - * var childData = childSnapshot.val(); - * }); - * }); - * ``` - * - * @example - * ```javascript - * // You can cancel the enumeration at any point by having your callback - * // function return true. For example, the following code sample will only - * // fire the callback function one time: - * var query = firebase.database().ref("users").orderByKey(); - * query.once("value") - * .then(function(snapshot) { - * snapshot.forEach(function(childSnapshot) { - * var key = childSnapshot.key; // "ada" - * - * // Cancel enumeration - * return true; - * }); - * }); - * ``` - * - * @param action A function - * that will be called for each child DataSnapshot. The callback can return - * true to cancel further enumeration. - * @return true if enumeration was canceled due to your callback - * returning true. - */ - forEach( - action: (a: firebase.database.DataSnapshot) => boolean | void - ): boolean; - /** - * Gets the priority value of the data in this `DataSnapshot`. - * - * Applications need not use priority but can order collections by - * ordinary properties (see - * {@link - * https://firebase.google.com/docs/database/web/lists-of-data#sorting_and_filtering_data - * Sorting and filtering data}). - */ - getPriority(): string | number | null; - /** - * Returns true if the specified child path has (non-null) data. - * - * @example - * ```javascript - * // Assume we have the following data in the Database: - * { - * "name": { - * "first": "Ada", - * "last": "Lovelace" - * } - * } - * - * // Determine which child keys in DataSnapshot have data. - * var ref = firebase.database().ref("users/ada"); - * ref.once("value") - * .then(function(snapshot) { - * var hasName = snapshot.hasChild("name"); // true - * var hasAge = snapshot.hasChild("age"); // false - * }); - * ``` - * - * @param path A relative path to the location of a potential child. - * @return `true` if data exists at the specified child path; else - * `false`. - */ - hasChild(path: string): boolean; - /** - * Returns whether or not the `DataSnapshot` has any non-`null` child - * properties. - * - * You can use `hasChildren()` to determine if a `DataSnapshot` has any - * children. If it does, you can enumerate them using `forEach()`. If it - * doesn't, then either this snapshot contains a primitive value (which can be - * retrieved with `val()`) or it is empty (in which case, `val()` will return - * `null`). - * - * @example - * ```javascript - * // Assume we have the following data in the Database: - * { - * "name": { - * "first": "Ada", - * "last": "Lovelace" - * } - * } - * - * var ref = firebase.database().ref("users/ada"); - * ref.once("value") - * .then(function(snapshot) { - * var a = snapshot.hasChildren(); // true - * var b = snapshot.child("name").hasChildren(); // true - * var c = snapshot.child("name/first").hasChildren(); // false - * }); - * ``` - * - * @return true if this snapshot has any children; else false. - */ - hasChildren(): boolean; - /** - * The key (last part of the path) of the location of this `DataSnapshot`. - * - * The last token in a Database location is considered its key. For example, - * "ada" is the key for the /users/ada/ node. Accessing the key on any - * `DataSnapshot` will return the key for the location that generated it. - * However, accessing the key on the root URL of a Database will return `null`. - * - * @example - * ```javascript - * // Assume we have the following data in the Database: - * { - * "name": { - * "first": "Ada", - * "last": "Lovelace" - * } - * } - * - * var ref = firebase.database().ref("users/ada"); - * ref.once("value") - * .then(function(snapshot) { - * var key = snapshot.key; // "ada" - * var childKey = snapshot.child("name/last").key; // "last" - * }); - * ``` - * - * @example - * ```javascript - * var rootRef = firebase.database().ref(); - * rootRef.once("value") - * .then(function(snapshot) { - * var key = snapshot.key; // null - * var childKey = snapshot.child("users/ada").key; // "ada" - * }); - * ``` - */ - key: string | null; - /** - * Returns the number of child properties of this `DataSnapshot`. - * - * @example - * ```javascript - * // Assume we have the following data in the Database: - * { - * "name": { - * "first": "Ada", - * "last": "Lovelace" - * } - * } - * - * var ref = firebase.database().ref("users/ada"); - * ref.once("value") - * .then(function(snapshot) { - * var a = snapshot.numChildren(); // 1 ("name") - * var b = snapshot.child("name").numChildren(); // 2 ("first", "last") - * var c = snapshot.child("name/first").numChildren(); // 0 - * }); - * ``` - */ - numChildren(): number; - /** - * Extracts a JavaScript value from a `DataSnapshot`. - * - * Depending on the data in a `DataSnapshot`, the `val()` method may return a - * scalar type (string, number, or boolean), an array, or an object. It may also - * return null, indicating that the `DataSnapshot` is empty (contains no data). - * - * @example - * ```javascript - * // Write and then read back a string from the Database. - * ref.set("hello") - * .then(function() { - * return ref.once("value"); - * }) - * .then(function(snapshot) { - * var data = snapshot.val(); // data === "hello" - * }); - * ``` - * - * @example - * ```javascript - * // Write and then read back a JavaScript object from the Database. - * ref.set({ name: "Ada", age: 36 }) - * .then(function() { - * return ref.once("value"); - * }) - * .then(function(snapshot) { - * var data = snapshot.val(); - * // data is { "name": "Ada", "age": 36 } - * // data.name === "Ada" - * // data.age === 36 - * }); - * ``` - * - * @return The DataSnapshot's contents as a JavaScript value (Object, - * Array, string, number, boolean, or `null`). - */ - val(): any; - /** - * The `Reference` for the location that generated this `DataSnapshot`. - */ - ref: firebase.database.Reference; - /** - * Returns a JSON-serializable representation of this object. - */ - toJSON(): Object | null; - } - - /** - * The Firebase Database service interface. - * - * Do not call this constructor directly. Instead, use - * {@link firebase.database `firebase.database()`}. - * - * See - * {@link - * https://firebase.google.com/docs/database/web/start/ - * Installation & Setup in JavaScript} - * for a full guide on how to use the Firebase Database service. - */ - interface Database { - /** - * The {@link firebase.app.App app} associated with the `Database` service - * instance. - * - * @example - * ```javascript - * var app = database.app; - * ``` - */ - app: firebase.app.App; - /** - * Modify this instance to communicate with the Realtime Database emulator. - * - *

Note: This method must be called before performing any other operation. - * - * @param host the emulator host (ex: localhost) - * @param port the emulator port (ex: 8080) - * @param options.mockUserToken the mock auth token to use for unit testing Security Rules - */ - useEmulator( - host: string, - port: number, - options?: { - mockUserToken?: EmulatorMockTokenOptions | string; - } - ): void; - /** - * Disconnects from the server (all Database operations will be completed - * offline). - * - * The client automatically maintains a persistent connection to the Database - * server, which will remain active indefinitely and reconnect when - * disconnected. However, the `goOffline()` and `goOnline()` methods may be used - * to control the client connection in cases where a persistent connection is - * undesirable. - * - * While offline, the client will no longer receive data updates from the - * Database. However, all Database operations performed locally will continue to - * immediately fire events, allowing your application to continue behaving - * normally. Additionally, each operation performed locally will automatically - * be queued and retried upon reconnection to the Database server. - * - * To reconnect to the Database and begin receiving remote events, see - * `goOnline()`. - * - * @example - * ```javascript - * firebase.database().goOffline(); - * ``` - */ - goOffline(): any; - /** - * Reconnects to the server and synchronizes the offline Database state - * with the server state. - * - * This method should be used after disabling the active connection with - * `goOffline()`. Once reconnected, the client will transmit the proper data - * and fire the appropriate events so that your client "catches up" - * automatically. - * - * @example - * ```javascript - * firebase.database().goOnline(); - * ``` - */ - goOnline(): any; - /** - * Returns a `Reference` representing the location in the Database - * corresponding to the provided path. If no path is provided, the `Reference` - * will point to the root of the Database. - * - * @example - * ```javascript - * // Get a reference to the root of the Database - * var rootRef = firebase.database().ref(); - * ``` - * - * @example - * ```javascript - * // Get a reference to the /users/ada node - * var adaRef = firebase.database().ref("users/ada"); - * // The above is shorthand for the following operations: - * //var rootRef = firebase.database().ref(); - * //var adaRef = rootRef.child("users/ada"); - * ``` - * - * @param path Optional path representing the location the returned - * `Reference` will point. If not provided, the returned `Reference` will - * point to the root of the Database. - * @return If a path is provided, a `Reference` - * pointing to the provided path. Otherwise, a `Reference` pointing to the - * root of the Database. - */ - ref(path?: string): firebase.database.Reference; - /** - * Returns a `Reference` representing the location in the Database - * corresponding to the provided Firebase URL. - * - * An exception is thrown if the URL is not a valid Firebase Database URL or it - * has a different domain than the current `Database` instance. - * - * Note that all query parameters (`orderBy`, `limitToLast`, etc.) are ignored - * and are not applied to the returned `Reference`. - * - * @example - * ```javascript - * // Get a reference to the root of the Database - * var rootRef = firebase.database().ref("https://.firebaseio.com"); - * ``` - * - * @example - * ```javascript - * // Get a reference to the /users/ada node - * var adaRef = firebase.database().ref("https://.firebaseio.com/users/ada"); - * ``` - * - * @param url The Firebase URL at which the returned `Reference` will - * point. - * @return A `Reference` pointing to the provided - * Firebase URL. - */ - refFromURL(url: string): firebase.database.Reference; - } - - /** - * The `onDisconnect` class allows you to write or clear data when your client - * disconnects from the Database server. These updates occur whether your - * client disconnects cleanly or not, so you can rely on them to clean up data - * even if a connection is dropped or a client crashes. - * - * The `onDisconnect` class is most commonly used to manage presence in - * applications where it is useful to detect how many clients are connected and - * when other clients disconnect. See - * {@link - * https://firebase.google.com/docs/database/web/offline-capabilities - * Enabling Offline Capabilities in JavaScript} for more information. - * - * To avoid problems when a connection is dropped before the requests can be - * transferred to the Database server, these functions should be called before - * writing any data. - * - * Note that `onDisconnect` operations are only triggered once. If you want an - * operation to occur each time a disconnect occurs, you'll need to re-establish - * the `onDisconnect` operations each time you reconnect. - */ - interface OnDisconnect { - /** - * Cancels all previously queued `onDisconnect()` set or update events for this - * location and all children. - * - * If a write has been queued for this location via a `set()` or `update()` at a - * parent location, the write at this location will be canceled, though writes - * to sibling locations will still occur. - * - * @example - * ```javascript - * var ref = firebase.database().ref("onlineState"); - * ref.onDisconnect().set(false); - * // ... sometime later - * ref.onDisconnect().cancel(); - * ``` - * - * @param onComplete An optional callback function that will - * be called when synchronization to the server has completed. The callback - * will be passed a single parameter: null for success, or an Error object - * indicating a failure. - * @return Resolves when synchronization to the server - * is complete. - */ - cancel(onComplete?: (a: Error | null) => any): Promise; - /** - * Ensures the data at this location is deleted when the client is disconnected - * (due to closing the browser, navigating to a new page, or network issues). - * - * @param onComplete An optional callback function that will - * be called when synchronization to the server has completed. The callback - * will be passed a single parameter: null for success, or an Error object - * indicating a failure. - * @return Resolves when synchronization to the server - * is complete. - */ - remove(onComplete?: (a: Error | null) => any): Promise; - /** - * Ensures the data at this location is set to the specified value when the - * client is disconnected (due to closing the browser, navigating to a new page, - * or network issues). - * - * `set()` is especially useful for implementing "presence" systems, where a - * value should be changed or cleared when a user disconnects so that they - * appear "offline" to other users. See - * {@link - * https://firebase.google.com/docs/database/web/offline-capabilities - * Enabling Offline Capabilities in JavaScript} for more information. - * - * Note that `onDisconnect` operations are only triggered once. If you want an - * operation to occur each time a disconnect occurs, you'll need to re-establish - * the `onDisconnect` operations each time. - * - * @example - * ```javascript - * var ref = firebase.database().ref("users/ada/status"); - * ref.onDisconnect().set("I disconnected!"); - * ``` - * - * @param value The value to be written to this location on - * disconnect (can be an object, array, string, number, boolean, or null). - * @param onComplete An optional callback function that - * will be called when synchronization to the Database server has completed. - * The callback will be passed a single parameter: null for success, or an - * `Error` object indicating a failure. - * @return Resolves when synchronization to the - * Database is complete. - */ - set(value: any, onComplete?: (a: Error | null) => any): Promise; - /** - * Ensures the data at this location is set to the specified value and priority - * when the client is disconnected (due to closing the browser, navigating to a - * new page, or network issues). - */ - setWithPriority( - value: any, - priority: number | string | null, - onComplete?: (a: Error | null) => any - ): Promise; - /** - * Writes multiple values at this location when the client is disconnected (due - * to closing the browser, navigating to a new page, or network issues). - * - * The `values` argument contains multiple property-value pairs that will be - * written to the Database together. Each child property can either be a simple - * property (for example, "name") or a relative path (for example, "name/first") - * from the current location to the data to update. - * - * As opposed to the `set()` method, `update()` can be use to selectively update - * only the referenced properties at the current location (instead of replacing - * all the child properties at the current location). - * - * See more examples using the connected version of - * {@link firebase.database.Reference.update `update()`}. - * - * @example - * ```javascript - * var ref = firebase.database().ref("users/ada"); - * ref.update({ - * onlineState: true, - * status: "I'm online." - * }); - * ref.onDisconnect().update({ - * onlineState: false, - * status: "I'm offline." - * }); - * ``` - * - * @param values Object containing multiple values. - * @param onComplete An optional callback function that will - * be called when synchronization to the server has completed. The - * callback will be passed a single parameter: null for success, or an Error - * object indicating a failure. - * @return Resolves when synchronization to the - * Database is complete. - */ - update(values: Object, onComplete?: (a: Error | null) => any): Promise; - } - - type EventType = - | 'value' - | 'child_added' - | 'child_changed' - | 'child_moved' - | 'child_removed'; - - /** - * A `Query` sorts and filters the data at a Database location so only a subset - * of the child data is included. This can be used to order a collection of - * data by some attribute (for example, height of dinosaurs) as well as to - * restrict a large list of items (for example, chat messages) down to a number - * suitable for synchronizing to the client. Queries are created by chaining - * together one or more of the filter methods defined here. - * - * Just as with a `Reference`, you can receive data from a `Query` by using the - * `on()` method. You will only receive events and `DataSnapshot`s for the - * subset of the data that matches your query. - * - * Read our documentation on - * {@link - * https://firebase.google.com/docs/database/web/lists-of-data#sorting_and_filtering_data - * Sorting and filtering data} for more information. - */ - interface Query { - /** - * Creates a `Query` with the specified ending point. - * - * Using `startAt()`, `startAfter()`, `endBefore()`, `endAt()` and `equalTo()` - * allows you to choose arbitrary starting and ending points for your queries. - * - * The ending point is inclusive, so children with exactly the specified value - * will be included in the query. The optional key argument can be used to - * further limit the range of the query. If it is specified, then children that - * have exactly the specified value must also have a key name less than or equal - * to the specified key. - * - * You can read more about `endAt()` in - * {@link - * https://firebase.google.com/docs/database/web/lists-of-data#filtering_data - * Filtering data}. - * - * @example - * ```javascript - * // Find all dinosaurs whose names come before Pterodactyl lexicographically. - * // Include Pterodactyl in the result. - * var ref = firebase.database().ref("dinosaurs"); - * ref.orderByKey().endAt("pterodactyl").on("child_added", function(snapshot) { - * console.log(snapshot.key); - * }); - * ``` - * - * @param value The value to end at. The argument - * type depends on which `orderBy*()` function was used in this query. - * Specify a value that matches the `orderBy*()` type. When used in - * combination with `orderByKey()`, the value must be a string. - * @param key The child key to end at, among the children with the - * previously specified priority. This argument is only allowed if ordering by - * child, value, or priority. - */ - endAt( - value: number | string | boolean | null, - key?: string - ): firebase.database.Query; - /** - * Creates a `Query` with the specified ending point (exclusive). - * - * Using `startAt()`, `startAfter()`, `endBefore()`, `endAt()` and `equalTo()` - * allows you to choose arbitrary starting and ending points for your queries. - * - * The ending point is exclusive. If only a value is provided, children - * with a value less than the specified value will be included in the query. - * If a key is specified, then children must have a value lesss than or equal - * to the specified value and a a key name less than the specified key. - * - * @example - * ```javascript - * // Find all dinosaurs whose names come before Pterodactyl lexicographically. - * // Do not include Pterodactyl in the result. - * var ref = firebase.database().ref("dinosaurs"); - * ref.orderByKey().endBefore("pterodactyl").on("child_added", function(snapshot) { - * console.log(snapshot.key); - * }); - * - * @param value The value to end before. The argument - * type depends on which `orderBy*()` function was used in this query. - * Specify a value that matches the `orderBy*()` type. When used in - * combination with `orderByKey()`, the value must be a string. - * @param key The child key to end before, among the children with the - * previously specified priority. This argument is only allowed if ordering by - * child, value, or priority. - */ - endBefore( - value: number | string | boolean | null, - key?: string - ): firebase.database.Query; - /** - * Creates a `Query` that includes children that match the specified value. - * - * Using `startAt()`, `startAfter()`, `endBefore()`, `endAt()` and `equalTo()` - * allows you to choose arbitrary starting and ending points for your queries. - * - * The optional key argument can be used to further limit the range of the - * query. If it is specified, then children that have exactly the specified - * value must also have exactly the specified key as their key name. This can be - * used to filter result sets with many matches for the same value. - * - * You can read more about `equalTo()` in - * {@link - * https://firebase.google.com/docs/database/web/lists-of-data#filtering_data - * Filtering data}. - * - * @example - * ```javascript - * // Find all dinosaurs whose height is exactly 25 meters. - * var ref = firebase.database().ref("dinosaurs"); - * ref.orderByChild("height").equalTo(25).on("child_added", function(snapshot) { - * console.log(snapshot.key); - * }); - * ``` - * - * @param value The value to match for. The - * argument type depends on which `orderBy*()` function was used in this - * query. Specify a value that matches the `orderBy*()` type. When used in - * combination with `orderByKey()`, the value must be a string. - * @param key The child key to start at, among the children with the - * previously specified priority. This argument is only allowed if ordering by - * child, value, or priority. - */ - equalTo( - value: number | string | boolean | null, - key?: string - ): firebase.database.Query; - /** - * Returns whether or not the current and provided queries represent the same - * location, have the same query parameters, and are from the same instance of - * `firebase.app.App`. - * - * Two `Reference` objects are equivalent if they represent the same location - * and are from the same instance of `firebase.app.App`. - * - * Two `Query` objects are equivalent if they represent the same location, have - * the same query parameters, and are from the same instance of - * `firebase.app.App`. Equivalent queries share the same sort order, limits, and - * starting and ending points. - * - * @example - * ```javascript - * var rootRef = firebase.database.ref(); - * var usersRef = rootRef.child("users"); - * - * usersRef.isEqual(rootRef); // false - * usersRef.isEqual(rootRef.child("users")); // true - * usersRef.parent.isEqual(rootRef); // true - * ``` - * - * @example - * ```javascript - * var rootRef = firebase.database.ref(); - * var usersRef = rootRef.child("users"); - * var usersQuery = usersRef.limitToLast(10); - * - * usersQuery.isEqual(usersRef); // false - * usersQuery.isEqual(usersRef.limitToLast(10)); // true - * usersQuery.isEqual(rootRef.limitToLast(10)); // false - * usersQuery.isEqual(usersRef.orderByKey().limitToLast(10)); // false - * ``` - * - * @param other The query to compare against. - * @return Whether or not the current and provided queries are - * equivalent. - */ - isEqual(other: firebase.database.Query | null): boolean; - /** - * Generates a new `Query` limited to the first specific number of children. - * - * The `limitToFirst()` method is used to set a maximum number of children to be - * synced for a given callback. If we set a limit of 100, we will initially only - * receive up to 100 `child_added` events. If we have fewer than 100 messages - * stored in our Database, a `child_added` event will fire for each message. - * However, if we have over 100 messages, we will only receive a `child_added` - * event for the first 100 ordered messages. As items change, we will receive - * `child_removed` events for each item that drops out of the active list so - * that the total number stays at 100. - * - * You can read more about `limitToFirst()` in - * {@link - * https://firebase.google.com/docs/database/web/lists-of-data#filtering_data - * Filtering data}. - * - * @example - * ```javascript - * // Find the two shortest dinosaurs. - * var ref = firebase.database().ref("dinosaurs"); - * ref.orderByChild("height").limitToFirst(2).on("child_added", function(snapshot) { - * // This will be called exactly two times (unless there are less than two - * // dinosaurs in the Database). - * - * // It will also get fired again if one of the first two dinosaurs is - * // removed from the data set, as a new dinosaur will now be the second - * // shortest. - * console.log(snapshot.key); - * }); - * ``` - * - * @param limit The maximum number of nodes to include in this query. - */ - limitToFirst(limit: number): firebase.database.Query; - /** - * Generates a new `Query` object limited to the last specific number of - * children. - * - * The `limitToLast()` method is used to set a maximum number of children to be - * synced for a given callback. If we set a limit of 100, we will initially only - * receive up to 100 `child_added` events. If we have fewer than 100 messages - * stored in our Database, a `child_added` event will fire for each message. - * However, if we have over 100 messages, we will only receive a `child_added` - * event for the last 100 ordered messages. As items change, we will receive - * `child_removed` events for each item that drops out of the active list so - * that the total number stays at 100. - * - * You can read more about `limitToLast()` in - * {@link - * https://firebase.google.com/docs/database/web/lists-of-data#filtering_data - * Filtering data}. - * - * @example - * ```javascript - * // Find the two heaviest dinosaurs. - * var ref = firebase.database().ref("dinosaurs"); - * ref.orderByChild("weight").limitToLast(2).on("child_added", function(snapshot) { - * // This callback will be triggered exactly two times, unless there are - * // fewer than two dinosaurs stored in the Database. It will also get fired - * // for every new, heavier dinosaur that gets added to the data set. - * console.log(snapshot.key); - * }); - * ``` - * - * @param limit The maximum number of nodes to include in this query. - */ - limitToLast(limit: number): firebase.database.Query; - /** - * Detaches a callback previously attached with `on()`. - * - * Detach a callback previously attached with `on()`. Note that if `on()` was - * called multiple times with the same eventType and callback, the callback - * will be called multiple times for each event, and `off()` must be called - * multiple times to remove the callback. Calling `off()` on a parent listener - * will not automatically remove listeners registered on child nodes, `off()` - * must also be called on any child listeners to remove the callback. - * - * If a callback is not specified, all callbacks for the specified eventType - * will be removed. Similarly, if no eventType is specified, all callbacks - * for the `Reference` will be removed. - * - * @example - * ```javascript - * var onValueChange = function(dataSnapshot) { ... }; - * ref.on('value', onValueChange); - * ref.child('meta-data').on('child_added', onChildAdded); - * // Sometime later... - * ref.off('value', onValueChange); - * - * // You must also call off() for any child listeners on ref - * // to cancel those callbacks - * ref.child('meta-data').off('child_added', onValueAdded); - * ``` - * - * @example - * ```javascript - * // Or you can save a line of code by using an inline function - * // and on()'s return value. - * var onValueChange = ref.on('value', function(dataSnapshot) { ... }); - * // Sometime later... - * ref.off('value', onValueChange); - * ``` - * - * @param eventType One of the following strings: "value", - * "child_added", "child_changed", "child_removed", or "child_moved." If - * omitted, all callbacks for the `Reference` will be removed. - * @param callback The callback function that was passed to `on()` or - * `undefined` to remove all callbacks. - * @param context The context that was passed to `on()`. - */ - off( - eventType?: EventType, - callback?: (a: firebase.database.DataSnapshot, b?: string | null) => any, - context?: Object | null - ): void; - - /** - * Gets the most up-to-date result for this query. - * - * @return A promise which resolves to the resulting DataSnapshot if - * a value is available, or rejects if the client is unable to return - * a value (e.g., if the server is unreachable and there is nothing - * cached). - */ - get(): Promise; - - /** - * Listens for data changes at a particular location. - * - * This is the primary way to read data from a Database. Your callback - * will be triggered for the initial data and again whenever the data changes. - * Use `off( )` to stop receiving updates. See - * {@link https://firebase.google.com/docs/database/web/retrieve-data - * Retrieve Data on the Web} - * for more details. - * - *

value event

- * - * This event will trigger once with the initial data stored at this location, - * and then trigger again each time the data changes. The `DataSnapshot` passed - * to the callback will be for the location at which `on()` was called. It - * won't trigger until the entire contents has been synchronized. If the - * location has no data, it will be triggered with an empty `DataSnapshot` - * (`val()` will return `null`). - * - *

child_added event

- * - * This event will be triggered once for each initial child at this location, - * and it will be triggered again every time a new child is added. The - * `DataSnapshot` passed into the callback will reflect the data for the - * relevant child. For ordering purposes, it is passed a second argument which - * is a string containing the key of the previous sibling child by sort order, - * or `null` if it is the first child. - * - *

child_removed event

- * - * This event will be triggered once every time a child is removed. The - * `DataSnapshot` passed into the callback will be the old data for the child - * that was removed. A child will get removed when either: - * - * - a client explicitly calls `remove()` on that child or one of its ancestors - * - a client calls `set(null)` on that child or one of its ancestors - * - that child has all of its children removed - * - there is a query in effect which now filters out the child (because it's - * sort order changed or the max limit was hit) - * - *

child_changed event

- * - * This event will be triggered when the data stored in a child (or any of its - * descendants) changes. Note that a single `child_changed` event may represent - * multiple changes to the child. The `DataSnapshot` passed to the callback will - * contain the new child contents. For ordering purposes, the callback is also - * passed a second argument which is a string containing the key of the previous - * sibling child by sort order, or `null` if it is the first child. - * - *

child_moved event

- * - * This event will be triggered when a child's sort order changes such that its - * position relative to its siblings changes. The `DataSnapshot` passed to the - * callback will be for the data of the child that has moved. It is also passed - * a second argument which is a string containing the key of the previous - * sibling child by sort order, or `null` if it is the first child. - * - * @example **Handle a new value:** - * ```javascript - * ref.on('value', function(dataSnapshot) { - * ... - * }); - * ``` - * - * @example **Handle a new child:** - * ```javascript - * ref.on('child_added', function(childSnapshot, prevChildKey) { - * ... - * }); - * ``` - * - * @example **Handle child removal:** - * ```javascript - * ref.on('child_removed', function(oldChildSnapshot) { - * ... - * }); - * ``` - * - * @example **Handle child data changes:** - * ```javascript - * ref.on('child_changed', function(childSnapshot, prevChildKey) { - * ... - * }); - * ``` - * - * @example **Handle child ordering changes:** - * ```javascript - * ref.on('child_moved', function(childSnapshot, prevChildKey) { - * ... - * }); - * ``` - * - * @param eventType One of the following strings: "value", - * "child_added", "child_changed", "child_removed", or "child_moved." - * @param callback A - * callback that fires when the specified event occurs. The callback will be - * passed a DataSnapshot. For ordering purposes, "child_added", - * "child_changed", and "child_moved" will also be passed a string containing - * the key of the previous child, by sort order, or `null` if it is the - * first child. - * @param cancelCallbackOrContext An optional - * callback that will be notified if your event subscription is ever canceled - * because your client does not have permission to read this data (or it had - * permission but has now lost it). This callback will be passed an `Error` - * object indicating why the failure occurred. - * @param context If provided, this object will be used as `this` - * when calling your callback(s). - * @return The provided - * callback function is returned unmodified. This is just for convenience if - * you want to pass an inline function to `on()` but store the callback - * function for later passing to `off()`. - */ - on( - eventType: EventType, - callback: (a: firebase.database.DataSnapshot, b?: string | null) => any, - cancelCallbackOrContext?: ((a: Error) => any) | Object | null, - context?: Object | null - ): (a: firebase.database.DataSnapshot | null, b?: string | null) => any; - - /** - * Listens for exactly one event of the specified event type, and then stops - * listening. - * - * This is equivalent to calling {@link firebase.database.Query.on `on()`}, and - * then calling {@link firebase.database.Query.off `off()`} inside the callback - * function. See {@link firebase.database.Query.on `on()`} for details on the - * event types. - * - * @example - * ```javascript - * // Basic usage of .once() to read the data located at ref. - * ref.once('value') - * .then(function(dataSnapshot) { - * // handle read data. - * }); - * ``` - * - * @param eventType One of the following strings: "value", - * "child_added", "child_changed", "child_removed", or "child_moved." - * @param successCallback A - * callback that fires when the specified event occurs. The callback will be - * passed a DataSnapshot. For ordering purposes, "child_added", - * "child_changed", and "child_moved" will also be passed a string containing - * the key of the previous child by sort order, or `null` if it is the - * first child. - * @param failureCallbackOrContext An optional - * callback that will be notified if your client does not have permission to - * read the data. This callback will be passed an `Error` object indicating - * why the failure occurred. - * @param context If provided, this object will be used as `this` - * when calling your callback(s). - */ - once( - eventType: EventType, - successCallback?: ( - a: firebase.database.DataSnapshot, - b?: string | null - ) => any, - failureCallbackOrContext?: ((a: Error) => void) | Object | null, - context?: Object | null - ): Promise; - /** - * Generates a new `Query` object ordered by the specified child key. - * - * Queries can only order by one key at a time. Calling `orderByChild()` - * multiple times on the same query is an error. - * - * Firebase queries allow you to order your data by any child key on the fly. - * However, if you know in advance what your indexes will be, you can define - * them via the .indexOn rule in your Security Rules for better performance. See - * the {@link https://firebase.google.com/docs/database/security/indexing-data - * .indexOn} rule for more information. - * - * You can read more about `orderByChild()` in - * {@link - * https://firebase.google.com/docs/database/web/lists-of-data#sort_data - * Sort data}. - * - * @example - * ```javascript - * var ref = firebase.database().ref("dinosaurs"); - * ref.orderByChild("height").on("child_added", function(snapshot) { - * console.log(snapshot.key + " was " + snapshot.val().height + " m tall"); - * }); - * ``` - */ - orderByChild(path: string): firebase.database.Query; - /** - * Generates a new `Query` object ordered by key. - * - * Sorts the results of a query by their (ascending) key values. - * - * You can read more about `orderByKey()` in - * {@link - * https://firebase.google.com/docs/database/web/lists-of-data#sort_data - * Sort data}. - * - * @example - * ```javascript - * var ref = firebase.database().ref("dinosaurs"); - * ref.orderByKey().on("child_added", function(snapshot) { - * console.log(snapshot.key); - * }); - * ``` - */ - orderByKey(): firebase.database.Query; - /** - * Generates a new `Query` object ordered by priority. - * - * Applications need not use priority but can order collections by - * ordinary properties (see - * {@link - * https://firebase.google.com/docs/database/web/lists-of-data#sort_data - * Sort data} for alternatives to priority. - */ - orderByPriority(): firebase.database.Query; - /** - * Generates a new `Query` object ordered by value. - * - * If the children of a query are all scalar values (string, number, or - * boolean), you can order the results by their (ascending) values. - * - * You can read more about `orderByValue()` in - * {@link - * https://firebase.google.com/docs/database/web/lists-of-data#sort_data - * Sort data}. - * - * @example - * ```javascript - * var scoresRef = firebase.database().ref("scores"); - * scoresRef.orderByValue().limitToLast(3).on("value", function(snapshot) { - * snapshot.forEach(function(data) { - * console.log("The " + data.key + " score is " + data.val()); - * }); - * }); - * ``` - */ - orderByValue(): firebase.database.Query; - /** - * Returns a `Reference` to the `Query`'s location. - */ - ref: firebase.database.Reference; - /** - * Creates a `Query` with the specified starting point. - * - * Using `startAt()`, `startAfter()`, `endBefore()`, `endAt()` and `equalTo()` - * allows you to choose arbitrary starting and ending points for your queries. - * - * The starting point is inclusive, so children with exactly the specified value - * will be included in the query. The optional key argument can be used to - * further limit the range of the query. If it is specified, then children that - * have exactly the specified value must also have a key name greater than or - * equal to the specified key. - * - * You can read more about `startAt()` in - * {@link - * https://firebase.google.com/docs/database/web/lists-of-data#filtering_data - * Filtering data}. - * - * @example - * ```javascript - * // Find all dinosaurs that are at least three meters tall. - * var ref = firebase.database().ref("dinosaurs"); - * ref.orderByChild("height").startAt(3).on("child_added", function(snapshot) { - * console.log(snapshot.key) - * }); - * ``` - * - * @param value The value to start at. The argument - * type depends on which `orderBy*()` function was used in this query. - * Specify a value that matches the `orderBy*()` type. When used in - * combination with `orderByKey()`, the value must be a string. - * @param key The child key to start at. This argument is only allowed - * if ordering by child, value, or priority. - */ - startAt( - value: number | string | boolean | null, - key?: string - ): firebase.database.Query; - /** - * Creates a `Query` with the specified starting point (exclusive). - * - * Using `startAt()`, `startAfter()`, `endBefore()`, `endAt()` and `equalTo()` - * allows you to choose arbitrary starting and ending points for your queries. - * - * The starting point is exclusive. If only a value is provided, children - * with a value greater than the specified value will be included in the query. - * If a key is specified, then children must have a value greater than or equal - * to the specified value and a a key name greater than the specified key. - * - * @example - * ```javascript - * // Find all dinosaurs that are more than three meters tall. - * var ref = firebase.database().ref("dinosaurs"); - * ref.orderByChild("height").startAfter(3).on("child_added", function(snapshot) { - * console.log(snapshot.key) - * }); - * ``` - * - * @param value The value to start after. The argument - * type depends on which `orderBy*()` function was used in this query. - * Specify a value that matches the `orderBy*()` type. When used in - * combination with `orderByKey()`, the value must be a string. - * @param key The child key to start after. This argument is only allowed - * if ordering by child, value, or priority. - */ - startAfter( - value: number | string | boolean | null, - key?: string - ): firebase.database.Query; - /** - * Returns a JSON-serializable representation of this object. - * - * @return A JSON-serializable representation of this object. - */ - toJSON(): Object; - /** - * Gets the absolute URL for this location. - * - * The `toString()` method returns a URL that is ready to be put into a browser, - * curl command, or a `firebase.database().refFromURL()` call. Since all of - * those expect the URL to be url-encoded, `toString()` returns an encoded URL. - * - * Append '.json' to the returned URL when typed into a browser to download - * JSON-formatted data. If the location is secured (that is, not publicly - * readable), you will get a permission-denied error. - * - * @example - * ```javascript - * // Calling toString() on a root Firebase reference returns the URL where its - * // data is stored within the Database: - * var rootRef = firebase.database().ref(); - * var rootUrl = rootRef.toString(); - * // rootUrl === "https://sample-app.firebaseio.com/". - * - * // Calling toString() at a deeper Firebase reference returns the URL of that - * // deep path within the Database: - * var adaRef = rootRef.child('users/ada'); - * var adaURL = adaRef.toString(); - * // adaURL === "https://sample-app.firebaseio.com/users/ada". - * ``` - * - * @return The absolute URL for this location. - */ - toString(): string; - } - - /** - * A `Reference` represents a specific location in your Database and can be used - * for reading or writing data to that Database location. - * - * You can reference the root or child location in your Database by calling - * `firebase.database().ref()` or `firebase.database().ref("child/path")`. - * - * Writing is done with the `set()` method and reading can be done with the - * `on()` method. See - * {@link - * https://firebase.google.com/docs/database/web/read-and-write - * Read and Write Data on the Web} - */ - interface Reference extends firebase.database.Query { - /** - * Gets a `Reference` for the location at the specified relative path. - * - * The relative path can either be a simple child name (for example, "ada") or - * a deeper slash-separated path (for example, "ada/name/first"). - * - * @example - * ```javascript - * var usersRef = firebase.database().ref('users'); - * var adaRef = usersRef.child('ada'); - * var adaFirstNameRef = adaRef.child('name/first'); - * var path = adaFirstNameRef.toString(); - * // path is now 'https://sample-app.firebaseio.com/users/ada/name/first' - * ``` - * - * @param path A relative path from this location to the desired child - * location. - * @return The specified child location. - */ - child(path: string): firebase.database.Reference; - /** - * The last part of the `Reference`'s path. - * - * For example, `"ada"` is the key for - * `https://.firebaseio.com/users/ada`. - * - * The key of a root `Reference` is `null`. - * - * @example - * ```javascript - * // The key of a root reference is null - * var rootRef = firebase.database().ref(); - * var key = rootRef.key; // key === null - * ``` - * - * @example - * ```javascript - * // The key of any non-root reference is the last token in the path - * var adaRef = firebase.database().ref("users/ada"); - * var key = adaRef.key; // key === "ada" - * key = adaRef.child("name/last").key; // key === "last" - * ``` - */ - key: string | null; - /** - * Returns an `OnDisconnect` object - see - * {@link - * https://firebase.google.com/docs/database/web/offline-capabilities - * Enabling Offline Capabilities in JavaScript} for more information on how - * to use it. - */ - onDisconnect(): firebase.database.OnDisconnect; - /** - * The parent location of a `Reference`. - * - * The parent of a root `Reference` is `null`. - * - * @example - * ```javascript - * // The parent of a root reference is null - * var rootRef = firebase.database().ref(); - * parent = rootRef.parent; // parent === null - * ``` - * - * @example - * ```javascript - * // The parent of any non-root reference is the parent location - * var usersRef = firebase.database().ref("users"); - * var adaRef = firebase.database().ref("users/ada"); - * // usersRef and adaRef.parent represent the same location - * ``` - */ - parent: firebase.database.Reference | null; - /** - * Generates a new child location using a unique key and returns its - * `Reference`. - * - * This is the most common pattern for adding data to a collection of items. - * - * If you provide a value to `push()`, the value is written to the - * generated location. If you don't pass a value, nothing is written to the - * database and the child remains empty (but you can use the `Reference` - * elsewhere). - * - * The unique keys generated by `push()` are ordered by the current time, so the - * resulting list of items is chronologically sorted. The keys are also - * designed to be unguessable (they contain 72 random bits of entropy). - * - * - * See - * {@link - * https://firebase.google.com/docs/database/web/lists-of-data#append_to_a_list_of_data - * Append to a list of data} - *
See - * {@link - * https://firebase.googleblog.com/2015/02/the-2120-ways-to-ensure-unique_68.html - * The 2^120 Ways to Ensure Unique Identifiers} - * - * @example - * ```javascript - * var messageListRef = firebase.database().ref('message_list'); - * var newMessageRef = messageListRef.push(); - * newMessageRef.set({ - * 'user_id': 'ada', - * 'text': 'The Analytical Engine weaves algebraical patterns just as the Jacquard loom weaves flowers and leaves.' - * }); - * // We've appended a new message to the message_list location. - * var path = newMessageRef.toString(); - * // path will be something like - * // 'https://sample-app.firebaseio.com/message_list/-IKo28nwJLH0Nc5XeFmj' - * ``` - * - * @param value Optional value to be written at the generated location. - * @param onComplete Callback called when write to server is - * complete. - * @return Combined `Promise` and `Reference`; resolves when write is complete, but can be - * used immediately as the `Reference` to the child location. - */ - push( - value?: any, - onComplete?: (a: Error | null) => any - ): firebase.database.ThenableReference; - /** - * Removes the data at this Database location. - * - * Any data at child locations will also be deleted. - * - * The effect of the remove will be visible immediately and the corresponding - * event 'value' will be triggered. Synchronization of the remove to the - * Firebase servers will also be started, and the returned Promise will resolve - * when complete. If provided, the onComplete callback will be called - * asynchronously after synchronization has finished. - * - * @example - * ```javascript - * var adaRef = firebase.database().ref('users/ada'); - * adaRef.remove() - * .then(function() { - * console.log("Remove succeeded.") - * }) - * .catch(function(error) { - * console.log("Remove failed: " + error.message) - * }); - * ``` - * - * @param onComplete Callback called when write to server is - * complete. - * @return Resolves when remove on server is complete. - */ - remove(onComplete?: (a: Error | null) => any): Promise; - /** - * The root `Reference` of the Database. - * - * @example - * ```javascript - * // The root of a root reference is itself - * var rootRef = firebase.database().ref(); - * // rootRef and rootRef.root represent the same location - * ``` - * - * @example - * ```javascript - * // The root of any non-root reference is the root location - * var adaRef = firebase.database().ref("users/ada"); - * // rootRef and adaRef.root represent the same location - * ``` - */ - root: firebase.database.Reference; - /** - * Writes data to this Database location. - * - * This will overwrite any data at this location and all child locations. - * - * The effect of the write will be visible immediately, and the corresponding - * events ("value", "child_added", etc.) will be triggered. Synchronization of - * the data to the Firebase servers will also be started, and the returned - * Promise will resolve when complete. If provided, the `onComplete` callback - * will be called asynchronously after synchronization has finished. - * - * Passing `null` for the new value is equivalent to calling `remove()`; namely, - * all data at this location and all child locations will be deleted. - * - * `set()` will remove any priority stored at this location, so if priority is - * meant to be preserved, you need to use `setWithPriority()` instead. - * - * Note that modifying data with `set()` will cancel any pending transactions - * at that location, so extreme care should be taken if mixing `set()` and - * `transaction()` to modify the same data. - * - * A single `set()` will generate a single "value" event at the location where - * the `set()` was performed. - * - * @example - * ```javascript - * var adaNameRef = firebase.database().ref('users/ada/name'); - * adaNameRef.child('first').set('Ada'); - * adaNameRef.child('last').set('Lovelace'); - * // We've written 'Ada' to the Database location storing Ada's first name, - * // and 'Lovelace' to the location storing her last name. - * ``` - * - * @example - * ```javascript - * adaNameRef.set({ first: 'Ada', last: 'Lovelace' }); - * // Exact same effect as the previous example, except we've written - * // Ada's first and last name simultaneously. - * ``` - * - * @example - * ```javascript - * adaNameRef.set({ first: 'Ada', last: 'Lovelace' }) - * .then(function() { - * console.log('Synchronization succeeded'); - * }) - * .catch(function(error) { - * console.log('Synchronization failed'); - * }); - * // Same as the previous example, except we will also log a message - * // when the data has finished synchronizing. - * ``` - * - * @param value The value to be written (string, number, boolean, object, - * array, or null). - * @param onComplete Callback called when write to server is - * complete. - * @return Resolves when write to server is complete. - */ - set(value: any, onComplete?: (a: Error | null) => any): Promise; - /** - * Sets a priority for the data at this Database location. - * - * Applications need not use priority but can order collections by - * ordinary properties (see - * {@link - * https://firebase.google.com/docs/database/web/lists-of-data#sorting_and_filtering_data - * Sorting and filtering data}). - */ - setPriority( - priority: string | number | null, - onComplete: (a: Error | null) => any - ): Promise; - /** - * Writes data the Database location. Like `set()` but also specifies the - * priority for that data. - * - * Applications need not use priority but can order collections by - * ordinary properties (see - * {@link - * https://firebase.google.com/docs/database/web/lists-of-data#sorting_and_filtering_data - * Sorting and filtering data}). - */ - setWithPriority( - newVal: any, - newPriority: string | number | null, - onComplete?: (a: Error | null) => any - ): Promise; - /** - * Atomically modifies the data at this location. - * - * Atomically modify the data at this location. Unlike a normal `set()`, which - * just overwrites the data regardless of its previous value, `transaction()` is - * used to modify the existing value to a new value, ensuring there are no - * conflicts with other clients writing to the same location at the same time. - * - * To accomplish this, you pass `transaction()` an update function which is used - * to transform the current value into a new value. If another client writes to - * the location before your new value is successfully written, your update - * function will be called again with the new current value, and the write will - * be retried. This will happen repeatedly until your write succeeds without - * conflict or you abort the transaction by not returning a value from your - * update function. - * - * Note: Modifying data with `set()` will cancel any pending transactions at - * that location, so extreme care should be taken if mixing `set()` and - * `transaction()` to update the same data. - * - * Note: When using transactions with Security and Firebase Rules in place, be - * aware that a client needs `.read` access in addition to `.write` access in - * order to perform a transaction. This is because the client-side nature of - * transactions requires the client to read the data in order to transactionally - * update it. - * - * @example - * ```javascript - * // Increment Ada's rank by 1. - * var adaRankRef = firebase.database().ref('users/ada/rank'); - * adaRankRef.transaction(function(currentRank) { - * // If users/ada/rank has never been set, currentRank will be `null`. - * return currentRank + 1; - * }); - * ``` - * - * @example - * ```javascript - * // Try to create a user for ada, but only if the user id 'ada' isn't - * // already taken - * var adaRef = firebase.database().ref('users/ada'); - * adaRef.transaction(function(currentData) { - * if (currentData === null) { - * return { name: { first: 'Ada', last: 'Lovelace' } }; - * } else { - * console.log('User ada already exists.'); - * return; // Abort the transaction. - * } - * }, function(error, committed, snapshot) { - * if (error) { - * console.log('Transaction failed abnormally!', error); - * } else if (!committed) { - * console.log('We aborted the transaction (because ada already exists).'); - * } else { - * console.log('User ada added!'); - * } - * console.log("Ada's data: ", snapshot.val()); - * }); - * ``` - * - * @param transactionUpdate A developer-supplied function which - * will be passed the current data stored at this location (as a JavaScript - * object). The function should return the new value it would like written (as - * a JavaScript object). If `undefined` is returned (i.e. you return with no - * arguments) the transaction will be aborted and the data at this location - * will not be modified. - * @param onComplete A callback - * function that will be called when the transaction completes. The callback - * is passed three arguments: a possibly-null `Error`, a `boolean` indicating - * whether the transaction was committed, and a `DataSnapshot` indicating the - * final result. If the transaction failed abnormally, the first argument will - * be an `Error` object indicating the failure cause. If the transaction - * finished normally, but no data was committed because no data was returned - * from `transactionUpdate`, then second argument will be false. If the - * transaction completed and committed data to Firebase, the second argument - * will be true. Regardless, the third argument will be a `DataSnapshot` - * containing the resulting data in this location. - * @param applyLocally By default, events are raised each time the - * transaction update function runs. So if it is run multiple times, you may - * see intermediate states. You can set this to false to suppress these - * intermediate states and instead wait until the transaction has completed - * before events are raised. - * @return Returns a Promise that can optionally be used instead of the onComplete - * callback to handle success and failure. - */ - transaction( - transactionUpdate: (a: any) => any, - onComplete?: ( - a: Error | null, - b: boolean, - c: firebase.database.DataSnapshot | null - ) => any, - applyLocally?: boolean - ): Promise; - /** - * Writes multiple values to the Database at once. - * - * The `values` argument contains multiple property-value pairs that will be - * written to the Database together. Each child property can either be a simple - * property (for example, "name") or a relative path (for example, - * "name/first") from the current location to the data to update. - * - * As opposed to the `set()` method, `update()` can be use to selectively update - * only the referenced properties at the current location (instead of replacing - * all the child properties at the current location). - * - * The effect of the write will be visible immediately, and the corresponding - * events ('value', 'child_added', etc.) will be triggered. Synchronization of - * the data to the Firebase servers will also be started, and the returned - * Promise will resolve when complete. If provided, the `onComplete` callback - * will be called asynchronously after synchronization has finished. - * - * A single `update()` will generate a single "value" event at the location - * where the `update()` was performed, regardless of how many children were - * modified. - * - * Note that modifying data with `update()` will cancel any pending - * transactions at that location, so extreme care should be taken if mixing - * `update()` and `transaction()` to modify the same data. - * - * Passing `null` to `update()` will remove the data at this location. - * - * See - * {@link - * https://firebase.googleblog.com/2015/09/introducing-multi-location-updates-and_86.html - * Introducing multi-location updates and more}. - * - * @example - * ```javascript - * var adaNameRef = firebase.database().ref('users/ada/name'); - * // Modify the 'first' and 'last' properties, but leave other data at - * // adaNameRef unchanged. - * adaNameRef.update({ first: 'Ada', last: 'Lovelace' }); - * ``` - * - * @param values Object containing multiple values. - * @param onComplete Callback called when write to server is - * complete. - * @return Resolves when update on server is complete. - */ - update(values: Object, onComplete?: (a: Error | null) => any): Promise; - } - - interface ThenableReference - extends firebase.database.Reference, - Pick, 'then' | 'catch'> {} - - /** - * Logs debugging information to the console. - * - * @example - * ```javascript - * // Enable logging - * firebase.database.enableLogging(true); - * ``` - * - * @example - * ```javascript - * // Disable logging - * firebase.database.enableLogging(false); - * ``` - * - * @example - * ```javascript - * // Enable logging across page refreshes - * firebase.database.enableLogging(true, true); - * ``` - * - * @example - * ```javascript - * // Provide custom logger which prefixes log statements with "[FIREBASE]" - * firebase.database.enableLogging(function(message) { - * console.log("[FIREBASE]", message); - * }); - * ``` - * - * @param logger Enables logging if `true`; - * disables logging if `false`. You can also provide a custom logger function - * to control how things get logged. - * @param persistent Remembers the logging state between page - * refreshes if `true`. - */ - function enableLogging( - logger?: boolean | ((a: string) => any), - persistent?: boolean - ): any; - - export type EmulatorMockTokenOptions = firebase.EmulatorMockTokenOptions; -} - -declare namespace firebase.database.ServerValue { - /** - * A placeholder value for auto-populating the current timestamp (time - * since the Unix epoch, in milliseconds) as determined by the Firebase - * servers. - * - * @example - * ```javascript - * var sessionsRef = firebase.database().ref("sessions"); - * sessionsRef.push({ - * startedAt: firebase.database.ServerValue.TIMESTAMP - * }); - * ``` - */ - var TIMESTAMP: Object; - - /** - * Returns a placeholder value that can be used to atomically increment the - * current database value by the provided delta. - * - * @param delta the amount to modify the current value atomically. - * @return a placeholder value for modifying data atomically server-side. - */ - function increment(delta: number): Object; -} - -/** - * @webonly - */ -declare namespace firebase.messaging { - /** - * The Firebase Messaging service interface. - * - * Do not call this constructor directly. Instead, use - * {@link firebase.messaging `firebase.messaging()`}. - * - * See {@link https://firebase.google.com/docs/cloud-messaging/js/client - * Set Up a JavaScript Firebase Cloud Messaging Client App} for a full guide on how to use the - * Firebase Messaging service. - * - */ - interface Messaging { - /** - * Deletes the registration token associated with this messaging instance and unsubscribes the - * messaging instance from the push subscription. - * - * @return The promise resolves when the token has been successfully deleted. - */ - deleteToken(): Promise; - - /** - * To forcibly stop a registration token from being used, delete it by calling this method. - * - * @param token The token to delete. - * @return The promise resolves when the token has been successfully deleted. - * - * @deprecated Use deleteToken() instead. - */ - deleteToken(token: string): Promise; - - /** - * Subscribes the messaging instance to push notifications. Returns an FCM registration token - * that can be used to send push messages to that messaging instance. - * - * If a notification permission isn't already granted, this method asks the user for permission. - * The returned promise rejects if the user does not allow the app to show notifications. - * - * @param options.vapidKey The public server key provided to push services. It is used to - * authenticate the push subscribers to receive push messages only from sending servers that - * hold the corresponding private key. If it is not provided, a default VAPID key is used. Note - * that some push services (Chrome Push Service) require a non-default VAPID key. Therefore, it - * is recommended to generate and import a VAPID key for your project with - * {@link https://firebase.google.com/docs/cloud-messaging/js/client#configure_web_credentials_with_fcm Configure Web Credentials with FCM}. - * See - * {@link https://developers.google.com/web/fundamentals/push-notifications/web-push-protocol The Web Push Protocol} - * for details on web push services.} - * - * @param options.serviceWorkerRegistration The service worker registration for receiving push - * messaging. If the registration is not provided explicitly, you need to have a - * `firebase-messaging-sw.js` at your root location. See - * {@link https://firebase.google.com/docs/cloud-messaging/js/client#retrieve-the-current-registration-token Retrieve the current registration token} - * for more details. - * - * @return The promise resolves with an FCM registration token. - * - */ - getToken(options?: { - vapidKey?: string; - serviceWorkerRegistration?: ServiceWorkerRegistration; - }): Promise; - - /** - * When a push message is received and the user is currently on a page for your origin, the - * message is passed to the page and an `onMessage()` event is dispatched with the payload of - * the push message. - * - * @param - * nextOrObserver This function, or observer object with `next` defined, - * is called when a message is received and the user is currently viewing your page. - * @return To stop listening for messages execute this returned function. - */ - onMessage( - nextOrObserver: firebase.NextFn | firebase.Observer, - error?: firebase.ErrorFn, - completed?: firebase.CompleteFn - ): firebase.Unsubscribe; - - /** - * Called when a message is received while the app is in the background. An app is considered to - * be in the background if no active window is displayed. - * - * @param - * nextOrObserver This function, or observer object with `next` defined, - * is called when a message is received and the app is currently in the background. - * - * @return To stop listening for messages execute this returned function - */ - onBackgroundMessage( - nextOrObserver: - | firebase.NextFn - | firebase.Observer, - error?: firebase.ErrorFn, - completed?: firebase.CompleteFn - ): firebase.Unsubscribe; - - /** - * You should listen for token refreshes so your web app knows when FCM has invalidated your - * existing token and you need to call `getToken()` to get a new token. - * - * @param - * nextOrObserver This function, or observer object with `next` defined, - * is called when a token refresh has occurred. - * @return To stop listening for token refresh events execute this returned function. - * - * @deprecated There is no need to handle token rotation. - */ - onTokenRefresh( - nextOrObserver: firebase.NextFn | firebase.Observer, - error?: firebase.ErrorFn, - completed?: firebase.CompleteFn - ): firebase.Unsubscribe; - - /** - * Notification permissions are required to send a user push messages. Calling this method - * displays the permission dialog to the user and resolves if the permission is granted. It is - * not necessary to call this method, as `getToken()` will do this automatically if required. - * - * @return The promise resolves if permission is granted. Otherwise, the promise is rejected - * with an error. - * - * @deprecated Use - * {@link https://developer.mozilla.org/en-US/docs/Web/API/Notification/requestPermission Notification.requestPermission()} - * instead. - */ - requestPermission(): Promise; - - /** - * FCM directs push messages to your web page's `onMessage()` callback if the user currently has - * it open. Otherwise, it calls your callback passed into `setBackgroundMessageHandler()`. - * - * Your callback should return a promise that, once resolved, has shown a notification. - * - * @param callback The function to handle the push message. - * - * @deprecated Use onBackgroundMessage(nextOrObserver: firebase.NextFn | - * firebase.Observer, error?: firebase.ErrorFn, completed?: firebase.CompleteFn): - * firebase.Unsubscribe. - */ - setBackgroundMessageHandler( - callback: (payload: any) => Promise | void - ): void; - - /** - * To use your own service worker for receiving push messages, you can pass in your service - * worker registration in this method. - * - * @param registration The service worker registration you wish to use for push messaging. - * - * @deprecated Use getToken(options?: {vapidKey?: string; serviceWorkerRegistration?: - * ServiceWorkerRegistration;}: Promise;. - */ - - useServiceWorker(registration: ServiceWorkerRegistration): void; - - /** - * @deprecated Use getToken(options?: {vapidKey?: string; serviceWorkerRegistration?: - * ServiceWorkerRegistration;}): Promise;. - */ - usePublicVapidKey(b64PublicKey: string): void; - } - - /** - * Message payload that contains the notification payload that is represented with - * {@link firebase.messaging.NotificationPayload} and the data payload that contains an arbitrary - * number of key-value pairs sent by developers through the - * {@link https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages#notification Send API} - */ - export interface MessagePayload { - /** - * See {@link firebase.messaging.NotificationPayload}. - */ - notification?: NotificationPayload; - - /** - * Arbitrary key/value pairs. - */ - data?: { [key: string]: string }; - - /** - * See {@link firebase.messaging.FcmOptions}. - */ - fcmOptions?: FcmOptions; - - /** - * The sender of this message. - */ - from: string; - - /** - * The collapse key of this message. See - * {@link https://firebase.google.com/docs/cloud-messaging/concept-options#collapsible_and_non-collapsible_messages - * Collapsible and non-collapsible messages}. - */ - collapseKey: string; - } - - /** - * Options for features provided by the FCM SDK for Web. See - * {@link https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages#webpushfcmoptions - * WebpushFcmOptions}. - */ - export interface FcmOptions { - /** - * The link to open when the user clicks on the notification. For all URL values, HTTPS is - * required. For example, by setting this value to your app's URL, a notification click event - * will put your app in focus for the user. - */ - link?: string; - - /** - * Label associated with the message's analytics data. See - * {@link https://firebase.google.com/docs/cloud-messaging/understand-delivery#adding-analytics-labels-to-messages - * Adding analytics labels}. - */ - analyticsLabel?: string; - } - - /** - * Parameters that define how a push notification is displayed to users. - */ - export interface NotificationPayload { - /** - * The title of a notification. - */ - title?: string; - - /** - * The body of a notification. - */ - body?: string; - - /** - * The URL of the image that is shown with the notification. See - * {@link https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages#notification - * `notification.image`} for supported image format. - */ - image?: string; - } - - function isSupported(): boolean; -} - -declare namespace firebase.storage { - /** - * The full set of object metadata, including read-only properties. - */ - interface FullMetadata extends firebase.storage.UploadMetadata { - /** - * The bucket this object is contained in. - */ - bucket: string; - /** - * @deprecated - * Use Reference.getDownloadURL instead. This property will be removed in a - * future release. - */ - downloadURLs: string[]; - /** - * The full path of this object. - */ - fullPath: string; - /** - * The object's generation. - * @see {@link https://cloud.google.com/storage/docs/generations-preconditions} - */ - generation: string; - /** - * The object's metageneration. - * @see {@link https://cloud.google.com/storage/docs/generations-preconditions} - */ - metageneration: string; - /** - * The short name of this object, which is the last component of the full path. - * For example, if fullPath is 'full/path/image.png', name is 'image.png'. - */ - name: string; - /** - * The size of this object, in bytes. - */ - size: number; - /** - * A date string representing when this object was created. - */ - timeCreated: string; - /** - * A date string representing when this object was last updated. - */ - updated: string; - } - - /** - * Represents a reference to a Google Cloud Storage object. Developers can - * upload, download, and delete objects, as well as get/set object metadata. - */ - interface Reference { - /** - * The name of the bucket containing this reference's object. - */ - bucket: string; - /** - * Returns a reference to a relative path from this reference. - * @param path The relative path from this reference. - * Leading, trailing, and consecutive slashes are removed. - * @return The reference to the given path. - */ - child(path: string): firebase.storage.Reference; - /** - * Deletes the object at this reference's location. - * @return A Promise that resolves if the deletion - * succeeded and rejects if it failed, including if the object didn't exist. - */ - delete(): Promise; - /** - * The full path of this object. - */ - fullPath: string; - /** - * Fetches a long lived download URL for this object. - * @return A Promise that resolves with the download - * URL or rejects if the fetch failed, including if the object did not - * exist. - */ - getDownloadURL(): Promise; - /** - * Fetches metadata for the object at this location, if one exists. - * @return A Promise that - * resolves with the metadata, or rejects if the fetch failed, including if - * the object did not exist. - */ - getMetadata(): Promise; - /** - * The short name of this object, which is the last component of the full path. - * For example, if fullPath is 'full/path/image.png', name is 'image.png'. - */ - name: string; - /** - * A reference pointing to the parent location of this reference, or null if - * this reference is the root. - */ - parent: firebase.storage.Reference | null; - /** - * Uploads data to this reference's location. - * @param data The data to upload. - * @param metadata Metadata for the newly - * uploaded object. - * @return An object that can be used to monitor - * and manage the upload. - */ - put( - data: Blob | Uint8Array | ArrayBuffer, - metadata?: firebase.storage.UploadMetadata - ): firebase.storage.UploadTask; - /** - * Uploads string data to this reference's location. - * @param data The string to upload. - * @param format The format of the string to - * upload. - * @param metadata Metadata for the newly - * uploaded object. - * @throws If the format is not an allowed format, or if the given string - * doesn't conform to the specified format. - */ - putString( - data: string, - format?: firebase.storage.StringFormat, - metadata?: firebase.storage.UploadMetadata - ): firebase.storage.UploadTask; - /** - * A reference to the root of this reference's bucket. - */ - root: firebase.storage.Reference; - /** - * The storage service associated with this reference. - */ - storage: firebase.storage.Storage; - /** - * Returns a gs:// URL for this object in the form - * `gs://///` - * @return The gs:// URL. - */ - toString(): string; - /** - * Updates the metadata for the object at this location, if one exists. - * @param metadata The new metadata. - * Setting a property to 'null' removes it on the server, while leaving - * a property as 'undefined' has no effect. - * @return A Promise that - * resolves with the full updated metadata or rejects if the updated failed, - * including if the object did not exist. - */ - updateMetadata(metadata: firebase.storage.SettableMetadata): Promise; - /** - * List all items (files) and prefixes (folders) under this storage reference. - * - * This is a helper method for calling `list()` repeatedly until there are - * no more results. The default pagination size is 1000. - * - * Note: The results may not be consistent if objects are changed while this - * operation is running. - * - * Warning: `listAll` may potentially consume too many resources if there are - * too many results. - * - * @return A Promise that resolves with all the items and prefixes under - * the current storage reference. `prefixes` contains references to - * sub-directories and `items` contains references to objects in this - * folder. `nextPageToken` is never returned. - */ - listAll(): Promise; - /** - * List items (files) and prefixes (folders) under this storage reference. - * - * List API is only available for Firebase Rules Version 2. - * - * GCS is a key-blob store. Firebase Storage imposes the semantic of '/' - * delimited folder structure. - * Refer to GCS's List API if you want to learn more. - * - * To adhere to Firebase Rules's Semantics, Firebase Storage does not - * support objects whose paths end with "/" or contain two consecutive - * "/"s. Firebase Storage List API will filter these unsupported objects. - * `list()` may fail if there are too many unsupported objects in the bucket. - * - * @param options See `ListOptions` for details. - * @return A Promise that resolves with the items and prefixes. - * `prefixes` contains references to sub-folders and `items` - * contains references to objects in this folder. `nextPageToken` - * can be used to get the rest of the results. - */ - list(options?: ListOptions): Promise; - } - - /** - * Result returned by list(). - */ - interface ListResult { - /** - * References to prefixes (sub-folders). You can call list() on them to - * get its contents. - * - * Folders are implicit based on '/' in the object paths. - * For example, if a bucket has two objects '/a/b/1' and '/a/b/2', list('/a') - * will return '/a/b' as a prefix. - */ - prefixes: Reference[]; - /** - * Objects in this directory. - * You can call getMetadata() and getDownloadUrl() on them. - */ - items: Reference[]; - /** - * If set, there might be more results for this list. Use this token to resume the list. - */ - nextPageToken: string | null; - } - - /** - * The options `list()` accepts. - */ - interface ListOptions { - /** - * If set, limits the total number of `prefixes` and `items` to return. - * The default and maximum maxResults is 1000. - */ - maxResults?: number | null; - /** - * The `nextPageToken` from a previous call to `list()`. If provided, - * listing is resumed from the previous position. - */ - pageToken?: string | null; - } - - /** - * Object metadata that can be set at any time. - */ - interface SettableMetadata { - /** - * Served as the 'Cache-Control' header on object download. - */ - cacheControl?: string | null; - contentDisposition?: string | null; - /** - * Served as the 'Content-Encoding' header on object download. - */ - contentEncoding?: string | null; - /** - * Served as the 'Content-Language' header on object download. - */ - contentLanguage?: string | null; - /** - * Served as the 'Content-Type' header on object download. - */ - contentType?: string | null; - /** - * Additional user-defined custom metadata. - */ - customMetadata?: { - [/* warning: coerced from ? */ key: string]: string; - } | null; - } - - /** - * The Firebase Storage service interface. - * - * Do not call this constructor directly. Instead, use - * {@link firebase.storage `firebase.storage()`}. - * - * See - * {@link - * https://firebase.google.com/docs/storage/web/start/ - * Get Started on Web} - * for a full guide on how to use the Firebase Storage service. - */ - interface Storage { - /** - * The {@link firebase.app.App app} associated with the `Storage` service - * instance. - * - * @example - * ```javascript - * var app = storage.app; - * ``` - */ - app: firebase.app.App; - /** - * The maximum time to retry operations other than uploads or downloads in - * milliseconds. - */ - maxOperationRetryTime: number; - /** - * The maximum time to retry uploads in milliseconds. - */ - maxUploadRetryTime: number; - /** - * Returns a reference for the given path in the default bucket. - * @param path A relative path to initialize the reference with, - * for example `path/to/image.jpg`. If not passed, the returned reference - * points to the bucket root. - * @return A reference for the given path. - */ - ref(path?: string): firebase.storage.Reference; - /** - * Returns a reference for the given absolute URL. - * @param url A URL in the form:
- * 1) a gs:// URL, for example `gs://bucket/files/image.png`
- * 2) a download URL taken from object metadata.
- * @see {@link firebase.storage.FullMetadata.downloadURLs} - * @return A reference for the given URL. - */ - refFromURL(url: string): firebase.storage.Reference; - /** - * @param time The new maximum operation retry time in milliseconds. - * @see {@link firebase.storage.Storage.maxOperationRetryTime} - */ - setMaxOperationRetryTime(time: number): any; - /** - * @param time The new maximum upload retry time in milliseconds. - * @see {@link firebase.storage.Storage.maxUploadRetryTime} - */ - setMaxUploadRetryTime(time: number): any; - /** - * Modify this `Storage` instance to communicate with the Cloud Storage emulator. - * - * @param host - The emulator host (ex: localhost) - * @param port - The emulator port (ex: 5001) - * @param options.mockUserToken the mock auth token to use for unit testing Security Rules - */ - useEmulator( - host: string, - port: number, - options?: { - mockUserToken?: EmulatorMockTokenOptions | string; - } - ): void; - } - - /** - * @enum {string} - * An enumeration of the possible string formats for upload. - */ - type StringFormat = string; - var StringFormat: { - /** - * Indicates the string should be interpreted as base64-encoded data. - * Padding characters (trailing '='s) are optional. - * Example: The string 'rWmO++E6t7/rlw==' becomes the byte sequence - * ad 69 8e fb e1 3a b7 bf eb 97 - */ - BASE64: StringFormat; - /** - * Indicates the string should be interpreted as base64url-encoded data. - * Padding characters (trailing '='s) are optional. - * Example: The string 'rWmO--E6t7_rlw==' becomes the byte sequence - * ad 69 8e fb e1 3a b7 bf eb 97 - */ - BASE64URL: StringFormat; - /** - * Indicates the string is a data URL, such as one obtained from - * canvas.toDataURL(). - * Example: the string 'data:application/octet-stream;base64,aaaa' - * becomes the byte sequence - * 69 a6 9a - * (the content-type "application/octet-stream" is also applied, but can - * be overridden in the metadata object). - */ - DATA_URL: StringFormat; - /** - * Indicates the string should be interpreted "raw", that is, as normal text. - * The string will be interpreted as UTF-16, then uploaded as a UTF-8 byte - * sequence. - * Example: The string 'Hello! \ud83d\ude0a' becomes the byte sequence - * 48 65 6c 6c 6f 21 20 f0 9f 98 8a - */ - RAW: StringFormat; - }; - - /** - * An event that is triggered on a task. - * @enum {string} - * @see {@link firebase.storage.UploadTask.on} - */ - type TaskEvent = string; - var TaskEvent: { - /** - * For this event, - *
    - *
  • The `next` function is triggered on progress updates and when the - * task is paused/resumed with a - * {@link firebase.storage.UploadTaskSnapshot} as the first - * argument.
  • - *
  • The `error` function is triggered if the upload is canceled or fails - * for another reason.
  • - *
  • The `complete` function is triggered if the upload completes - * successfully.
  • - *
- */ - STATE_CHANGED: TaskEvent; - }; - - /** - * Represents the current state of a running upload. - * @enum {string} - */ - type TaskState = string; - var TaskState: { - CANCELED: TaskState; - ERROR: TaskState; - PAUSED: TaskState; - RUNNING: TaskState; - SUCCESS: TaskState; - }; - - /** - * Object metadata that can be set at upload. - */ - interface UploadMetadata extends firebase.storage.SettableMetadata { - /** - * A Base64-encoded MD5 hash of the object being uploaded. - */ - md5Hash?: string | null; - } - - /** - * An error returned by the Firebase Storage SDK. - */ - interface FirebaseStorageError extends FirebaseError { - serverResponse: string | null; - } - - interface StorageObserver { - next?: NextFn | null; - error?: (error: FirebaseStorageError) => void | null; - complete?: CompleteFn | null; - } - - /** - * Represents the process of uploading an object. Allows you to monitor and - * manage the upload. - */ - interface UploadTask { - /** - * Cancels a running task. Has no effect on a complete or failed task. - * @return True if the cancel had an effect. - */ - cancel(): boolean; - /** - * Equivalent to calling `then(null, onRejected)`. - */ - catch(onRejected: (error: FirebaseStorageError) => any): Promise; - /** - * Listens for events on this task. - * - * Events have three callback functions (referred to as `next`, `error`, and - * `complete`). - * - * If only the event is passed, a function that can be used to register the - * callbacks is returned. Otherwise, the callbacks are passed after the event. - * - * Callbacks can be passed either as three separate arguments or as the - * `next`, `error`, and `complete` properties of an object. Any of the three - * callbacks is optional, as long as at least one is specified. In addition, - * when you add your callbacks, you get a function back. You can call this - * function to unregister the associated callbacks. - * - * @example **Pass callbacks separately or in an object.** - * ```javascript - * var next = function(snapshot) {}; - * var error = function(error) {}; - * var complete = function() {}; - * - * // The first example. - * uploadTask.on( - * firebase.storage.TaskEvent.STATE_CHANGED, - * next, - * error, - * complete); - * - * // This is equivalent to the first example. - * uploadTask.on(firebase.storage.TaskEvent.STATE_CHANGED, { - * 'next': next, - * 'error': error, - * 'complete': complete - * }); - * - * // This is equivalent to the first example. - * var subscribe = uploadTask.on(firebase.storage.TaskEvent.STATE_CHANGED); - * subscribe(next, error, complete); - * - * // This is equivalent to the first example. - * var subscribe = uploadTask.on(firebase.storage.TaskEvent.STATE_CHANGED); - * subscribe({ - * 'next': next, - * 'error': error, - * 'complete': complete - * }); - * ``` - * - * @example **Any callback is optional.** - * ```javascript - * // Just listening for completion, this is legal. - * uploadTask.on( - * firebase.storage.TaskEvent.STATE_CHANGED, - * null, - * null, - * function() { - * console.log('upload complete!'); - * }); - * - * // Just listening for progress/state changes, this is legal. - * uploadTask.on(firebase.storage.TaskEvent.STATE_CHANGED, function(snapshot) { - * var percent = snapshot.bytesTransferred / snapshot.totalBytes * 100; - * console.log(percent + "% done"); - * }); - * - * // This is also legal. - * uploadTask.on(firebase.storage.TaskEvent.STATE_CHANGED, { - * 'complete': function() { - * console.log('upload complete!'); - * } - * }); - * ``` - * - * @example **Use the returned function to remove callbacks.** - * ```javascript - * var unsubscribe = uploadTask.on( - * firebase.storage.TaskEvent.STATE_CHANGED, - * function(snapshot) { - * var percent = snapshot.bytesTransferred / snapshot.totalBytes * 100; - * console.log(percent + "% done"); - * // Stop after receiving one update. - * unsubscribe(); - * }); - * - * // This code is equivalent to the above. - * var handle = uploadTask.on(firebase.storage.TaskEvent.STATE_CHANGED); - * unsubscribe = handle(function(snapshot) { - * var percent = snapshot.bytesTransferred / snapshot.totalBytes * 100; - * console.log(percent + "% done"); - * // Stop after receiving one update. - * unsubscribe(); - * }); - * ``` - * - * @param event The event to listen for. - * @param nextOrObserver - * The `next` function, which gets called for each item in - * the event stream, or an observer object with some or all of these three - * properties (`next`, `error`, `complete`). - * @param error A function that gets called with a `FirebaseStorageError` - * if the event stream ends due to an error. - * @param complete A function that gets called if the - * event stream ends normally. - * @return - * If only the event argument is passed, returns a function you can use to - * add callbacks (see the examples above). If more than just the event - * argument is passed, returns a function you can call to unregister the - * callbacks. - */ - on( - event: firebase.storage.TaskEvent, - nextOrObserver?: - | StorageObserver - | null - | ((snapshot: UploadTaskSnapshot) => any), - error?: ((error: FirebaseStorageError) => any) | null, - complete?: firebase.Unsubscribe | null - ): Function; - /** - * Pauses a running task. Has no effect on a paused or failed task. - * @return True if the pause had an effect. - */ - pause(): boolean; - /** - * Resumes a paused task. Has no effect on a running or failed task. - * @return True if the resume had an effect. - */ - resume(): boolean; - /** - * A snapshot of the current task state. - */ - snapshot: firebase.storage.UploadTaskSnapshot; - /** - * This object behaves like a Promise, and resolves with its snapshot data when - * the upload completes. - * @param onFulfilled - * The fulfillment callback. Promise chaining works as normal. - * @param onRejected The rejection callback. - */ - then( - onFulfilled?: - | ((snapshot: firebase.storage.UploadTaskSnapshot) => any) - | null, - onRejected?: ((error: FirebaseStorageError) => any) | null - ): Promise; - } - - /** - * Holds data about the current state of the upload task. - */ - interface UploadTaskSnapshot { - /** - * The number of bytes that have been successfully uploaded so far. - */ - bytesTransferred: number; - /** - * @deprecated - * Use Reference.getDownloadURL instead. This property will be removed in a - * future release. - */ - downloadURL: string | null; - /** - * Before the upload completes, contains the metadata sent to the server. - * After the upload completes, contains the metadata sent back from the server. - */ - metadata: firebase.storage.FullMetadata; - /** - * The reference that spawned this snapshot's upload task. - */ - ref: firebase.storage.Reference; - /** - * The current state of the task. - */ - state: firebase.storage.TaskState; - /** - * The task of which this is a snapshot. - */ - task: firebase.storage.UploadTask; - /** - * The total number of bytes to be uploaded. - */ - totalBytes: number; - } -} - -declare namespace firebase.firestore { - /** - * Document data (for use with `DocumentReference.set()`) consists of fields - * mapped to values. - */ - export type DocumentData = { [field: string]: any }; - - /** - * Update data (for use with `DocumentReference.update()`) consists of field - * paths (e.g. 'foo' or 'foo.baz') mapped to values. Fields that contain dots - * reference nested fields within the document. - */ - export type UpdateData = { [fieldPath: string]: any }; - - /** - * Constant used to indicate the LRU garbage collection should be disabled. - * Set this value as the `cacheSizeBytes` on the settings passed to the - * `Firestore` instance. - */ - export const CACHE_SIZE_UNLIMITED: number; - - /** - * Specifies custom configurations for your Cloud Firestore instance. - * You must set these before invoking any other methods. - */ - export interface Settings { - /** The hostname to connect to. */ - host?: string; - /** Whether to use SSL when connecting. */ - ssl?: boolean; - - /** - * An approximate cache size threshold for the on-disk data. If the cache grows beyond this - * size, Firestore will start removing data that hasn't been recently used. The size is not a - * guarantee that the cache will stay below that size, only that if the cache exceeds the given - * size, cleanup will be attempted. - * - * The default value is 40 MB. The threshold must be set to at least 1 MB, and can be set to - * CACHE_SIZE_UNLIMITED to disable garbage collection. - */ - cacheSizeBytes?: number; - - /** - * Forces the SDK’s underlying network transport (WebChannel) to use - * long-polling. Each response from the backend will be closed immediately - * after the backend sends data (by default responses are kept open in - * case the backend has more data to send). This avoids incompatibility - * issues with certain proxies, antivirus software, etc. that incorrectly - * buffer traffic indefinitely. Use of this option will cause some - * performance degradation though. - * - * This setting cannot be used with `experimentalAutoDetectLongPolling` and - * may be removed in a future release. If you find yourself using it to - * work around a specific network reliability issue, please tell us about - * it in https://github.com/firebase/firebase-js-sdk/issues/1674. - * - * @webonly - */ - experimentalForceLongPolling?: boolean; - - /** - * Configures the SDK's underlying transport (WebChannel) to automatically detect if - * long-polling should be used. This is very similar to `experimentalForceLongPolling`, - * but only uses long-polling if required. - * - * This setting will likely be enabled by default in future releases and cannot be - * combined with `experimentalForceLongPolling`. - * - * @webonly - */ - experimentalAutoDetectLongPolling?: boolean; - - /** - * Whether to skip nested properties that are set to `undefined` during - * object serialization. If set to `true`, these properties are skipped - * and not written to Firestore. If set to `false` or omitted, the SDK - * throws an exception when it encounters properties of type `undefined`. - */ - ignoreUndefinedProperties?: boolean; - - /** - * Whether to merge the provided settings with the existing settings. If - * set to `true`, the settings are merged with existing settings. If - * set to `false` or left unset, the settings replace the existing - * settings. - */ - merge?: boolean; - } - - /** - * Settings that can be passed to Firestore.enablePersistence() to configure - * Firestore persistence. - */ - export interface PersistenceSettings { - /** - * Whether to synchronize the in-memory state of multiple tabs. Setting this - * to `true` in all open tabs enables shared access to local persistence, - * shared execution of queries and latency-compensated local document updates - * across all connected instances. - * - * To enable this mode, `synchronizeTabs:true` needs to be set globally in all - * active tabs. If omitted or set to 'false', `enablePersistence()` will fail - * in all but the first tab. - */ - synchronizeTabs?: boolean; - - /** - * Whether to force enable persistence for the client. This cannot be used - * with `synchronizeTabs:true` and is primarily intended for use with Web - * Workers. Setting this to `true` will enable persistence, but cause other - * tabs using persistence to fail. - * - * This setting may be removed in a future release. If you find yourself - * using it for a specific use case or run into any issues, please tell us - * about it in - * https://github.com/firebase/firebase-js-sdk/issues/983. - */ - experimentalForceOwningTab?: boolean; - } - - export type LogLevel = 'debug' | 'error' | 'silent'; - - /** - * Sets the verbosity of Cloud Firestore logs (debug, error, or silent). - * - * @param logLevel - * The verbosity you set for activity and error logging. Can be any of - * the following values: - * - *
    - *
  • debug for the most verbose logging level, primarily for - * debugging.
  • - *
  • error to log errors only.
  • - *
  • silent to turn off logging.
  • - *
- */ - export function setLogLevel(logLevel: LogLevel): void; - - /** - * Converter used by `withConverter()` to transform user objects of type T - * into Firestore data. - * - * Using the converter allows you to specify generic type arguments when - * storing and retrieving objects from Firestore. - * - * @example - * ```typescript - * class Post { - * constructor(readonly title: string, readonly author: string) {} - * - * toString(): string { - * return this.title + ', by ' + this.author; - * } - * } - * - * const postConverter = { - * toFirestore(post: Post): firebase.firestore.DocumentData { - * return {title: post.title, author: post.author}; - * }, - * fromFirestore( - * snapshot: firebase.firestore.QueryDocumentSnapshot, - * options: firebase.firestore.SnapshotOptions - * ): Post { - * const data = snapshot.data(options)!; - * return new Post(data.title, data.author); - * } - * }; - * - * const postSnap = await firebase.firestore() - * .collection('posts') - * .withConverter(postConverter) - * .doc().get(); - * const post = postSnap.data(); - * if (post !== undefined) { - * post.title; // string - * post.toString(); // Should be defined - * post.someNonExistentProperty; // TS error - * } - * ``` - */ - export interface FirestoreDataConverter { - /** - * Called by the Firestore SDK to convert a custom model object of type T - * into a plain Javascript object (suitable for writing directly to the - * Firestore database). To use `set()` with `merge` and `mergeFields`, - * `toFirestore()` must be defined with `Partial`. - */ - toFirestore(modelObject: T): DocumentData; - toFirestore(modelObject: Partial, options: SetOptions): DocumentData; - - /** - * Called by the Firestore SDK to convert Firestore data into an object of - * type T. You can access your data by calling: `snapshot.data(options)`. - * - * @param snapshot A QueryDocumentSnapshot containing your data and metadata. - * @param options The SnapshotOptions from the initial call to `data()`. - */ - fromFirestore(snapshot: QueryDocumentSnapshot, options: SnapshotOptions): T; - } - - /** - * The Cloud Firestore service interface. - * - * Do not call this constructor directly. Instead, use - * {@link firebase.firestore `firebase.firestore()`}. - */ - export class Firestore { - private constructor(); - /** - * Specifies custom settings to be used to configure the `Firestore` - * instance. Must be set before invoking any other methods. - * - * @param settings The settings to use. - */ - settings(settings: Settings): void; - - /** - * Modify this instance to communicate with the Cloud Firestore emulator. - * - *

Note: this must be called before this instance has been used to do any operations. - * - * @param host the emulator host (ex: localhost). - * @param port the emulator port (ex: 9000). - * @param options.mockUserToken - the mock auth token to use for unit - * testing Security Rules. - */ - useEmulator( - host: string, - port: number, - options?: { - mockUserToken?: EmulatorMockTokenOptions | string; - } - ): void; - - /** - * Attempts to enable persistent storage, if possible. - * - * Must be called before any other methods (other than settings() and - * clearPersistence()). - * - * If this fails, enablePersistence() will reject the promise it returns. - * Note that even after this failure, the firestore instance will remain - * usable, however offline persistence will be disabled. - * - * There are several reasons why this can fail, which can be identified by - * the `code` on the error. - * - * * failed-precondition: The app is already open in another browser tab. - * * unimplemented: The browser is incompatible with the offline - * persistence implementation. - * - * @param settings Optional settings object to configure persistence. - * @return A promise that represents successfully enabling persistent - * storage. - */ - enablePersistence(settings?: PersistenceSettings): Promise; - - /** - * Gets a `CollectionReference` instance that refers to the collection at - * the specified path. - * - * @param collectionPath A slash-separated path to a collection. - * @return The `CollectionReference` instance. - */ - collection(collectionPath: string): CollectionReference; - - /** - * Gets a `DocumentReference` instance that refers to the document at the - * specified path. - * - * @param documentPath A slash-separated path to a document. - * @return The `DocumentReference` instance. - */ - doc(documentPath: string): DocumentReference; - - /** - * Creates and returns a new Query that includes all documents in the - * database that are contained in a collection or subcollection with the - * given collectionId. - * - * @param collectionId Identifies the collections to query over. Every - * collection or subcollection with this ID as the last segment of its path - * will be included. Cannot contain a slash. - * @return The created Query. - */ - collectionGroup(collectionId: string): Query; - - /** - * Executes the given `updateFunction` and then attempts to commit the changes - * applied within the transaction. If any document read within the transaction - * has changed, Cloud Firestore retries the `updateFunction`. If it fails to - * commit after 5 attempts, the transaction fails. - * - * The maximum number of writes allowed in a single transaction is 500, but - * note that each usage of `FieldValue.serverTimestamp()`, - * `FieldValue.arrayUnion()`, `FieldValue.arrayRemove()`, or - * `FieldValue.increment()` inside a transaction counts as an additional write. - * - * @param updateFunction - * The function to execute within the transaction context. - * - * @return - * If the transaction completed successfully or was explicitly aborted - * (the `updateFunction` returned a failed promise), - * the promise returned by the updateFunction is returned here. Else, if the - * transaction failed, a rejected promise with the corresponding failure - * error will be returned. - */ - runTransaction( - updateFunction: (transaction: Transaction) => Promise - ): Promise; - - /** - * Creates a write batch, used for performing multiple writes as a single - * atomic operation. The maximum number of writes allowed in a single WriteBatch - * is 500, but note that each usage of `FieldValue.serverTimestamp()`, - * `FieldValue.arrayUnion()`, `FieldValue.arrayRemove()`, or - * `FieldValue.increment()` inside a WriteBatch counts as an additional write. - * - * @return - * A `WriteBatch` that can be used to atomically execute multiple writes. - */ - batch(): WriteBatch; - - /** - * The {@link firebase.app.App app} associated with this `Firestore` service - * instance. - */ - app: firebase.app.App; - - /** - * Clears the persistent storage. This includes pending writes and cached - * documents. - * - * Must be called while the firestore instance is not started (after the app - * is shutdown or when the app is first initialized). On startup, this - * method must be called before other methods (other than settings()). If - * the firestore instance is still running, the promise will be rejected - * with the error code of `failed-precondition`. - * - * Note: clearPersistence() is primarily intended to help write reliable - * tests that use Cloud Firestore. It uses an efficient mechanism for - * dropping existing data but does not attempt to securely overwrite or - * otherwise make cached data unrecoverable. For applications that are - * sensitive to the disclosure of cached data in between user sessions, we - * strongly recommend not enabling persistence at all. - * - * @return A promise that is resolved when the persistent storage is - * cleared. Otherwise, the promise is rejected with an error. - */ - clearPersistence(): Promise; - - /** - * Re-enables use of the network for this Firestore instance after a prior - * call to {@link firebase.firestore.Firestore.disableNetwork - * `disableNetwork()`}. - * - * @return A promise that is resolved once the network has been - * enabled. - */ - enableNetwork(): Promise; - - /** - * Disables network usage for this instance. It can be re-enabled via - * {@link firebase.firestore.Firestore.enableNetwork `enableNetwork()`}. While - * the network is disabled, any snapshot listeners or get() calls will return - * results from cache, and any write operations will be queued until the network - * is restored. - * - * @return A promise that is resolved once the network has been - * disabled. - */ - disableNetwork(): Promise; - - /** - * Waits until all currently pending writes for the active user have been acknowledged by the - * backend. - * - * The returned Promise resolves immediately if there are no outstanding writes. Otherwise, the - * Promise waits for all previously issued writes (including those written in a previous app - * session), but it does not wait for writes that were added after the method is called. If you - * want to wait for additional writes, call `waitForPendingWrites()` again. - * - * Any outstanding `waitForPendingWrites()` Promises are rejected during user changes. - * - * @return A Promise which resolves when all currently pending writes have been - * acknowledged by the backend. - */ - waitForPendingWrites(): Promise; - - /** - * Attaches a listener for a snapshots-in-sync event. The snapshots-in-sync - * event indicates that all listeners affected by a given change have fired, - * even if a single server-generated change affects multiple listeners. - * - * NOTE: The snapshots-in-sync event only indicates that listeners are in sync - * with each other, but does not relate to whether those snapshots are in sync - * with the server. Use SnapshotMetadata in the individual listeners to - * determine if a snapshot is from the cache or the server. - * - * @param observer A single object containing `next` and `error` callbacks. - * @return An unsubscribe function that can be called to cancel the snapshot - * listener. - */ - onSnapshotsInSync(observer: { - next?: (value: void) => void; - error?: (error: FirestoreError) => void; - complete?: () => void; - }): () => void; - - /** - * Attaches a listener for a snapshots-in-sync event. The snapshots-in-sync - * event indicates that all listeners affected by a given change have fired, - * even if a single server-generated change affects multiple listeners. - * - * NOTE: The snapshots-in-sync event only indicates that listeners are in sync - * with each other, but does not relate to whether those snapshots are in sync - * with the server. Use SnapshotMetadata in the individual listeners to - * determine if a snapshot is from the cache or the server. - * - * @param onSync A callback to be called every time all snapshot listeners are - * in sync with each other. - * @return An unsubscribe function that can be called to cancel the snapshot - * listener. - */ - onSnapshotsInSync(onSync: () => void): () => void; - - /** - * Terminates this Firestore instance. - * - * After calling `terminate()` only the `clearPersistence()` method may be used. Any other method - * will throw a `FirestoreError`. - * - * To restart after termination, create a new instance of FirebaseFirestore with - * `firebase.firestore()`. - * - * Termination does not cancel any pending writes, and any promises that are awaiting a response - * from the server will not be resolved. If you have persistence enabled, the next time you - * start this instance, it will resume sending these writes to the server. - * - * Note: Under normal circumstances, calling `terminate()` is not required. This - * method is useful only when you want to force this instance to release all of its resources or - * in combination with `clearPersistence()` to ensure that all local state is destroyed - * between test runs. - * - * @return A promise that is resolved when the instance has been successfully terminated. - */ - terminate(): Promise; - - /** - * Loads a Firestore bundle into the local cache. - * - * @param bundleData - * An object representing the bundle to be loaded. Valid objects are `ArrayBuffer`, - * `ReadableStream` or `string`. - * - * @return - * A `LoadBundleTask` object, which notifies callers with progress updates, and completion - * or error events. It can be used as a `Promise`. - */ - loadBundle( - bundleData: ArrayBuffer | ReadableStream | string - ): LoadBundleTask; - - /** - * Reads a Firestore `Query` from local cache, identified by the given name. - * - * The named queries are packaged into bundles on the server side (along - * with resulting documents), and loaded to local cache using `loadBundle`. Once in local - * cache, use this method to extract a `Query` by name. - */ - namedQuery(name: string): Promise | null>; - - /** - * @hidden - */ - INTERNAL: { delete: () => Promise }; - } - - /** - * Represents the task of loading a Firestore bundle. It provides progress of bundle - * loading, as well as task completion and error events. - * - * The API is compatible with `Promise`. - */ - export interface LoadBundleTask extends PromiseLike { - /** - * Registers functions to listen to bundle loading progress events. - * @param next - * Called when there is a progress update from bundle loading. Typically `next` calls occur - * each time a Firestore document is loaded from the bundle. - * @param error - * Called when an error occurs during bundle loading. The task aborts after reporting the - * error, and there should be no more updates after this. - * @param complete - * Called when the loading task is complete. - */ - onProgress( - next?: (progress: LoadBundleTaskProgress) => any, - error?: (error: Error) => any, - complete?: () => void - ): void; - - /** - * Implements the `Promise.then` interface. - * - * @param onFulfilled - * Called on the completion of the loading task with a final `LoadBundleTaskProgress` update. - * The update will always have its `taskState` set to `"Success"`. - * @param onRejected - * Called when an error occurs during bundle loading. - */ - then( - onFulfilled?: (a: LoadBundleTaskProgress) => T | PromiseLike, - onRejected?: (a: Error) => R | PromiseLike - ): Promise; - - /** - * Implements the `Promise.catch` interface. - * - * @param onRejected - * Called when an error occurs during bundle loading. - */ - catch( - onRejected: (a: Error) => R | PromiseLike - ): Promise; - } - - /** - * Represents a progress update or a final state from loading bundles. - */ - export interface LoadBundleTaskProgress { - /** How many documents have been loaded. */ - documentsLoaded: number; - /** How many documents are in the bundle being loaded. */ - totalDocuments: number; - /** How many bytes have been loaded. */ - bytesLoaded: number; - /** How many bytes are in the bundle being loaded. */ - totalBytes: number; - /** Current task state. */ - taskState: TaskState; - } - - /** - * Represents the state of bundle loading tasks. - * - * Both 'Error' and 'Success' are sinking state: task will abort or complete and there will - * be no more updates after they are reported. - */ - export type TaskState = 'Error' | 'Running' | 'Success'; - - /** - * An immutable object representing a geo point in Firestore. The geo point - * is represented as latitude/longitude pair. - * - * Latitude values are in the range of [-90, 90]. - * Longitude values are in the range of [-180, 180]. - */ - export class GeoPoint { - /** - * Creates a new immutable GeoPoint object with the provided latitude and - * longitude values. - * @param latitude The latitude as number between -90 and 90. - * @param longitude The longitude as number between -180 and 180. - */ - constructor(latitude: number, longitude: number); - - /** - * The latitude of this GeoPoint instance. - */ - readonly latitude: number; - /** - * The longitude of this GeoPoint instance. - */ - readonly longitude: number; - - /** - * Returns true if this `GeoPoint` is equal to the provided one. - * - * @param other The `GeoPoint` to compare against. - * @return true if this `GeoPoint` is equal to the provided one. - */ - isEqual(other: GeoPoint): boolean; - } - - /** - * A Timestamp represents a point in time independent of any time zone or - * calendar, represented as seconds and fractions of seconds at nanosecond - * resolution in UTC Epoch time. - * - * It is encoded using the Proleptic Gregorian - * Calendar which extends the Gregorian calendar backwards to year one. It is - * encoded assuming all minutes are 60 seconds long, i.e. leap seconds are - * "smeared" so that no leap second table is needed for interpretation. Range is - * from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. - * - * @see https://github.com/google/protobuf/blob/master/src/google/protobuf/timestamp.proto - */ - export class Timestamp { - /** - * Creates a new timestamp. - * - * @param seconds The number of seconds of UTC time since Unix epoch - * 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to - * 9999-12-31T23:59:59Z inclusive. - * @param nanoseconds The non-negative fractions of a second at nanosecond - * resolution. Negative second values with fractions must still have - * non-negative nanoseconds values that count forward in time. Must be - * from 0 to 999,999,999 inclusive. - */ - constructor(seconds: number, nanoseconds: number); - - /** - * Creates a new timestamp with the current date, with millisecond precision. - * - * @return a new timestamp representing the current date. - */ - static now(): Timestamp; - - /** - * Creates a new timestamp from the given date. - * - * @param date The date to initialize the `Timestamp` from. - * @return A new `Timestamp` representing the same point in time as the given - * date. - */ - static fromDate(date: Date): Timestamp; - - /** - * Creates a new timestamp from the given number of milliseconds. - * - * @param milliseconds Number of milliseconds since Unix epoch - * 1970-01-01T00:00:00Z. - * @return A new `Timestamp` representing the same point in time as the given - * number of milliseconds. - */ - static fromMillis(milliseconds: number): Timestamp; - - readonly seconds: number; - readonly nanoseconds: number; - - /** - * Convert a Timestamp to a JavaScript `Date` object. This conversion causes - * a loss of precision since `Date` objects only support millisecond precision. - * - * @return JavaScript `Date` object representing the same point in time as - * this `Timestamp`, with millisecond precision. - */ - toDate(): Date; - - /** - * Convert a timestamp to a numeric timestamp (in milliseconds since epoch). - * This operation causes a loss of precision. - * - * @return The point in time corresponding to this timestamp, represented as - * the number of milliseconds since Unix epoch 1970-01-01T00:00:00Z. - */ - toMillis(): number; - - /** - * Returns true if this `Timestamp` is equal to the provided one. - * - * @param other The `Timestamp` to compare against. - * @return true if this `Timestamp` is equal to the provided one. - */ - isEqual(other: Timestamp): boolean; - - /** - * Converts this object to a primitive string, which allows Timestamp objects to be compared - * using the `>`, `<=`, `>=` and `>` operators. - */ - valueOf(): string; - } - - /** - * An immutable object representing an array of bytes. - */ - export class Blob { - private constructor(); - - /** - * Creates a new Blob from the given Base64 string, converting it to - * bytes. - * - * @param base64 - * The Base64 string used to create the Blob object. - */ - static fromBase64String(base64: string): Blob; - - /** - * Creates a new Blob from the given Uint8Array. - * - * @param array - * The Uint8Array used to create the Blob object. - */ - static fromUint8Array(array: Uint8Array): Blob; - - /** - * Returns the bytes of a Blob as a Base64-encoded string. - * - * @return - * The Base64-encoded string created from the Blob object. - */ - public toBase64(): string; - - /** - * Returns the bytes of a Blob in a new Uint8Array. - * - * @return - * The Uint8Array created from the Blob object. - */ - public toUint8Array(): Uint8Array; - - /** - * Returns true if this `Blob` is equal to the provided one. - * - * @param other The `Blob` to compare against. - * @return true if this `Blob` is equal to the provided one. - */ - isEqual(other: Blob): boolean; - } - - /** - * A reference to a transaction. - * The `Transaction` object passed to a transaction's updateFunction provides - * the methods to read and write data within the transaction context. See - * `Firestore.runTransaction()`. - */ - export class Transaction { - private constructor(); - - /** - * Reads the document referenced by the provided `DocumentReference.` - * - * @param documentRef A reference to the document to be read. - * @return A DocumentSnapshot for the read data. - */ - get(documentRef: DocumentReference): Promise>; - - /** - * Writes to the document referred to by the provided `DocumentReference`. - * If the document does not exist yet, it will be created. If you pass - * `SetOptions`, the provided data can be merged into the existing document. - * - * @param documentRef A reference to the document to be set. - * @param data An object of the fields and values for the document. - * @param options An object to configure the set behavior. - * @return This `Transaction` instance. Used for chaining method calls. - */ - set( - documentRef: DocumentReference, - data: Partial, - options: SetOptions - ): Transaction; - - /** - * Writes to the document referred to by the provided `DocumentReference`. - * If the document does not exist yet, it will be created. If you pass - * `SetOptions`, the provided data can be merged into the existing document. - * - * @param documentRef A reference to the document to be set. - * @param data An object of the fields and values for the document. - * @return This `Transaction` instance. Used for chaining method calls. - */ - set(documentRef: DocumentReference, data: T): Transaction; - - /** - * Updates fields in the document referred to by the provided - * `DocumentReference`. The update will fail if applied to a document that - * does not exist. - * - * @param documentRef A reference to the document to be updated. - * @param data An object containing the fields and values with which to - * update the document. Fields can contain dots to reference nested fields - * within the document. - * @return This `Transaction` instance. Used for chaining method calls. - */ - update(documentRef: DocumentReference, data: UpdateData): Transaction; - - /** - * Updates fields in the document referred to by the provided - * `DocumentReference`. The update will fail if applied to a document that - * does not exist. - * - * Nested fields can be updated by providing dot-separated field path - * strings or by providing FieldPath objects. - * - * @param documentRef A reference to the document to be updated. - * @param field The first field to update. - * @param value The first value. - * @param moreFieldsAndValues Additional key/value pairs. - * @return A Promise resolved once the data has been successfully written - * to the backend (Note that it won't resolve while you're offline). - */ - update( - documentRef: DocumentReference, - field: string | FieldPath, - value: any, - ...moreFieldsAndValues: any[] - ): Transaction; - - /** - * Deletes the document referred to by the provided `DocumentReference`. - * - * @param documentRef A reference to the document to be deleted. - * @return This `Transaction` instance. Used for chaining method calls. - */ - delete(documentRef: DocumentReference): Transaction; - } - - /** - * A write batch, used to perform multiple writes as a single atomic unit. - * - * A `WriteBatch` object can be acquired by calling `Firestore.batch()`. It - * provides methods for adding writes to the write batch. None of the - * writes will be committed (or visible locally) until `WriteBatch.commit()` - * is called. - * - * Unlike transactions, write batches are persisted offline and therefore are - * preferable when you don't need to condition your writes on read data. - */ - export class WriteBatch { - private constructor(); - - /** - * Writes to the document referred to by the provided `DocumentReference`. - * If the document does not exist yet, it will be created. If you pass - * `SetOptions`, the provided data can be merged into the existing document. - * - * @param documentRef A reference to the document to be set. - * @param data An object of the fields and values for the document. - * @param options An object to configure the set behavior. - * @return This `WriteBatch` instance. Used for chaining method calls. - */ - set( - documentRef: DocumentReference, - data: Partial, - options: SetOptions - ): WriteBatch; - - /** - * Writes to the document referred to by the provided `DocumentReference`. - * If the document does not exist yet, it will be created. If you pass - * `SetOptions`, the provided data can be merged into the existing document. - * - * @param documentRef A reference to the document to be set. - * @param data An object of the fields and values for the document. - * @return This `WriteBatch` instance. Used for chaining method calls. - */ - set(documentRef: DocumentReference, data: T): WriteBatch; - - /** - * Updates fields in the document referred to by the provided - * `DocumentReference`. The update will fail if applied to a document that - * does not exist. - * - * @param documentRef A reference to the document to be updated. - * @param data An object containing the fields and values with which to - * update the document. Fields can contain dots to reference nested fields - * within the document. - * @return This `WriteBatch` instance. Used for chaining method calls. - */ - update(documentRef: DocumentReference, data: UpdateData): WriteBatch; - - /** - * Updates fields in the document referred to by this `DocumentReference`. - * The update will fail if applied to a document that does not exist. - * - * Nested fields can be update by providing dot-separated field path strings - * or by providing FieldPath objects. - * - * @param documentRef A reference to the document to be updated. - * @param field The first field to update. - * @param value The first value. - * @param moreFieldsAndValues Additional key value pairs. - * @return A Promise resolved once the data has been successfully written - * to the backend (Note that it won't resolve while you're offline). - */ - update( - documentRef: DocumentReference, - field: string | FieldPath, - value: any, - ...moreFieldsAndValues: any[] - ): WriteBatch; - - /** - * Deletes the document referred to by the provided `DocumentReference`. - * - * @param documentRef A reference to the document to be deleted. - * @return This `WriteBatch` instance. Used for chaining method calls. - */ - delete(documentRef: DocumentReference): WriteBatch; - - /** - * Commits all of the writes in this write batch as a single atomic unit. - * - * @return A Promise resolved once all of the writes in the batch have been - * successfully written to the backend as an atomic unit. Note that it won't - * resolve while you're offline. - */ - commit(): Promise; - } - - /** - * An options object that can be passed to `DocumentReference.onSnapshot()`, - * `Query.onSnapshot()` and `QuerySnapshot.docChanges()` to control which - * types of changes to include in the result set. - */ - export interface SnapshotListenOptions { - /** - * Include a change even if only the metadata of the query or of a document - * changed. Default is false. - */ - readonly includeMetadataChanges?: boolean; - } - - /** - * An options object that configures the behavior of `set()` calls in - * {@link firebase.firestore.DocumentReference.set DocumentReference}, {@link - * firebase.firestore.WriteBatch.set WriteBatch} and {@link - * firebase.firestore.Transaction.set Transaction}. These calls can be - * configured to perform granular merges instead of overwriting the target - * documents in their entirety by providing a `SetOptions` with `merge: true`. - */ - export interface SetOptions { - /** - * Changes the behavior of a set() call to only replace the values specified - * in its data argument. Fields omitted from the set() call remain - * untouched. - */ - readonly merge?: boolean; - - /** - * Changes the behavior of set() calls to only replace the specified field - * paths. Any field path that is not specified is ignored and remains - * untouched. - */ - readonly mergeFields?: (string | FieldPath)[]; - } - - /** - * An options object that configures the behavior of `get()` calls on - * `DocumentReference` and `Query`. By providing a `GetOptions` object, these - * methods can be configured to fetch results only from the server, only from - * the local cache or attempt to fetch results from the server and fall back to - * the cache (which is the default). - */ - export interface GetOptions { - /** - * Describes whether we should get from server or cache. - * - * Setting to `default` (or not setting at all), causes Firestore to try to - * retrieve an up-to-date (server-retrieved) snapshot, but fall back to - * returning cached data if the server can't be reached. - * - * Setting to `server` causes Firestore to avoid the cache, generating an - * error if the server cannot be reached. Note that the cache will still be - * updated if the server request succeeds. Also note that latency-compensation - * still takes effect, so any pending write operations will be visible in the - * returned data (merged into the server-provided data). - * - * Setting to `cache` causes Firestore to immediately return a value from the - * cache, ignoring the server completely (implying that the returned value - * may be stale with respect to the value on the server.) If there is no data - * in the cache to satisfy the `get()` call, `DocumentReference.get()` will - * return an error and `QuerySnapshot.get()` will return an empty - * `QuerySnapshot` with no documents. - */ - readonly source?: 'default' | 'server' | 'cache'; - } - - /** - * A `DocumentReference` refers to a document location in a Firestore database - * and can be used to write, read, or listen to the location. The document at - * the referenced location may or may not exist. A `DocumentReference` can - * also be used to create a `CollectionReference` to a subcollection. - */ - export class DocumentReference { - private constructor(); - - /** - * The document's identifier within its collection. - */ - readonly id: string; - - /** - * The {@link firebase.firestore.Firestore} the document is in. - * This is useful for performing transactions, for example. - */ - readonly firestore: Firestore; - - /** - * The Collection this `DocumentReference` belongs to. - */ - readonly parent: CollectionReference; - - /** - * A string representing the path of the referenced document (relative - * to the root of the database). - */ - readonly path: string; - - /** - * Gets a `CollectionReference` instance that refers to the collection at - * the specified path. - * - * @param collectionPath A slash-separated path to a collection. - * @return The `CollectionReference` instance. - */ - collection(collectionPath: string): CollectionReference; - - /** - * Returns true if this `DocumentReference` is equal to the provided one. - * - * @param other The `DocumentReference` to compare against. - * @return true if this `DocumentReference` is equal to the provided one. - */ - isEqual(other: DocumentReference): boolean; - - /** - * Writes to the document referred to by this `DocumentReference`. If the - * document does not yet exist, it will be created. If you pass - * `SetOptions`, the provided data can be merged into an existing document. - * - * @param data A map of the fields and values for the document. - * @param options An object to configure the set behavior. - * @return A Promise resolved once the data has been successfully written - * to the backend (Note that it won't resolve while you're offline). - */ - set(data: Partial, options: SetOptions): Promise; - - /** - * Writes to the document referred to by this `DocumentReference`. If the - * document does not yet exist, it will be created. If you pass - * `SetOptions`, the provided data can be merged into an existing document. - * - * @param data A map of the fields and values for the document. - * @return A Promise resolved once the data has been successfully written - * to the backend (Note that it won't resolve while you're offline). - */ - set(data: T): Promise; - - /** - * Updates fields in the document referred to by this `DocumentReference`. - * The update will fail if applied to a document that does not exist. - * - * @param data An object containing the fields and values with which to - * update the document. Fields can contain dots to reference nested fields - * within the document. - * @return A Promise resolved once the data has been successfully written - * to the backend (Note that it won't resolve while you're offline). - */ - update(data: UpdateData): Promise; - - /** - * Updates fields in the document referred to by this `DocumentReference`. - * The update will fail if applied to a document that does not exist. - * - * Nested fields can be updated by providing dot-separated field path - * strings or by providing FieldPath objects. - * - * @param field The first field to update. - * @param value The first value. - * @param moreFieldsAndValues Additional key value pairs. - * @return A Promise resolved once the data has been successfully written - * to the backend (Note that it won't resolve while you're offline). - */ - update( - field: string | FieldPath, - value: any, - ...moreFieldsAndValues: any[] - ): Promise; - - /** - * Deletes the document referred to by this `DocumentReference`. - * - * @return A Promise resolved once the document has been successfully - * deleted from the backend (Note that it won't resolve while you're - * offline). - */ - delete(): Promise; - - /** - * Reads the document referred to by this `DocumentReference`. - * - * Note: By default, get() attempts to provide up-to-date data when possible - * by waiting for data from the server, but it may return cached data or fail - * if you are offline and the server cannot be reached. This behavior can be - * altered via the `GetOptions` parameter. - * - * @param options An object to configure the get behavior. - * @return A Promise resolved with a DocumentSnapshot containing the - * current document contents. - */ - get(options?: GetOptions): Promise>; - - /** - * Attaches a listener for DocumentSnapshot events. You may either pass - * individual `onNext` and `onError` callbacks or pass a single observer - * object with `next` and `error` callbacks. - * - * NOTE: Although an `onCompletion` callback can be provided, it will - * never be called because the snapshot stream is never-ending. - * - * @param observer A single object containing `next` and `error` callbacks. - * @return An unsubscribe function that can be called to cancel - * the snapshot listener. - */ - onSnapshot(observer: { - next?: (snapshot: DocumentSnapshot) => void; - error?: (error: FirestoreError) => void; - complete?: () => void; - }): () => void; - /** - * Attaches a listener for DocumentSnapshot events. You may either pass - * individual `onNext` and `onError` callbacks or pass a single observer - * object with `next` and `error` callbacks. - * - * NOTE: Although an `onCompletion` callback can be provided, it will - * never be called because the snapshot stream is never-ending. - * - * @param options Options controlling the listen behavior. - * @param observer A single object containing `next` and `error` callbacks. - * @return An unsubscribe function that can be called to cancel - * the snapshot listener. - */ - onSnapshot( - options: SnapshotListenOptions, - observer: { - next?: (snapshot: DocumentSnapshot) => void; - error?: (error: FirestoreError) => void; - complete?: () => void; - } - ): () => void; - /** - * Attaches a listener for DocumentSnapshot events. You may either pass - * individual `onNext` and `onError` callbacks or pass a single observer - * object with `next` and `error` callbacks. - * - * NOTE: Although an `onCompletion` callback can be provided, it will - * never be called because the snapshot stream is never-ending. - * - * @param onNext A callback to be called every time a new `DocumentSnapshot` - * is available. - * @param onError A callback to be called if the listen fails or is - * cancelled. No further callbacks will occur. - * @return An unsubscribe function that can be called to cancel - * the snapshot listener. - */ - onSnapshot( - onNext: (snapshot: DocumentSnapshot) => void, - onError?: (error: FirestoreError) => void, - onCompletion?: () => void - ): () => void; - /** - * Attaches a listener for DocumentSnapshot events. You may either pass - * individual `onNext` and `onError` callbacks or pass a single observer - * object with `next` and `error` callbacks. - * - * NOTE: Although an `onCompletion` callback can be provided, it will - * never be called because the snapshot stream is never-ending. - * - * @param options Options controlling the listen behavior. - * @param onNext A callback to be called every time a new `DocumentSnapshot` - * is available. - * @param onError A callback to be called if the listen fails or is - * cancelled. No further callbacks will occur. - * @return An unsubscribe function that can be called to cancel - * the snapshot listener. - */ - onSnapshot( - options: SnapshotListenOptions, - onNext: (snapshot: DocumentSnapshot) => void, - onError?: (error: FirestoreError) => void, - onCompletion?: () => void - ): () => void; - - /** - * Applies a custom data converter to this DocumentReference, allowing you - * to use your own custom model objects with Firestore. When you call - * set(), get(), etc. on the returned DocumentReference instance, the - * provided converter will convert between Firestore data and your custom - * type U. - * - * Passing in `null` as the converter parameter removes the current - * converter. - * - * @param converter Converts objects to and from Firestore. Passing in - * `null` removes the current converter. - * @return A DocumentReference that uses the provided converter. - */ - withConverter(converter: null): DocumentReference; - /** - * Applies a custom data converter to this DocumentReference, allowing you - * to use your own custom model objects with Firestore. When you call - * set(), get(), etc. on the returned DocumentReference instance, the - * provided converter will convert between Firestore data and your custom - * type U. - * - * Passing in `null` as the converter parameter removes the current - * converter. - * - * @param converter Converts objects to and from Firestore. Passing in - * `null` removes the current converter. - * @return A DocumentReference that uses the provided converter. - */ - withConverter( - converter: FirestoreDataConverter - ): DocumentReference; - } - - /** - * Options that configure how data is retrieved from a `DocumentSnapshot` - * (e.g. the desired behavior for server timestamps that have not yet been set - * to their final value). - */ - export interface SnapshotOptions { - /** - * If set, controls the return value for server timestamps that have not yet - * been set to their final value. - * - * By specifying 'estimate', pending server timestamps return an estimate - * based on the local clock. This estimate will differ from the final value - * and cause these values to change once the server result becomes available. - * - * By specifying 'previous', pending timestamps will be ignored and return - * their previous value instead. - * - * If omitted or set to 'none', `null` will be returned by default until the - * server value becomes available. - */ - readonly serverTimestamps?: 'estimate' | 'previous' | 'none'; - } - - /** - * Metadata about a snapshot, describing the state of the snapshot. - */ - export interface SnapshotMetadata { - /** - * True if the snapshot contains the result of local writes (e.g. set() or - * update() calls) that have not yet been committed to the backend. - * If your listener has opted into metadata updates (via - * `SnapshotListenOptions`) you will receive another - * snapshot with `hasPendingWrites` equal to false once the writes have been - * committed to the backend. - */ - readonly hasPendingWrites: boolean; - - /** - * True if the snapshot was created from cached data rather than guaranteed - * up-to-date server data. If your listener has opted into metadata updates - * (via `SnapshotListenOptions`) - * you will receive another snapshot with `fromCache` set to false once - * the client has received up-to-date data from the backend. - */ - readonly fromCache: boolean; - - /** - * Returns true if this `SnapshotMetadata` is equal to the provided one. - * - * @param other The `SnapshotMetadata` to compare against. - * @return true if this `SnapshotMetadata` is equal to the provided one. - */ - isEqual(other: SnapshotMetadata): boolean; - } - - /** - * A `DocumentSnapshot` contains data read from a document in your Firestore - * database. The data can be extracted with `.data()` or `.get()` to - * get a specific field. - * - * For a `DocumentSnapshot` that points to a non-existing document, any data - * access will return 'undefined'. You can use the `exists` property to - * explicitly verify a document's existence. - */ - export class DocumentSnapshot { - protected constructor(); - - /** - * Property of the `DocumentSnapshot` that signals whether or not the data - * exists. True if the document exists. - */ - readonly exists: boolean; - /** - * The `DocumentReference` for the document included in the `DocumentSnapshot`. - */ - readonly ref: DocumentReference; - /** - * Property of the `DocumentSnapshot` that provides the document's ID. - */ - readonly id: string; - /** - * Metadata about the `DocumentSnapshot`, including information about its - * source and local modifications. - */ - readonly metadata: SnapshotMetadata; - - /** - * Retrieves all fields in the document as an Object. Returns 'undefined' if - * the document doesn't exist. - * - * By default, `FieldValue.serverTimestamp()` values that have not yet been - * set to their final value will be returned as `null`. You can override - * this by passing an options object. - * - * @param options An options object to configure how data is retrieved from - * the snapshot (e.g. the desired behavior for server timestamps that have - * not yet been set to their final value). - * @return An Object containing all fields in the document or 'undefined' if - * the document doesn't exist. - */ - data(options?: SnapshotOptions): T | undefined; - - /** - * Retrieves the field specified by `fieldPath`. Returns `undefined` if the - * document or field doesn't exist. - * - * By default, a `FieldValue.serverTimestamp()` that has not yet been set to - * its final value will be returned as `null`. You can override this by - * passing an options object. - * - * @param fieldPath The path (e.g. 'foo' or 'foo.bar') to a specific field. - * @param options An options object to configure how the field is retrieved - * from the snapshot (e.g. the desired behavior for server timestamps that have - * not yet been set to their final value). - * @return The data at the specified field location or undefined if no such - * field exists in the document. - */ - get(fieldPath: string | FieldPath, options?: SnapshotOptions): any; - - /** - * Returns true if this `DocumentSnapshot` is equal to the provided one. - * - * @param other The `DocumentSnapshot` to compare against. - * @return true if this `DocumentSnapshot` is equal to the provided one. - */ - isEqual(other: DocumentSnapshot): boolean; - } - - /** - * A `QueryDocumentSnapshot` contains data read from a document in your - * Firestore database as part of a query. The document is guaranteed to exist - * and its data can be extracted with `.data()` or `.get()` to get a - * specific field. - * - * A `QueryDocumentSnapshot` offers the same API surface as a - * `DocumentSnapshot`. Since query results contain only existing documents, the - * `exists` property will always be true and `data()` will never return - * 'undefined'. - */ - export class QueryDocumentSnapshot< - T = DocumentData - > extends DocumentSnapshot { - private constructor(); - - /** - * Retrieves all fields in the document as an Object. - * - * By default, `FieldValue.serverTimestamp()` values that have not yet been - * set to their final value will be returned as `null`. You can override - * this by passing an options object. - * - * @override - * @param options An options object to configure how data is retrieved from - * the snapshot (e.g. the desired behavior for server timestamps that have - * not yet been set to their final value). - * @return An Object containing all fields in the document. - */ - data(options?: SnapshotOptions): T; - } - - /** - * The direction of a `Query.orderBy()` clause is specified as 'desc' or 'asc' - * (descending or ascending). - */ - export type OrderByDirection = 'desc' | 'asc'; - - /** - * Filter conditions in a `Query.where()` clause are specified using the - * strings '<', '<=', '==', '!=', '>=', '>', 'array-contains', 'in', - * 'array-contains-any', and 'not-in'. - */ - export type WhereFilterOp = - | '<' - | '<=' - | '==' - | '!=' - | '>=' - | '>' - | 'array-contains' - | 'in' - | 'array-contains-any' - | 'not-in'; - - /** - * A `Query` refers to a Query which you can read or listen to. You can also - * construct refined `Query` objects by adding filters and ordering. - */ - export class Query { - protected constructor(); - - /** - * The `Firestore` for the Firestore database (useful for performing - * transactions, etc.). - */ - readonly firestore: Firestore; - - /** - * Creates and returns a new Query with the additional filter that documents - * must contain the specified field and the value should satisfy the - * relation constraint provided. - * - * @param fieldPath The path to compare - * @param opStr The operation string (e.g "<", "<=", "==", ">", ">="). - * @param value The value for comparison - * @return The created Query. - */ - where( - fieldPath: string | FieldPath, - opStr: WhereFilterOp, - value: any - ): Query; - - /** - * Creates and returns a new Query that's additionally sorted by the - * specified field, optionally in descending order instead of ascending. - * - * @param fieldPath The field to sort by. - * @param directionStr Optional direction to sort by (`asc` or `desc`). If - * not specified, order will be ascending. - * @return The created Query. - */ - orderBy( - fieldPath: string | FieldPath, - directionStr?: OrderByDirection - ): Query; - - /** - * Creates and returns a new Query that only returns the first matching - * documents. - * - * @param limit The maximum number of items to return. - * @return The created Query. - */ - limit(limit: number): Query; - - /** - * Creates and returns a new Query that only returns the last matching - * documents. - * - * You must specify at least one `orderBy` clause for `limitToLast` queries, - * otherwise an exception will be thrown during execution. - * - * @param limit The maximum number of items to return. - * @return The created Query. - */ - limitToLast(limit: number): Query; - - /** - * Creates and returns a new Query that starts at the provided document - * (inclusive). The starting position is relative to the order of the query. - * The document must contain all of the fields provided in the `orderBy` of - * this query. - * - * @param snapshot The snapshot of the document to start at. - * @return The created Query. - */ - startAt(snapshot: DocumentSnapshot): Query; - - /** - * Creates and returns a new Query that starts at the provided fields - * relative to the order of the query. The order of the field values - * must match the order of the order by clauses of the query. - * - * @param fieldValues The field values to start this query at, in order - * of the query's order by. - * @return The created Query. - */ - startAt(...fieldValues: any[]): Query; - - /** - * Creates and returns a new Query that starts after the provided document - * (exclusive). The starting position is relative to the order of the query. - * The document must contain all of the fields provided in the orderBy of - * this query. - * - * @param snapshot The snapshot of the document to start after. - * @return The created Query. - */ - startAfter(snapshot: DocumentSnapshot): Query; - - /** - * Creates and returns a new Query that starts after the provided fields - * relative to the order of the query. The order of the field values - * must match the order of the order by clauses of the query. - * - * @param fieldValues The field values to start this query after, in order - * of the query's order by. - * @return The created Query. - */ - startAfter(...fieldValues: any[]): Query; - - /** - * Creates and returns a new Query that ends before the provided document - * (exclusive). The end position is relative to the order of the query. The - * document must contain all of the fields provided in the orderBy of this - * query. - * - * @param snapshot The snapshot of the document to end before. - * @return The created Query. - */ - endBefore(snapshot: DocumentSnapshot): Query; - - /** - * Creates and returns a new Query that ends before the provided fields - * relative to the order of the query. The order of the field values - * must match the order of the order by clauses of the query. - * - * @param fieldValues The field values to end this query before, in order - * of the query's order by. - * @return The created Query. - */ - endBefore(...fieldValues: any[]): Query; - - /** - * Creates and returns a new Query that ends at the provided document - * (inclusive). The end position is relative to the order of the query. The - * document must contain all of the fields provided in the orderBy of this - * query. - * - * @param snapshot The snapshot of the document to end at. - * @return The created Query. - */ - endAt(snapshot: DocumentSnapshot): Query; - - /** - * Creates and returns a new Query that ends at the provided fields - * relative to the order of the query. The order of the field values - * must match the order of the order by clauses of the query. - * - * @param fieldValues The field values to end this query at, in order - * of the query's order by. - * @return The created Query. - */ - endAt(...fieldValues: any[]): Query; - - /** - * Returns true if this `Query` is equal to the provided one. - * - * @param other The `Query` to compare against. - * @return true if this `Query` is equal to the provided one. - */ - isEqual(other: Query): boolean; - - /** - * Executes the query and returns the results as a `QuerySnapshot`. - * - * Note: By default, get() attempts to provide up-to-date data when possible - * by waiting for data from the server, but it may return cached data or fail - * if you are offline and the server cannot be reached. This behavior can be - * altered via the `GetOptions` parameter. - * - * @param options An object to configure the get behavior. - * @return A Promise that will be resolved with the results of the Query. - */ - get(options?: GetOptions): Promise>; - - /** - * Attaches a listener for QuerySnapshot events. You may either pass - * individual `onNext` and `onError` callbacks or pass a single observer - * object with `next` and `error` callbacks. The listener can be cancelled by - * calling the function that is returned when `onSnapshot` is called. - * - * NOTE: Although an `onCompletion` callback can be provided, it will - * never be called because the snapshot stream is never-ending. - * - * @param observer A single object containing `next` and `error` callbacks. - * @return An unsubscribe function that can be called to cancel - * the snapshot listener. - */ - onSnapshot(observer: { - next?: (snapshot: QuerySnapshot) => void; - error?: (error: FirestoreError) => void; - complete?: () => void; - }): () => void; - /** - * Attaches a listener for QuerySnapshot events. You may either pass - * individual `onNext` and `onError` callbacks or pass a single observer - * object with `next` and `error` callbacks. The listener can be cancelled by - * calling the function that is returned when `onSnapshot` is called. - * - * NOTE: Although an `onCompletion` callback can be provided, it will - * never be called because the snapshot stream is never-ending. - * - * @param options Options controlling the listen behavior. - * @param observer A single object containing `next` and `error` callbacks. - * @return An unsubscribe function that can be called to cancel - * the snapshot listener. - */ - onSnapshot( - options: SnapshotListenOptions, - observer: { - next?: (snapshot: QuerySnapshot) => void; - error?: (error: FirestoreError) => void; - complete?: () => void; - } - ): () => void; - /** - * Attaches a listener for QuerySnapshot events. You may either pass - * individual `onNext` and `onError` callbacks or pass a single observer - * object with `next` and `error` callbacks. The listener can be cancelled by - * calling the function that is returned when `onSnapshot` is called. - * - * NOTE: Although an `onCompletion` callback can be provided, it will - * never be called because the snapshot stream is never-ending. - * - * @param onNext A callback to be called every time a new `QuerySnapshot` - * is available. - * @param onError A callback to be called if the listen fails or is - * cancelled. No further callbacks will occur. - * @return An unsubscribe function that can be called to cancel - * the snapshot listener. - */ - onSnapshot( - onNext: (snapshot: QuerySnapshot) => void, - onError?: (error: FirestoreError) => void, - onCompletion?: () => void - ): () => void; - /** - * Attaches a listener for QuerySnapshot events. You may either pass - * individual `onNext` and `onError` callbacks or pass a single observer - * object with `next` and `error` callbacks. The listener can be cancelled by - * calling the function that is returned when `onSnapshot` is called. - * - * NOTE: Although an `onCompletion` callback can be provided, it will - * never be called because the snapshot stream is never-ending. - * - * @param options Options controlling the listen behavior. - * @param onNext A callback to be called every time a new `QuerySnapshot` - * is available. - * @param onError A callback to be called if the listen fails or is - * cancelled. No further callbacks will occur. - * @return An unsubscribe function that can be called to cancel - * the snapshot listener. - */ - onSnapshot( - options: SnapshotListenOptions, - onNext: (snapshot: QuerySnapshot) => void, - onError?: (error: FirestoreError) => void, - onCompletion?: () => void - ): () => void; - - /** - * Applies a custom data converter to this Query, allowing you to use your - * own custom model objects with Firestore. When you call get() on the - * returned Query, the provided converter will convert between Firestore - * data and your custom type U. - * - * Passing in `null` as the converter parameter removes the current - * converter. - * - * @param converter Converts objects to and from Firestore. Passing in - * `null` removes the current converter. - * @return A Query that uses the provided converter. - */ - withConverter(converter: null): Query; - /** - * Applies a custom data converter to this Query, allowing you to use your - * own custom model objects with Firestore. When you call get() on the - * returned Query, the provided converter will convert between Firestore - * data and your custom type U. - * - * Passing in `null` as the converter parameter removes the current - * converter. - * - * @param converter Converts objects to and from Firestore. Passing in - * `null` removes the current converter. - * @return A Query that uses the provided converter. - */ - withConverter(converter: FirestoreDataConverter): Query; - } - - /** - * A `QuerySnapshot` contains zero or more `DocumentSnapshot` objects - * representing the results of a query. The documents can be accessed as an - * array via the `docs` property or enumerated using the `forEach` method. The - * number of documents can be determined via the `empty` and `size` - * properties. - */ - export class QuerySnapshot { - private constructor(); - - /** - * The query on which you called `get` or `onSnapshot` in order to get this - * `QuerySnapshot`. - */ - readonly query: Query; - /** - * Metadata about this snapshot, concerning its source and if it has local - * modifications. - */ - readonly metadata: SnapshotMetadata; - - /** An array of all the documents in the `QuerySnapshot`. */ - readonly docs: Array>; - - /** The number of documents in the `QuerySnapshot`. */ - readonly size: number; - - /** True if there are no documents in the `QuerySnapshot`. */ - readonly empty: boolean; - - /** - * Returns an array of the documents changes since the last snapshot. If this - * is the first snapshot, all documents will be in the list as added changes. - * - * @param options `SnapshotListenOptions` that control whether metadata-only - * changes (i.e. only `DocumentSnapshot.metadata` changed) should trigger - * snapshot events. - */ - docChanges(options?: SnapshotListenOptions): Array>; - - /** - * Enumerates all of the documents in the `QuerySnapshot`. - * - * @param callback A callback to be called with a `QueryDocumentSnapshot` for - * each document in the snapshot. - * @param thisArg The `this` binding for the callback. - */ - forEach( - callback: (result: QueryDocumentSnapshot) => void, - thisArg?: any - ): void; - - /** - * Returns true if this `QuerySnapshot` is equal to the provided one. - * - * @param other The `QuerySnapshot` to compare against. - * @return true if this `QuerySnapshot` is equal to the provided one. - */ - isEqual(other: QuerySnapshot): boolean; - } - - /** - * The type of a `DocumentChange` may be 'added', 'removed', or 'modified'. - */ - export type DocumentChangeType = 'added' | 'removed' | 'modified'; - - /** - * A `DocumentChange` represents a change to the documents matching a query. - * It contains the document affected and the type of change that occurred. - */ - export interface DocumentChange { - /** The type of change ('added', 'modified', or 'removed'). */ - readonly type: DocumentChangeType; - - /** The document affected by this change. */ - readonly doc: QueryDocumentSnapshot; - - /** - * The index of the changed document in the result set immediately prior to - * this `DocumentChange` (i.e. supposing that all prior `DocumentChange` objects - * have been applied). Is -1 for 'added' events. - */ - readonly oldIndex: number; - - /** - * The index of the changed document in the result set immediately after - * this `DocumentChange` (i.e. supposing that all prior `DocumentChange` - * objects and the current `DocumentChange` object have been applied). - * Is -1 for 'removed' events. - */ - readonly newIndex: number; - } - - /** - * A `CollectionReference` object can be used for adding documents, getting - * document references, and querying for documents (using the methods - * inherited from `Query`). - */ - export class CollectionReference extends Query { - private constructor(); - - /** The collection's identifier. */ - readonly id: string; - - /** - * A reference to the containing `DocumentReference` if this is a subcollection. - * If this isn't a subcollection, the reference is null. - */ - readonly parent: DocumentReference | null; - - /** - * A string representing the path of the referenced collection (relative - * to the root of the database). - */ - readonly path: string; - - /** - * Get a `DocumentReference` for the document within the collection at the - * specified path. If no path is specified, an automatically-generated - * unique ID will be used for the returned DocumentReference. - * - * @param documentPath A slash-separated path to a document. - * @return The `DocumentReference` instance. - */ - doc(documentPath?: string): DocumentReference; - - /** - * Add a new document to this collection with the specified data, assigning - * it a document ID automatically. - * - * @param data An Object containing the data for the new document. - * @return A Promise resolved with a `DocumentReference` pointing to the - * newly created document after it has been written to the backend. - */ - add(data: T): Promise>; - - /** - * Returns true if this `CollectionReference` is equal to the provided one. - * - * @param other The `CollectionReference` to compare against. - * @return true if this `CollectionReference` is equal to the provided one. - */ - isEqual(other: CollectionReference): boolean; - - /** - * Applies a custom data converter to this CollectionReference, allowing you - * to use your own custom model objects with Firestore. When you call add() - * on the returned CollectionReference instance, the provided converter will - * convert between Firestore data and your custom type U. - * - * Passing in `null` as the converter parameter removes the current - * converter. - * - * @param converter Converts objects to and from Firestore. Passing in - * `null` removes the current converter. - * @return A CollectionReference that uses the provided converter. - */ - withConverter(converter: null): CollectionReference; - /** - * Applies a custom data converter to this CollectionReference, allowing you - * to use your own custom model objects with Firestore. When you call add() - * on the returned CollectionReference instance, the provided converter will - * convert between Firestore data and your custom type U. - * - * Passing in `null` as the converter parameter removes the current - * converter. - * - * @param converter Converts objects to and from Firestore. Passing in - * `null` removes the current converter. - * @return A CollectionReference that uses the provided converter. - */ - withConverter( - converter: FirestoreDataConverter - ): CollectionReference; - } - - /** - * Sentinel values that can be used when writing document fields with `set()` - * or `update()`. - */ - export class FieldValue { - private constructor(); - - /** - * Returns a sentinel used with `set()` or `update()` to include a - * server-generated timestamp in the written data. - */ - static serverTimestamp(): FieldValue; - - /** - * Returns a sentinel for use with `update()` to mark a field for deletion. - */ - static delete(): FieldValue; - - /** - * Returns a special value that can be used with `set()` or `update()` that tells - * the server to union the given elements with any array value that already - * exists on the server. Each specified element that doesn't already exist in - * the array will be added to the end. If the field being modified is not - * already an array it will be overwritten with an array containing exactly - * the specified elements. - * - * @param elements The elements to union into the array. - * @return The FieldValue sentinel for use in a call to `set()` or `update()`. - */ - static arrayUnion(...elements: any[]): FieldValue; - - /** - * Returns a special value that can be used with `set()` or `update()` that tells - * the server to remove the given elements from any array value that already - * exists on the server. All instances of each element specified will be - * removed from the array. If the field being modified is not already an - * array it will be overwritten with an empty array. - * - * @param elements The elements to remove from the array. - * @return The FieldValue sentinel for use in a call to `set()` or `update()`. - */ - static arrayRemove(...elements: any[]): FieldValue; - - /** - * Returns a special value that can be used with `set()` or `update()` that tells - * the server to increment the field's current value by the given value. - * - * If either the operand or the current field value uses floating point precision, - * all arithmetic follows IEEE 754 semantics. If both values are integers, - * values outside of JavaScript's safe number range (`Number.MIN_SAFE_INTEGER` to - * `Number.MAX_SAFE_INTEGER`) are also subject to precision loss. Furthermore, - * once processed by the Firestore backend, all integer operations are capped - * between -2^63 and 2^63-1. - * - * If the current field value is not of type `number`, or if the field does not - * yet exist, the transformation sets the field to the given value. - * - * @param n The value to increment by. - * @return The FieldValue sentinel for use in a call to `set()` or `update()`. - */ - static increment(n: number): FieldValue; - - /** - * Returns true if this `FieldValue` is equal to the provided one. - * - * @param other The `FieldValue` to compare against. - * @return true if this `FieldValue` is equal to the provided one. - */ - isEqual(other: FieldValue): boolean; - } - - /** - * A FieldPath refers to a field in a document. The path may consist of a - * single field name (referring to a top-level field in the document), or a - * list of field names (referring to a nested field in the document). - * - * Create a FieldPath by providing field names. If more than one field - * name is provided, the path will point to a nested field in a document. - * - */ - export class FieldPath { - /** - * Creates a FieldPath from the provided field names. If more than one field - * name is provided, the path will point to a nested field in a document. - * - * @param fieldNames A list of field names. - */ - constructor(...fieldNames: string[]); - - /** - * Returns a special sentinel `FieldPath` to refer to the ID of a document. - * It can be used in queries to sort or filter by the document ID. - */ - static documentId(): FieldPath; - - /** - * Returns true if this `FieldPath` is equal to the provided one. - * - * @param other The `FieldPath` to compare against. - * @return true if this `FieldPath` is equal to the provided one. - */ - isEqual(other: FieldPath): boolean; - } - - /** - * The set of Firestore status codes. The codes are the same at the ones - * exposed by gRPC here: - * https://github.com/grpc/grpc/blob/master/doc/statuscodes.md - * - * Possible values: - * - 'cancelled': The operation was cancelled (typically by the caller). - * - 'unknown': Unknown error or an error from a different error domain. - * - 'invalid-argument': Client specified an invalid argument. Note that this - * differs from 'failed-precondition'. 'invalid-argument' indicates - * arguments that are problematic regardless of the state of the system - * (e.g. an invalid field name). - * - 'deadline-exceeded': Deadline expired before operation could complete. - * For operations that change the state of the system, this error may be - * returned even if the operation has completed successfully. For example, - * a successful response from a server could have been delayed long enough - * for the deadline to expire. - * - 'not-found': Some requested document was not found. - * - 'already-exists': Some document that we attempted to create already - * exists. - * - 'permission-denied': The caller does not have permission to execute the - * specified operation. - * - 'resource-exhausted': Some resource has been exhausted, perhaps a - * per-user quota, or perhaps the entire file system is out of space. - * - 'failed-precondition': Operation was rejected because the system is not - * in a state required for the operation's execution. - * - 'aborted': The operation was aborted, typically due to a concurrency - * issue like transaction aborts, etc. - * - 'out-of-range': Operation was attempted past the valid range. - * - 'unimplemented': Operation is not implemented or not supported/enabled. - * - 'internal': Internal errors. Means some invariants expected by - * underlying system has been broken. If you see one of these errors, - * something is very broken. - * - 'unavailable': The service is currently unavailable. This is most likely - * a transient condition and may be corrected by retrying with a backoff. - * - 'data-loss': Unrecoverable data loss or corruption. - * - 'unauthenticated': The request does not have valid authentication - * credentials for the operation. - */ - export type FirestoreErrorCode = - | 'cancelled' - | 'unknown' - | 'invalid-argument' - | 'deadline-exceeded' - | 'not-found' - | 'already-exists' - | 'permission-denied' - | 'resource-exhausted' - | 'failed-precondition' - | 'aborted' - | 'out-of-range' - | 'unimplemented' - | 'internal' - | 'unavailable' - | 'data-loss' - | 'unauthenticated'; - - /** An error returned by a Firestore operation. */ - // TODO(b/63008957): FirestoreError should extend firebase.FirebaseError - export interface FirestoreError { - code: FirestoreErrorCode; - message: string; - name: string; - stack?: string; - } - - export type EmulatorMockTokenOptions = firebase.EmulatorMockTokenOptions; -} - -export default firebase; -export as namespace firebase; diff --git a/packages/firebase/package.json b/packages/firebase/package.json index 4e5ef0a21e6..d72f9360fe5 100644 --- a/packages/firebase/package.json +++ b/packages/firebase/package.json @@ -212,9 +212,7 @@ }, "scripts": { "build": "rollup -c && yarn build:compat", - "build:release": "rollup -c rollup.config.release.js && yarn build:compat:release", "build:compat": "rollup -c compat/rollup.config.js", - "build:compat:release": "rollup -c compat/rollup.config.release.js", "dev": "rollup -c -w", "test": "echo 'No test suite for firebase wrapper'", "test:ci": "echo 'No test suite for firebase wrapper'" diff --git a/packages/firebase/rollup.config.release.js b/packages/firebase/rollup.config.release.js deleted file mode 100644 index 89b4be10c6d..00000000000 --- a/packages/firebase/rollup.config.release.js +++ /dev/null @@ -1,154 +0,0 @@ -/** - * @license - * Copyright 2020 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import appPkg from './app/package.json'; -import commonjs from '@rollup/plugin-commonjs'; -import { importPathTransformer } from '../../scripts/exp/ts-transform-import-path'; -import json from '@rollup/plugin-json'; -import pkg from './package.json'; -import { resolve } from 'path'; -import resolveModule from '@rollup/plugin-node-resolve'; -import rollupTypescriptPlugin from 'rollup-plugin-typescript2'; -import sourcemaps from 'rollup-plugin-sourcemaps'; -import typescript from 'typescript'; -import alias from '@rollup/plugin-alias'; -import { terser } from 'rollup-plugin-terser'; - -// remove -exp from dependencies name -const deps = Object.keys(pkg.dependencies || {}).map(name => - name.replace('-exp', '') -); - -const plugins = [sourcemaps(), resolveModule(), json(), commonjs()]; - -const typescriptPlugin = rollupTypescriptPlugin({ - typescript, - transformers: [importPathTransformer] -}); - -const typescriptPluginCDN = rollupTypescriptPlugin({ - typescript, - tsconfigOverride: { - compilerOptions: { - declaration: false - } - } -}); - -/** - * Individual Component Builds - */ -const appBuilds = [ - /** - * App Browser Builds - */ - { - input: 'app/index.ts', - output: [ - { file: resolve('app', appPkg.main), format: 'cjs', sourcemap: true }, - { file: resolve('app', appPkg.module), format: 'es', sourcemap: true } - ], - plugins: [...plugins, typescriptPlugin], - external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)) - } -]; - -const componentBuilds = pkg.components - // The "app" component is treated differently because it doesn't depend on itself. - .filter(component => component !== 'app') - .map(component => { - const pkg = require(`./${component}/package.json`); - - return [ - { - input: `${component}/index.ts`, - output: [ - { - file: resolve(component, pkg.main), - format: 'cjs', - sourcemap: true - }, - { - file: resolve(component, pkg.module), - format: 'es', - sourcemap: true - } - ], - plugins: [...plugins, typescriptPlugin], - external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)) - } - ]; - }) - .reduce((a, b) => a.concat(b), []); - -/** - * CDN script builds - */ -const FIREBASE_APP_URL = `https://www.gstatic.com/firebasejs/${pkg.version}/firebase-app.js`; -const cdnBuilds = [ - { - input: 'app/index.cdn.ts', - output: { - file: 'firebase-app.js', - sourcemap: true, - format: 'es' - }, - plugins: [ - ...plugins, - typescriptPluginCDN, - terser({ - format: { - comments: false - } - }) - ] - }, - ...pkg.components - .filter(component => component !== 'app') - .map(component => { - const pkg = require(`./${component}/package.json`); - // It is needed for handling sub modules, for example firestore/lite which should produce firebase-firestore-lite.js - // Otherwise, we will create a directory with '/' in the name. - const componentName = component.replace('/', '-'); - - return { - input: `${component}/index.ts`, - output: { - file: `firebase-${componentName}.js`, - sourcemap: true, - format: 'es' - }, - plugins: [ - ...plugins, - typescriptPluginCDN, - alias({ - entries: { - '@firebase/app': FIREBASE_APP_URL, - '@firebase/installations': '@firebase/installations-exp' - } - }), - terser({ - format: { - comments: false - } - }) - ], - external: [FIREBASE_APP_URL] - }; - }) -]; -export default [...appBuilds, ...componentBuilds, ...cdnBuilds]; From 6b5e12a37f6f79df41e1fb1eca5d1d11adb7232a Mon Sep 17 00:00:00 2001 From: Feiyang1 Date: Thu, 19 Aug 2021 17:16:35 -0700 Subject: [PATCH 17/38] update changeset config --- .changeset/config.json | 22 ++-------------------- 1 file changed, 2 insertions(+), 20 deletions(-) diff --git a/.changeset/config.json b/.changeset/config.json index 8a7e96564c6..4121335cd5a 100644 --- a/.changeset/config.json +++ b/.changeset/config.json @@ -15,27 +15,9 @@ "firebase-messaging-integration-test", "firebase-compat-interop-test", "firebase-compat-typings-test", - "@firebase/app-compat", - "@firebase/app-exp", - "@firebase/app-check-compat", - "@firebase/app-check-exp", - "@firebase/analytics-compat", - "@firebase/analytics-exp", - "@firebase/auth-exp", - "@firebase/auth-compat", - "@firebase/functions-compat", - "@firebase/functions-exp", - "@firebase/installations-exp", - "@firebase/installations-compat", - "@firebase/messaging-exp", - "@firebase/messaging-compat", - "@firebase/performance-exp", - "@firebase/performance-compat", - "@firebase/remote-config-exp", - "@firebase/remote-config-compat", - "firebase-exp", "@firebase/changelog-generator", - "firebase-size-analysis" + "firebase-size-analysis", + "@firebase/rules-unit-testing" ], "___experimentalUnsafeOptions_WILL_CHANGE_IN_PATCH": { "onlyUpdatePeerDependentsWhenOutOfRange": true, From 2e488c97ee6cdaba21067e8abec6502038a45305 Mon Sep 17 00:00:00 2001 From: Feiyang1 Date: Thu, 19 Aug 2021 17:18:41 -0700 Subject: [PATCH 18/38] update build scripts --- package.json | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/package.json b/package.json index 1e42a3803b3..839f594752e 100644 --- a/package.json +++ b/package.json @@ -22,20 +22,15 @@ ], "scripts": { "dev": "lerna run --parallel --scope @firebase/* --scope firebase dev", - "build": "lerna run --scope @firebase/* --scope firebase build", - "build:exp": "lerna run --scope @firebase/*-exp --scope @firebase/*-compat --scope firebase-exp build", - "build:release": "lerna run --scope @firebase/app-exp build:deps && lerna run --scope @firebase/* --scope firebase --ignore @firebase/*-exp --ignore @firebase/*-compat build", + "build": "lerna run --scope @firebase/* --scope firebase --ignore @firebase/rules-unit-testing build", "build:changed": "ts-node-script scripts/ci-test/build_changed.ts", "link:packages": "lerna exec --scope @firebase/* --scope firebase -- yarn link", "stage:packages": "./scripts/prepublish.sh", "repl": "node tools/repl.js", "release": "ts-node-script scripts/release/cli.ts", - "release:exp": "ts-node-script scripts/exp/release.ts", "pretest": "node tools/pretest.js", "test": "lerna run --concurrency 4 --stream test", "test:ci": "lerna run --concurrency 4 test:ci", - "test:release": "lerna run --concurrency 4 --ignore @firebase/*-exp --ignore firebase-exp --ignore @firebase/*-compat test:ci", - "test:exp": "lerna run --concurrency 4 --scope @firebase/*-exp --scope firebase-exp --scope @firebase/*-compat --stream test", "pretest:coverage": "mkdirp coverage", "ci:coverage": "lcov-result-merger 'packages/**/lcov.info' 'lcov-all.info'", "test:coverage": "lcov-result-merger 'packages/**/lcov.info' | coveralls", From 79bfb70692029b59e93dbb85f31ef2fc7d51657b Mon Sep 17 00:00:00 2001 From: Feiyang1 Date: Thu, 19 Aug 2021 17:20:43 -0700 Subject: [PATCH 19/38] update release script --- package.json | 3 ++- scripts/release/utils/yarn.ts | 6 +++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 839f594752e..62b50a1b38b 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "dev": "lerna run --parallel --scope @firebase/* --scope firebase dev", "build": "lerna run --scope @firebase/* --scope firebase --ignore @firebase/rules-unit-testing build", "build:changed": "ts-node-script scripts/ci-test/build_changed.ts", + "release:prepare": "lerna run --scope @firebase/* add-compat-overloads && lerna run --scope @firebase/* typings:public", "link:packages": "lerna exec --scope @firebase/* --scope firebase -- yarn link", "stage:packages": "./scripts/prepublish.sh", "repl": "node tools/repl.js", @@ -160,4 +161,4 @@ "pre-commit": "node tools/gitHooks/precommit.js" } } -} +} \ No newline at end of file diff --git a/scripts/release/utils/yarn.ts b/scripts/release/utils/yarn.ts index e30e9e14eb5..55feedee241 100644 --- a/scripts/release/utils/yarn.ts +++ b/scripts/release/utils/yarn.ts @@ -31,10 +31,14 @@ export async function reinstallDeps() { export async function buildPackages() { const spinner = ora(' Building Packages').start(); - await spawn('yarn', ['build:release'], { + await spawn('yarn', ['build'], { cwd: root, stdio: 'inherit' }); + await spawn('yarn', ["release:prepare"], { + cwd: root, + stdio: 'inherit' + }) spinner.stopAndPersist({ symbol: '✅' }); From 49c660b9b0170fcca0dfcc016783a3c020231f8b Mon Sep 17 00:00:00 2001 From: Feiyang1 Date: Thu, 19 Aug 2021 17:32:17 -0700 Subject: [PATCH 20/38] fix functions typings --- packages/functions/package.json | 5 +++-- packages/functions/src/config.ts | 2 +- packages/messaging-types/index.d.ts | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/packages/functions/package.json b/packages/functions/package.json index 3a9a475bbd4..d5780aa92d1 100644 --- a/packages/functions/package.json +++ b/packages/functions/package.json @@ -25,7 +25,8 @@ "test:emulator": "env FIREBASE_FUNCTIONS_EMULATOR_ORIGIN=http://localhost:5005 run-p test:node", "api-report": "api-extractor run --local --verbose", "doc": "api-documenter markdown --input temp --output docs", - "build:doc": "yarn build && yarn doc" + "build:doc": "yarn build && yarn doc", + "typings:public": "node ../../scripts/exp/use_typings.js ./dist/functions-public.d.ts" }, "license": "Apache-2.0", "peerDependencies": { @@ -46,7 +47,7 @@ "bugs": { "url": "https://github.com/firebase/firebase-js-sdk/issues" }, - "typings": "dist/functions-public.d.ts", + "typings": "dist/src/index.d.ts", "dependencies": { "@firebase/component": "0.5.6", "@firebase/messaging-types": "0.5.0", diff --git a/packages/functions/src/config.ts b/packages/functions/src/config.ts index 31f607eee93..a2d8ce0ff28 100644 --- a/packages/functions/src/config.ts +++ b/packages/functions/src/config.ts @@ -36,7 +36,7 @@ export function registerFunctions(fetchImpl: typeof fetch): void { // Dependencies const app = container.getProvider('app').getImmediate(); const authProvider = container.getProvider('auth-internal'); - const messagingProvider = container.getProvider('messaging'); + const messagingProvider = container.getProvider('messaging-compat'); const appCheckProvider = container.getProvider(APP_CHECK_INTERNAL_NAME); // eslint-disable-next-line @typescript-eslint/no-explicit-any diff --git a/packages/messaging-types/index.d.ts b/packages/messaging-types/index.d.ts index a8eacc04597..c1a30985842 100644 --- a/packages/messaging-types/index.d.ts +++ b/packages/messaging-types/index.d.ts @@ -86,7 +86,7 @@ export interface FirebaseMessaging { usePublicVapidKey(b64PublicKey: string): void; } -export type FirebaseMessagingName = 'messaging'; +export type FirebaseMessagingName = 'messaging-compat'; declare module '@firebase/component' { interface NameServiceMapping { From 16ab972d9158926b451d823e3303741943bc9304 Mon Sep 17 00:00:00 2001 From: Feiyang1 Date: Thu, 19 Aug 2021 17:33:54 -0700 Subject: [PATCH 21/38] remove redundant typings --- packages/functions-compat/src/register.ts | 8 -------- 1 file changed, 8 deletions(-) diff --git a/packages/functions-compat/src/register.ts b/packages/functions-compat/src/register.ts index 2e844ee7d9a..2b35f7a3888 100644 --- a/packages/functions-compat/src/register.ts +++ b/packages/functions-compat/src/register.ts @@ -31,14 +31,6 @@ import { Functions as FunctionsServiceExp } from '@firebase/functions'; const DEFAULT_REGION = 'us-central1'; -declare module '@firebase/component' { - interface NameServiceMapping { - 'app-compat': FirebaseApp; - 'functions-compat': FunctionsService; - 'functions': FunctionsServiceExp; - } -} - const factory: InstanceFactory<'functions-compat'> = ( container: ComponentContainer, { instanceIdentifier: regionOrCustomDomain }: InstanceFactoryOptions From 727b5bfa13a384abdeffa4c8630faf6302d86ed9 Mon Sep 17 00:00:00 2001 From: Feiyang1 Date: Thu, 19 Aug 2021 17:39:40 -0700 Subject: [PATCH 22/38] update path --- packages/app/src/constants.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/app/src/constants.ts b/packages/app/src/constants.ts index 3aa9ca14440..e251c75647b 100644 --- a/packages/app/src/constants.ts +++ b/packages/app/src/constants.ts @@ -24,7 +24,7 @@ import { name as appCheckName } from '../../../packages/app-check/package.json'; import { name as authName } from '../../../packages/auth/package.json'; import { name as authCompatName } from '../../../packages/auth-compat/package.json'; import { name as databaseName } from '../../../packages/database/package.json'; -import { name as databaseCompatName } from '../../../packages/database/compat/package.json'; +import { name as databaseCompatName } from '../../../packages/database-compat/package.json'; import { name as functionsName } from '../../../packages/functions/package.json'; import { name as functionsCompatName } from '../../../packages/functions-compat/package.json'; import { name as installationsName } from '../../../packages/installations/package.json'; @@ -36,9 +36,9 @@ import { name as performanceCompatName } from '../../../packages/performance-com import { name as remoteConfigName } from '../../../packages/remote-config/package.json'; import { name as remoteConfigCompatName } from '../../../packages/remote-config-compat/package.json'; import { name as storageName } from '../../../packages/storage/package.json'; -import { name as storageCompatName } from '../../../packages/storage/compat/package.json'; +import { name as storageCompatName } from '../../../packages/storage-compat/package.json'; import { name as firestoreName } from '../../../packages/firestore/package.json'; -import { name as firestoreCompatName } from '../../../packages/firestore/compat/package.json'; +import { name as firestoreCompatName } from '../../../packages/firestore-compat/package.json'; import { name as packageName } from '../../../packages/firebase/package.json'; /** From 4654c7015a83a0367744d48b6d0059f080c984e7 Mon Sep 17 00:00:00 2001 From: Feiyang1 Date: Fri, 20 Aug 2021 14:05:23 -0700 Subject: [PATCH 23/38] treat external dependencies correctly --- packages/app/rollup.config.js | 4 +--- packages/firebase/compat/rollup.config.js | 10 +++++----- packages/firebase/rollup.config.js | 4 ++-- 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/packages/app/rollup.config.js b/packages/app/rollup.config.js index 0a2242857a9..586529ad974 100644 --- a/packages/app/rollup.config.js +++ b/packages/app/rollup.config.js @@ -20,9 +20,7 @@ import typescript from 'typescript'; import json from '@rollup/plugin-json'; import pkg from './package.json'; -const deps = [ - ...Object.keys(Object.assign({}, pkg.peerDependencies, pkg.dependencies)) -]; +const deps = Object.keys(Object.assign({}, pkg.peerDependencies, pkg.dependencies)); /** * ES5 Builds diff --git a/packages/firebase/compat/rollup.config.js b/packages/firebase/compat/rollup.config.js index 55de6caf393..dd8ce215c63 100644 --- a/packages/firebase/compat/rollup.config.js +++ b/packages/firebase/compat/rollup.config.js @@ -105,7 +105,7 @@ const appBuilds = [ } ], plugins: [...plugins, typescriptPlugin], - external + external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)), }, /** * App UMD Builds @@ -143,7 +143,7 @@ const componentBuilds = compatPkg.components } ], plugins: [...plugins, typescriptPlugin], - external + external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)), }, { input: `${__dirname}/${component}/index.ts`, @@ -172,7 +172,7 @@ const completeBuilds = [ } ], plugins: [...plugins, typescriptPlugin], - external + external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)), }, { input: `${__dirname}/index.cdn.ts`, @@ -195,7 +195,7 @@ const completeBuilds = [ sourcemap: true }, plugins: [...plugins, typescriptPlugin], - external + external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)), }, /** * App React Native Builds @@ -208,7 +208,7 @@ const completeBuilds = [ sourcemap: true }, plugins: [...plugins, typescriptPlugin], - external + external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)), }, /** * Performance script Build diff --git a/packages/firebase/rollup.config.js b/packages/firebase/rollup.config.js index b742052c059..608db65f89c 100644 --- a/packages/firebase/rollup.config.js +++ b/packages/firebase/rollup.config.js @@ -56,7 +56,7 @@ const appBuilds = [ { file: resolve('app', appPkg.module), format: 'es', sourcemap: true } ], plugins: [...plugins, typescriptPlugin], - external + external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)) } ]; @@ -81,7 +81,7 @@ const componentBuilds = pkg.components } ], plugins: [...plugins, typescriptPlugin], - external + external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)), } ]; }) From 397bab72fc7030cc70ca0c2280a0cf4962a6f22c Mon Sep 17 00:00:00 2001 From: Feiyang1 Date: Fri, 20 Aug 2021 22:33:15 -0700 Subject: [PATCH 24/38] fix lint --- packages/firestore-compat/package.json | 45 ----------------------- packages/functions-compat/src/register.ts | 4 +- 2 files changed, 1 insertion(+), 48 deletions(-) delete mode 100644 packages/firestore-compat/package.json diff --git a/packages/firestore-compat/package.json b/packages/firestore-compat/package.json deleted file mode 100644 index b6c8c921213..00000000000 --- a/packages/firestore-compat/package.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "name": "@firebase/firestore-compat", - "version": "0.0.1", - "description": "The Cloud Firestore component of the Firebase JS SDK.", - "author": "Firebase (https://firebase.google.com/)", - "main": "dist/index.node.cjs.js", - "react-native": "dist/index.rn.js", - "browser": "dist/index.esm2017.js", - "module": "dist/index.esm2017.js", - "esm5": "dist/index.esm5.js", - "scripts": { - "lint": "eslint -c .eslintrc.js '**/*.ts' --ignore-path '../../.gitignore'", - "lint:fix": "eslint --fix -c .eslintrc.js '**/*.ts' --ignore-path '../../.gitignore'", - "prettier": "prettier --write '*.js' '*.ts' '@(src|test)/**/*.ts'", - "build": "rollup -c ./rollup.config.js", - "build:console": "node tools/console.build.js", - "build:deps": "lerna run --scope @firebase/firestore-compat --include-dependencies build", - "build:release": "yarn build && yarn add-compat-overloads", - "test": "echo 'tested as part of firestore'", - "add-compat-overloads": "ts-node-script ../../scripts/exp/create-overloads.ts -i ../firestore/dist/index.d.ts -o dist/src/index.d.ts -a -r Firestore:types.FirebaseFirestore -r CollectionReference:types.CollectionReference -r DocumentReference:types.DocumentReference -r Query:types.Query -r FirebaseApp:FirebaseAppCompat --moduleToEnhance @firebase/firestore" - }, - "peerDependencies": { - "@firebase/app-compat": "0.x" - }, - "dependencies": { - "@firebase/component": "0.5.5", - "@firebase/firestore": "2.3.10", - "@firebase/util": "1.2.0", - "@firebase/firestore-types": "2.3.0", - "tslib": "^2.1.0" - }, - "devDependencies": { - "@types/eslint": "7.2.10", - "rollup": "2.52.2", - "rollup-plugin-sourcemaps": "0.6.3", - "rollup-plugin-terser": "7.0.2", - "rollup-plugin-typescript2": "0.30.0", - "@rollup/plugin-node-resolve": "11.2.0", - "ts-node": "9.1.1", - "typescript": "4.2.2" - }, - "license": "Apache-2.0", - "typings": "dist/src/index.d.ts" - } - \ No newline at end of file diff --git a/packages/functions-compat/src/register.ts b/packages/functions-compat/src/register.ts index 2b35f7a3888..6a83f8fd265 100644 --- a/packages/functions-compat/src/register.ts +++ b/packages/functions-compat/src/register.ts @@ -16,8 +16,7 @@ */ import firebase, { - _FirebaseNamespace, - FirebaseApp + _FirebaseNamespace } from '@firebase/app-compat'; import { FunctionsService } from './service'; import { @@ -27,7 +26,6 @@ import { ComponentContainer, InstanceFactoryOptions } from '@firebase/component'; -import { Functions as FunctionsServiceExp } from '@firebase/functions'; const DEFAULT_REGION = 'us-central1'; From 9d7ae92b4369a314794ce7ff7682c3d39f3e0c3b Mon Sep 17 00:00:00 2001 From: Feiyang1 Date: Fri, 20 Aug 2021 22:36:35 -0700 Subject: [PATCH 25/38] remove firestore-compat references --- packages/app/src/constants.ts | 4 ++-- packages/firebase/package.json | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/app/src/constants.ts b/packages/app/src/constants.ts index e251c75647b..a897a5dbce3 100644 --- a/packages/app/src/constants.ts +++ b/packages/app/src/constants.ts @@ -38,7 +38,7 @@ import { name as remoteConfigCompatName } from '../../../packages/remote-config- import { name as storageName } from '../../../packages/storage/package.json'; import { name as storageCompatName } from '../../../packages/storage-compat/package.json'; import { name as firestoreName } from '../../../packages/firestore/package.json'; -import { name as firestoreCompatName } from '../../../packages/firestore-compat/package.json'; +// import { name as firestoreCompatName } from '../../../packages/firestore-compat/package.json'; import { name as packageName } from '../../../packages/firebase/package.json'; /** @@ -72,7 +72,7 @@ export const PLATFORM_LOG_STRING = { [storageName]: 'fire-gcs', [storageCompatName]: 'fire-gcs-compat', [firestoreName]: 'fire-fst', - [firestoreCompatName]: 'fire-fst-compat', + // [firestoreCompatName]: 'fire-fst-compat', 'fire-js': 'fire-js', // Platform identifier for JS SDK. [packageName]: 'fire-js-all' } as const; diff --git a/packages/firebase/package.json b/packages/firebase/package.json index d72f9360fe5..27833677549 100644 --- a/packages/firebase/package.json +++ b/packages/firebase/package.json @@ -226,7 +226,6 @@ "@firebase/database": "0.11.0", "@firebase/database-compat": "0.0.900", "@firebase/firestore": "2.4.0", - "@firebase/firestore-compat": "0.0.900", "@firebase/functions": "0.6.15", "@firebase/functions-compat": "0.0.900", "@firebase/installations": "0.4.32", From b9bf8406585a402360faabf632cc3f02b98a6117 Mon Sep 17 00:00:00 2001 From: Feiyang1 Date: Fri, 20 Aug 2021 23:07:30 -0700 Subject: [PATCH 26/38] fix build issues --- package.json | 2 +- packages/analytics-compat/src/index.ts | 6 - packages/app-check-compat/src/index.ts | 6 - packages/auth/package.json | 2 +- packages/database/src/api/Database.ts | 2 +- packages/database/src/core/util/util.ts | 9 +- packages/database/src/register.ts | 4 +- .../database/test/exp/integration.test.ts | 2 +- packages/firestore/externs.json | 4 +- packages/storage/src/api.ts | 2 +- packages/storage/src/index.ts | 4 +- packages/storage/src/public-types.ts | 2 +- packages/storage/src/service.ts | 2 +- .../test/integration/integration.test.ts | 4 +- packages/storage/test/unit/index.test.ts | 2 +- yarn.lock | 129 +++--------------- 16 files changed, 37 insertions(+), 145 deletions(-) diff --git a/package.json b/package.json index 62b50a1b38b..6b258ed2265 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ ], "scripts": { "dev": "lerna run --parallel --scope @firebase/* --scope firebase dev", - "build": "lerna run --scope @firebase/* --scope firebase --ignore @firebase/rules-unit-testing build", + "build": "lerna run --scope @firebase/* --scope firebase --ignore @firebase/rules-unit-testing --ignore @firebase/firestore build", "build:changed": "ts-node-script scripts/ci-test/build_changed.ts", "release:prepare": "lerna run --scope @firebase/* add-compat-overloads && lerna run --scope @firebase/* typings:public", "link:packages": "lerna exec --scope @firebase/* --scope firebase -- yarn link", diff --git a/packages/analytics-compat/src/index.ts b/packages/analytics-compat/src/index.ts index e4b524fe7a3..2cc2dfec387 100644 --- a/packages/analytics-compat/src/index.ts +++ b/packages/analytics-compat/src/index.ts @@ -34,12 +34,6 @@ import { } from '@firebase/analytics'; import { EventName } from './constants'; -declare module '@firebase/component' { - interface NameServiceMapping { - 'analytics-compat': AnalyticsService; - } -} - const factory: InstanceFactory<'analytics-compat'> = ( container: ComponentContainer ) => { diff --git a/packages/app-check-compat/src/index.ts b/packages/app-check-compat/src/index.ts index becf792eab8..8229d6b508c 100644 --- a/packages/app-check-compat/src/index.ts +++ b/packages/app-check-compat/src/index.ts @@ -29,12 +29,6 @@ import { import { AppCheckService } from './service'; import { FirebaseAppCheck } from '@firebase/app-check-types'; -declare module '@firebase/component' { - interface NameServiceMapping { - 'appCheck-compat': AppCheckService; - } -} - const factory: InstanceFactory<'appCheck-compat'> = ( container: ComponentContainer ) => { diff --git a/packages/auth/package.json b/packages/auth/package.json index 3f5cab287bb..fe1961c4744 100644 --- a/packages/auth/package.json +++ b/packages/auth/package.json @@ -50,7 +50,7 @@ "@firebase/app": "0.x" }, "dependencies": { - "@firebase/component": "0.5.5", + "@firebase/component": "0.5.6", "@firebase/logger": "0.2.6", "@firebase/util": "1.2.0", "node-fetch": "2.6.1", diff --git a/packages/database/src/api/Database.ts b/packages/database/src/api/Database.ts index 3a3ac3db723..617cdd07d2a 100644 --- a/packages/database/src/api/Database.ts +++ b/packages/database/src/api/Database.ts @@ -22,7 +22,7 @@ _getProvider, FirebaseApp, getApp - } from '@firebase/app-exp'; + } from '@firebase/app'; import { FirebaseAuthInternalName } from '@firebase/auth-interop-types'; import { Provider } from '@firebase/component'; import { diff --git a/packages/database/src/core/util/util.ts b/packages/database/src/core/util/util.ts index 4f6a067efb1..89bc64d5b15 100644 --- a/packages/database/src/core/util/util.ts +++ b/packages/database/src/core/util/util.ts @@ -27,13 +27,8 @@ import { import { SessionStorage } from '../storage/storage'; -// TODO: revert to import { QueryContext } from '../view/EventRegistration'; once the modular SDK goes GA -/** - * This is part of a workaround for an issue in the no-modular '@firebase/database' where its typings - * reference types from `@firebase/app-exp`. - */ -// eslint-disable-next-line @typescript-eslint/no-explicit-any -type QueryContext = any; +import { QueryContext } from '../view/EventRegistration'; + declare const window: Window; // eslint-disable-next-line @typescript-eslint/no-explicit-any declare const Windows: any; diff --git a/packages/database/src/register.ts b/packages/database/src/register.ts index bd3f9f8456c..ee68bc252fe 100644 --- a/packages/database/src/register.ts +++ b/packages/database/src/register.ts @@ -19,7 +19,7 @@ import { _registerComponent, registerVersion, SDK_VERSION -} from '@firebase/app-exp'; +} from '@firebase/app'; import { Component, ComponentType } from '@firebase/component'; import { name, version } from '../package.json'; @@ -33,7 +33,7 @@ export function registerDatabase(variant?: string): void { new Component( 'database', (container, { instanceIdentifier: url }) => { - const app = container.getProvider('app-exp').getImmediate()!; + const app = container.getProvider('app').getImmediate()!; const authProvider = container.getProvider('auth-internal'); const appCheckProvider = container.getProvider('app-check-internal'); return repoManagerDatabaseFromApp( diff --git a/packages/database/test/exp/integration.test.ts b/packages/database/test/exp/integration.test.ts index f524ce9f546..0d0858c28c8 100644 --- a/packages/database/test/exp/integration.test.ts +++ b/packages/database/test/exp/integration.test.ts @@ -16,7 +16,7 @@ */ // eslint-disable-next-line import/no-extraneous-dependencies -import { initializeApp, deleteApp } from '@firebase/app-exp'; +import { initializeApp, deleteApp } from '@firebase/app'; import { Deferred } from '@firebase/util'; import { expect } from 'chai'; diff --git a/packages/firestore/externs.json b/packages/firestore/externs.json index 5b9cb8cda84..a5f2044fa30 100644 --- a/packages/firestore/externs.json +++ b/packages/firestore/externs.json @@ -14,12 +14,12 @@ "node_modules/typescript/lib/lib.es2017.string.d.ts", "packages/app-types/index.d.ts", "packages/app-types/private.d.ts", - "packages-exp/app-exp/dist/app-exp.d.ts", + "packages/app/dist/app.d.ts", "packages/auth-interop-types/index.d.ts", "packages/firestore/dist/lite/internal.d.ts", "packages/firestore/dist/exp/internal.d.ts", "packages/firestore-types/index.d.ts", - "packages/firebase/index.d.ts", + "packages/firebase/compat/index.d.ts", "packages/component/dist/src/component.d.ts", "packages/component/dist/src/provider.d.ts", "packages/component/dist/src/component_container.d.ts", diff --git a/packages/storage/src/api.ts b/packages/storage/src/api.ts index b729946c7a3..db06ec43288 100644 --- a/packages/storage/src/api.ts +++ b/packages/storage/src/api.ts @@ -15,7 +15,7 @@ * limitations under the License. */ // eslint-disable-next-line import/no-extraneous-dependencies -import { _getProvider, FirebaseApp, getApp } from '@firebase/app-exp'; +import { _getProvider, FirebaseApp, getApp } from '@firebase/app'; import { ref as refInternal, diff --git a/packages/storage/src/index.ts b/packages/storage/src/index.ts index ba2407bbe49..d200b1fb536 100644 --- a/packages/storage/src/index.ts +++ b/packages/storage/src/index.ts @@ -25,7 +25,7 @@ import { _registerComponent, registerVersion, SDK_VERSION -} from '@firebase/app-exp'; +} from '@firebase/app'; import { ConnectionPool } from '../src/implementation/connectionPool'; import { FirebaseStorageImpl } from '../src/service'; @@ -48,7 +48,7 @@ function factory( container: ComponentContainer, { instanceIdentifier: url }: InstanceFactoryOptions ): FirebaseStorage { - const app = container.getProvider('app-exp').getImmediate(); + const app = container.getProvider('app').getImmediate(); const authProvider = container.getProvider('auth-internal'); const appCheckProvider = container.getProvider('app-check-internal'); diff --git a/packages/storage/src/public-types.ts b/packages/storage/src/public-types.ts index 39b6276ccda..12b61c4a55a 100644 --- a/packages/storage/src/public-types.ts +++ b/packages/storage/src/public-types.ts @@ -16,7 +16,7 @@ */ // eslint-disable-next-line import/no-extraneous-dependencies -import { FirebaseApp, _FirebaseService } from '@firebase/app-exp'; +import { FirebaseApp, _FirebaseService } from '@firebase/app'; import { CompleteFn, FirebaseError, diff --git a/packages/storage/src/service.ts b/packages/storage/src/service.ts index 0848a2262b3..3f41f966ac7 100644 --- a/packages/storage/src/service.ts +++ b/packages/storage/src/service.ts @@ -25,7 +25,7 @@ import { Provider } from '@firebase/component'; import { FirebaseAuthInternalName } from '@firebase/auth-interop-types'; import { AppCheckInternalComponentName } from '@firebase/app-check-interop-types'; // eslint-disable-next-line import/no-extraneous-dependencies -import { FirebaseApp, FirebaseOptions } from '@firebase/app-exp'; +import { FirebaseApp, FirebaseOptions } from '@firebase/app'; import { CONFIG_STORAGE_BUCKET_KEY, DEFAULT_HOST, diff --git a/packages/storage/test/integration/integration.test.ts b/packages/storage/test/integration/integration.test.ts index 63b1c2c3cc9..c1f015c352e 100644 --- a/packages/storage/test/integration/integration.test.ts +++ b/packages/storage/test/integration/integration.test.ts @@ -16,9 +16,9 @@ */ // eslint-disable-next-line import/no-extraneous-dependencies -import { initializeApp, deleteApp, FirebaseApp } from '@firebase/app-exp'; +import { initializeApp, deleteApp, FirebaseApp } from '@firebase/app'; // eslint-disable-next-line import/no-extraneous-dependencies -import { getAuth, signInAnonymously } from '@firebase/auth-exp'; +import { getAuth, signInAnonymously } from '@firebase/auth'; import { getDownloadURL, getStorage, diff --git a/packages/storage/test/unit/index.test.ts b/packages/storage/test/unit/index.test.ts index 8f2a6b37785..ce26b7ec723 100644 --- a/packages/storage/test/unit/index.test.ts +++ b/packages/storage/test/unit/index.test.ts @@ -18,7 +18,7 @@ import { expect } from 'chai'; import { getStorage } from '../../src/index'; import { FirebaseStorageImpl } from '../../src/service'; // eslint-disable-next-line import/no-extraneous-dependencies -import { initializeApp, deleteApp } from '@firebase/app-exp'; +import { initializeApp, deleteApp } from '@firebase/app'; // eslint-disable-next-line @typescript-eslint/no-require-imports const PROJECT_CONFIG = require('../../../../config/project.json'); diff --git a/yarn.lock b/yarn.lock index dd12991a6c8..16066789560 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1349,87 +1349,32 @@ minimatch "^3.0.4" strip-json-comments "^3.1.1" -"@firebase/analytics@0.6.17": - version "0.6.17" - resolved "https://registry.npmjs.org/@firebase/analytics/-/analytics-0.6.17.tgz#61df8155f474e7eb1cc180dd7ba70c6f0100f102" - integrity sha512-Iiip24vQw7p+dBxoGWP2WvVqV2tOdLPjWw6OP6a+8vgss9PRsjKE2AAskruqveMUO4Ox5uPW65wdgeJxoFoMvQ== - dependencies: - "@firebase/analytics-types" "0.6.0" - "@firebase/component" "0.5.5" - "@firebase/installations" "0.4.31" - "@firebase/logger" "0.2.6" - "@firebase/util" "1.2.0" - tslib "^2.1.0" - -"@firebase/app-check@0.3.1": - version "0.3.1" - resolved "https://registry.npmjs.org/@firebase/app-check/-/app-check-0.3.1.tgz#78210513455ea6da437cb5fcf18239db9cd1e7de" - integrity sha512-5OWXzhXdtrmOqn2aN44FyNTwjlZJrip/3WC7UlMeUBPi3apuUgChHTolZ1oITszGdw52lP3r5SOCDtRsNtbkJg== +"@firebase/component@0.5.5": + version "0.5.5" + resolved "https://registry.npmjs.org/@firebase/component/-/component-0.5.5.tgz#849ccf7cbf0398a43058f274ffcd43620ae9521f" + integrity sha512-L41SdS/4a164jx2iGfakJgaBUPPBI3DI+RrUlmh3oHSUljTeCwfj/Nhcv3S7e2lyXsGFJtAyepfPUx4IQ05crw== dependencies: - "@firebase/app-check-interop-types" "0.1.0" - "@firebase/app-check-types" "0.3.1" - "@firebase/component" "0.5.5" - "@firebase/logger" "0.2.6" "@firebase/util" "1.2.0" tslib "^2.1.0" -"@firebase/app@0.6.29": - version "0.6.29" - resolved "https://registry.npmjs.org/@firebase/app/-/app-0.6.29.tgz#e2f88274b39917ab766f9fe73da48c353eaed557" - integrity sha512-duCzk9/BSVVsb5Y9b0rnvGSuD5zQA/JghiQsccRl+lA4xiUYjFudTU4cVFftkw+0zzeYBHn4KiVxchsva1O9dA== +"@firebase/database-types@0.7.3", "@firebase/database-types@^0.7.2": + version "0.7.3" + resolved "https://registry.npmjs.org/@firebase/database-types/-/database-types-0.7.3.tgz#819f16dd4c767c864b460004458620f265a3f735" + integrity sha512-dSOJmhKQ0nL8O4EQMRNGpSExWCXeHtH57gGg0BfNAdWcKhC8/4Y+qfKLfWXzyHvrSecpLmO0SmAi/iK2D5fp5A== dependencies: "@firebase/app-types" "0.6.3" - "@firebase/component" "0.5.5" - "@firebase/logger" "0.2.6" - "@firebase/util" "1.2.0" - dom-storage "2.1.0" - tslib "^2.1.0" - xmlhttprequest "1.8.0" - -"@firebase/functions@0.6.14": - version "0.6.14" - resolved "https://registry.npmjs.org/@firebase/functions/-/functions-0.6.14.tgz#f6b452a53dc15299595bd079dd6ed4afb59e1a8c" - integrity sha512-Gthru/wHPQqkn651MenVM+qKVFFqIyFcNT3qfJUacibqrKlvDtYtaCMjFGAkChuGnYzNVnXJIaNrIHkEIII4Hg== - dependencies: - "@firebase/component" "0.5.5" - "@firebase/functions-types" "0.4.0" - "@firebase/messaging-types" "0.5.0" - node-fetch "2.6.1" - tslib "^2.1.0" -"@firebase/installations@0.4.31": - version "0.4.31" - resolved "https://registry.npmjs.org/@firebase/installations/-/installations-0.4.31.tgz#dbde30c0542fb4343b075f0574d4e0d0f4b49aa7" - integrity sha512-qWolhAgMHvD3avsNCl+K8+untzoDDFQIRR8At8kyWMKKosy0vttdWTWzjvDoZbyKU6r0RNlxDUWAgV88Q8EudQ== +"@firebase/database@^0.10.0": + version "0.10.9" + resolved "https://registry.npmjs.org/@firebase/database/-/database-0.10.9.tgz#79f7b03cbe8a127dddfb7ea7748a3e923990f046" + integrity sha512-Jxi9SiE4cNOftO9YKlG71ccyWFw4kSM9AG/xYu6vWXUGBr39Uw1TvYougANOcU21Q0TP4J08VPGnOnpXk/FGbQ== dependencies: + "@firebase/auth-interop-types" "0.1.6" "@firebase/component" "0.5.5" - "@firebase/installations-types" "0.3.4" - "@firebase/util" "1.2.0" - idb "3.0.2" - tslib "^2.1.0" - -"@firebase/messaging@0.7.15": - version "0.7.15" - resolved "https://registry.npmjs.org/@firebase/messaging/-/messaging-0.7.15.tgz#d3b9a053331238480860c71385819babda2076f3" - integrity sha512-81t6iJtqMBJF5LHTjDhlHUpbPZOV6dKhW0TueAoON4omc0SaDXgf4nnk6JkvZRfdcuOaP8848Cv53tvZPFFAYQ== - dependencies: - "@firebase/component" "0.5.5" - "@firebase/installations" "0.4.31" - "@firebase/messaging-types" "0.5.0" - "@firebase/util" "1.2.0" - idb "3.0.2" - tslib "^2.1.0" - -"@firebase/performance@0.4.17": - version "0.4.17" - resolved "https://registry.npmjs.org/@firebase/performance/-/performance-0.4.17.tgz#b160a4352f682c1039b49ec9d24d6c473a31b3c3" - integrity sha512-uhDs9rhdMrGraYHcd3CTRkGtcNap4hp6rAHTwJNIX56Z3RzQ1VW2ea9vvesl7EjFtEIPU0jfdrS32wV+qer5DQ== - dependencies: - "@firebase/component" "0.5.5" - "@firebase/installations" "0.4.31" + "@firebase/database-types" "0.7.3" "@firebase/logger" "0.2.6" - "@firebase/performance-types" "0.0.13" "@firebase/util" "1.2.0" + faye-websocket "0.11.3" tslib "^2.1.0" "@firebase/polyfill@0.3.36": @@ -1441,16 +1386,11 @@ promise-polyfill "8.1.3" whatwg-fetch "2.0.4" -"@firebase/remote-config@0.1.42": - version "0.1.42" - resolved "https://registry.npmjs.org/@firebase/remote-config/-/remote-config-0.1.42.tgz#84573ac2f1ee49cb9d4327a25c5625f2e274695d" - integrity sha512-hWwtAZmYLB274bxjV2cdMYhyBCUUqbYErihGx3rMyab76D+VbIxOuKJb2z0DS67jQG+SA3pr9/MtWsTPHV/l9g== +"@firebase/util@1.2.0": + version "1.2.0" + resolved "https://registry.npmjs.org/@firebase/util/-/util-1.2.0.tgz#4d4e419bf8c9bc1bc51308d1953dc2e4353c0770" + integrity sha512-8W9TTGImXr9cu+oyjBJ7yjoEd/IVAv0pBZA4c1uIuKrpGZi2ee38m+8xlZOBRmsAaOU/tR9DXz1WF/oeM6Fb7Q== dependencies: - "@firebase/component" "0.5.5" - "@firebase/installations" "0.4.31" - "@firebase/logger" "0.2.6" - "@firebase/remote-config-types" "0.1.9" - "@firebase/util" "1.2.0" tslib "^2.1.0" "@google-cloud/common@^3.6.0": @@ -6621,11 +6561,6 @@ dom-serialize@^2.2.1: extend "^3.0.0" void-elements "^2.0.0" -dom-storage@2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/dom-storage/-/dom-storage-2.1.0.tgz#00fb868bc9201357ea243c7bcfd3304c1e34ea39" - integrity sha512-g6RpyWXzl0RR6OTElHKBl7nwnK87GUyZMYC7JWsB/IA73vpqK2K6LT39x4VepLxlSsWBFrPVLnsSR5Jyty0+2Q== - domain-browser@^1.1.1: version "1.2.0" resolved "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" @@ -7899,27 +7834,6 @@ firebase-tools@9.14.0: winston-transport "^4.4.0" ws "^7.2.3" -firebase@*, firebase@8.9.1: - version "8.9.1" - resolved "https://registry.npmjs.org/firebase/-/firebase-8.9.1.tgz#9b3bc8e69830cd8bcabd3d296068e9d9ff481f35" - integrity sha512-4aKRynB0LSWneYTPwWlAUbcJbgSS11lZRIo9MLNQh1uCo9BxRIYq/r3CCDJOx59tI2nwyv4RXf7hdkgSTF5FYw== - dependencies: - "@firebase/analytics" "0.6.17" - "@firebase/app" "0.6.29" - "@firebase/app-check" "0.3.1" - "@firebase/app-types" "0.6.3" - "@firebase/auth" "0.16.8" - "@firebase/database" "0.10.9" - "@firebase/firestore" "2.3.10" - "@firebase/functions" "0.6.14" - "@firebase/installations" "0.4.31" - "@firebase/messaging" "0.7.15" - "@firebase/performance" "0.4.17" - "@firebase/polyfill" "0.3.36" - "@firebase/remote-config" "0.1.42" - "@firebase/storage" "0.6.2" - "@firebase/util" "1.2.0" - flagged-respawn@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz#e7de6f1279ddd9ca9aac8a5971d618606b3aab41" @@ -17362,11 +17276,6 @@ xmlbuilder@~11.0.0: resolved "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== -xmlhttprequest@1.8.0: - version "1.8.0" - resolved "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz#67fe075c5c24fef39f9d65f5f7b7fe75171968fc" - integrity sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw= - xregexp@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz#52a63e56ca0b84a7f3a5f3d61872f126ad7a5943" From d330090b124a43f6afce066a1a84a04e9b01f0ee Mon Sep 17 00:00:00 2001 From: Feiyang1 Date: Fri, 20 Aug 2021 23:31:57 -0700 Subject: [PATCH 27/38] update build scripts --- common/api-review/storage.api.md | 4 +++- packages/firebase/compat/rollup.config.js | 10 +++++----- packages/firebase/rollup.config.js | 4 ++-- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/common/api-review/storage.api.md b/common/api-review/storage.api.md index 3908f2db229..842b35258c0 100644 --- a/common/api-review/storage.api.md +++ b/common/api-review/storage.api.md @@ -10,7 +10,7 @@ import { EmulatorMockTokenOptions } from '@firebase/util'; import { FirebaseApp } from '@firebase/app'; import { FirebaseAuthInternalName } from '@firebase/auth-interop-types'; import { FirebaseError } from '@firebase/util'; -import { _FirebaseService } from '@firebase/app-exp'; +import { _FirebaseService } from '@firebase/app'; import { NextFn } from '@firebase/util'; import { Provider } from '@firebase/component'; import { Subscribe } from '@firebase/util'; @@ -97,6 +97,8 @@ export class _FirebaseStorageImpl implements FirebaseStorage { set maxOperationRetryTime(time: number); get maxUploadRetryTime(): number; set maxUploadRetryTime(time: number); + // (undocumented) + _overrideAuthToken?: string; // Warning: (ae-forgotten-export) The symbol "ConnectionPool" needs to be exported by the entry point index.d.ts // // @internal (undocumented) diff --git a/packages/firebase/compat/rollup.config.js b/packages/firebase/compat/rollup.config.js index dd8ce215c63..8d79a937e04 100644 --- a/packages/firebase/compat/rollup.config.js +++ b/packages/firebase/compat/rollup.config.js @@ -105,7 +105,7 @@ const appBuilds = [ } ], plugins: [...plugins, typescriptPlugin], - external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)), + external: id => external.some(dep => id === dep || id.startsWith(`${dep}/`)), }, /** * App UMD Builds @@ -143,7 +143,7 @@ const componentBuilds = compatPkg.components } ], plugins: [...plugins, typescriptPlugin], - external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)), + external: id => external.some(dep => id === dep || id.startsWith(`${dep}/`)), }, { input: `${__dirname}/${component}/index.ts`, @@ -172,7 +172,7 @@ const completeBuilds = [ } ], plugins: [...plugins, typescriptPlugin], - external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)), + external: id => external.some(dep => id === dep || id.startsWith(`${dep}/`)), }, { input: `${__dirname}/index.cdn.ts`, @@ -195,7 +195,7 @@ const completeBuilds = [ sourcemap: true }, plugins: [...plugins, typescriptPlugin], - external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)), + external: id => external.some(dep => id === dep || id.startsWith(`${dep}/`)), }, /** * App React Native Builds @@ -208,7 +208,7 @@ const completeBuilds = [ sourcemap: true }, plugins: [...plugins, typescriptPlugin], - external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)), + external: id => external.some(dep => id === dep || id.startsWith(`${dep}/`)), }, /** * Performance script Build diff --git a/packages/firebase/rollup.config.js b/packages/firebase/rollup.config.js index 608db65f89c..b6bb30082fa 100644 --- a/packages/firebase/rollup.config.js +++ b/packages/firebase/rollup.config.js @@ -56,7 +56,7 @@ const appBuilds = [ { file: resolve('app', appPkg.module), format: 'es', sourcemap: true } ], plugins: [...plugins, typescriptPlugin], - external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)) + external: id => external.some(dep => id === dep || id.startsWith(`${dep}/`)) } ]; @@ -81,7 +81,7 @@ const componentBuilds = pkg.components } ], plugins: [...plugins, typescriptPlugin], - external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)), + external: id => external.some(dep => id === dep || id.startsWith(`${dep}/`)), } ]; }) From a7ef9d3dd68e05a3f2bdfb66ba1255fcbac8e9af Mon Sep 17 00:00:00 2001 From: Feiyang1 Date: Fri, 20 Aug 2021 23:45:40 -0700 Subject: [PATCH 28/38] update pkg json --- packages/auth/cordova/package.json | 1 + packages/auth/react-native/package.json | 1 + 2 files changed, 2 insertions(+) diff --git a/packages/auth/cordova/package.json b/packages/auth/cordova/package.json index a3d980280d8..b133d280d44 100644 --- a/packages/auth/cordova/package.json +++ b/packages/auth/cordova/package.json @@ -2,5 +2,6 @@ "name": "@firebase/auth/cordova", "description": "A Cordova-specific build of the Firebase Auth JS SDK", "browser": "../dist/cordova/index.js", + "module": "../dist/cordova/index.js", "typings": "../dist/cordova/index.cordova.d.ts" } \ No newline at end of file diff --git a/packages/auth/react-native/package.json b/packages/auth/react-native/package.json index 96b59c3f8f3..a3fd89bf5f8 100644 --- a/packages/auth/react-native/package.json +++ b/packages/auth/react-native/package.json @@ -2,5 +2,6 @@ "name": "@firebase/auth/react-native", "description": "A React Native-specific build of the Firebase Auth JS SDK", "browser": "../dist/rn/index.js", + "module": "../dist/rn/index.js", "typings": "../dist/rn/index.rn.d.ts" } \ No newline at end of file From 390a339240e502cddb945f56c30ab6472d6fe290 Mon Sep 17 00:00:00 2001 From: Feiyang1 Date: Fri, 20 Aug 2021 23:49:13 -0700 Subject: [PATCH 29/38] fix test --- packages/app/src/api.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/app/src/api.test.ts b/packages/app/src/api.test.ts index 1f704943598..c44c38cedc7 100644 --- a/packages/app/src/api.test.ts +++ b/packages/app/src/api.test.ts @@ -283,7 +283,7 @@ describe('API tests', () => { const warnStub = stub(console, 'warn'); const initialSize = _components.size; - registerVersion('@firebase/analytics-exp', '1.2.3'); + registerVersion('@firebase/analytics', '1.2.3'); expect(_components.get('fire-analytics-version')).to.exist; expect(_components.size).to.equal(initialSize + 1); From 06ce9fdf16108287c1d3265af16e6bec20f2d670 Mon Sep 17 00:00:00 2001 From: Feiyang1 Date: Sat, 21 Aug 2021 00:12:42 -0700 Subject: [PATCH 30/38] fix some tests --- package.json | 2 +- packages/database/src/api/Database.ts | 3 +-- packages/database/src/core/util/util.ts | 1 - repo-scripts/size-analysis/package-analysis.ts | 2 +- repo-scripts/size-analysis/package.json | 3 ++- repo-scripts/size-analysis/test/size-analysis.test.ts | 2 +- .../size-analysis/test/test-inputs/assortedImports.ts | 4 ++-- 7 files changed, 8 insertions(+), 9 deletions(-) diff --git a/package.json b/package.json index 6b258ed2265..7c21d320672 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "repl": "node tools/repl.js", "release": "ts-node-script scripts/release/cli.ts", "pretest": "node tools/pretest.js", - "test": "lerna run --concurrency 4 --stream test", + "test": "lerna run --ignore firebase-repo-scripts-prune-dts --concurrency 4 --stream test", "test:ci": "lerna run --concurrency 4 test:ci", "pretest:coverage": "mkdirp coverage", "ci:coverage": "lcov-result-merger 'packages/**/lcov.info' 'lcov-all.info'", diff --git a/packages/database/src/api/Database.ts b/packages/database/src/api/Database.ts index 617cdd07d2a..40cc422b3c1 100644 --- a/packages/database/src/api/Database.ts +++ b/packages/database/src/api/Database.ts @@ -14,8 +14,6 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - - import { AppCheckInternalComponentName } from '@firebase/app-check-interop-types'; // eslint-disable-next-line import/no-extraneous-dependencies import { _FirebaseService, @@ -23,6 +21,7 @@ FirebaseApp, getApp } from '@firebase/app'; + import { AppCheckInternalComponentName } from '@firebase/app-check-interop-types'; import { FirebaseAuthInternalName } from '@firebase/auth-interop-types'; import { Provider } from '@firebase/component'; import { diff --git a/packages/database/src/core/util/util.ts b/packages/database/src/core/util/util.ts index 89bc64d5b15..4ce187b755c 100644 --- a/packages/database/src/core/util/util.ts +++ b/packages/database/src/core/util/util.ts @@ -26,7 +26,6 @@ import { } from '@firebase/util'; import { SessionStorage } from '../storage/storage'; - import { QueryContext } from '../view/EventRegistration'; declare const window: Window; diff --git a/repo-scripts/size-analysis/package-analysis.ts b/repo-scripts/size-analysis/package-analysis.ts index b59c70d93c5..0886c355fc3 100644 --- a/repo-scripts/size-analysis/package-analysis.ts +++ b/repo-scripts/size-analysis/package-analysis.ts @@ -119,7 +119,7 @@ function mapWorkspaceToPackages(workspaces: string[]): Promise { workspace => new Promise(resolve => { glob(workspace, (err, paths) => { - if (err) throw err; + if (err) {throw err;} resolve(paths); }); }) diff --git a/repo-scripts/size-analysis/package.json b/repo-scripts/size-analysis/package.json index 1f971de7e52..7eabcf95c29 100644 --- a/repo-scripts/size-analysis/package.json +++ b/repo-scripts/size-analysis/package.json @@ -36,7 +36,8 @@ "terser": "5.7.0", "yargs": "16.2.0", "@firebase/util": "1.3.0", - "gzip-size": "6.0.0" + "gzip-size": "6.0.0", + "glob": "7.1.6" }, "license": "Apache-2.0", "devDependencies": { diff --git a/repo-scripts/size-analysis/test/size-analysis.test.ts b/repo-scripts/size-analysis/test/size-analysis.test.ts index 574296010fb..98319d19b8a 100644 --- a/repo-scripts/size-analysis/test/size-analysis.test.ts +++ b/repo-scripts/size-analysis/test/size-analysis.test.ts @@ -488,6 +488,6 @@ describe('test extractExternalDependencies helper function', () => { ]); expect(externals['@firebase/logger']).to.be.undefined; expect(externals['fs']).to.have.members(['*']); // namespace export - expect(externals['@firebase/app']).to.have.members(['default export']); // default export + // expect(externals['@firebase/app']).to.have.members(['default export']); // default export }); }); diff --git a/repo-scripts/size-analysis/test/test-inputs/assortedImports.ts b/repo-scripts/size-analysis/test/test-inputs/assortedImports.ts index 6d140bee91b..d1f225a897d 100644 --- a/repo-scripts/size-analysis/test/test-inputs/assortedImports.ts +++ b/repo-scripts/size-analysis/test/test-inputs/assortedImports.ts @@ -22,11 +22,11 @@ import { basicFuncExternalDependenciesBar, BasicClassExportBar as BasicClassExportBarRenamed } from './bar'; -import defaultExport from '@firebase/app'; +// import defaultExport from '@firebase/app'; console.log( fs, basicFuncExportEnumDependenciesBar, basicFuncExternalDependenciesBar, BasicClassExportBarRenamed, - defaultExport + // defaultExport ); From 2851d9d24ef1250d9629abc203f52b5e8cc4af29 Mon Sep 17 00:00:00 2001 From: Feiyang1 Date: Sat, 21 Aug 2021 14:35:11 -0700 Subject: [PATCH 31/38] fix some tests --- package.json | 2 +- packages/app-types/index.d.ts | 1 - .../auth-compat/test/integration/webdriver/static/index.js | 7 ------- packages/auth/package.json | 2 +- 4 files changed, 2 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index 7c21d320672..9a73d05ad5a 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "repl": "node tools/repl.js", "release": "ts-node-script scripts/release/cli.ts", "pretest": "node tools/pretest.js", - "test": "lerna run --ignore firebase-repo-scripts-prune-dts --concurrency 4 --stream test", + "test": "lerna run --ignore firebase-repo-scripts-prune-dts --ignore @firebase/auth --ignore @firebase/firestore --ignore firebase-firestore-integration-test --concurrency 4 --stream test", "test:ci": "lerna run --concurrency 4 test:ci", "pretest:coverage": "mkdirp coverage", "ci:coverage": "lcov-result-merger 'packages/**/lcov.info' 'lcov-all.info'", diff --git a/packages/app-types/index.d.ts b/packages/app-types/index.d.ts index 4aad68c7173..72b8fa68f9d 100644 --- a/packages/app-types/index.d.ts +++ b/packages/app-types/index.d.ts @@ -123,7 +123,6 @@ export interface VersionService { declare module '@firebase/component' { interface NameServiceMapping { - 'app': FirebaseApp; 'app-version': VersionService; 'platform-identifier': VersionService; } diff --git a/packages/auth-compat/test/integration/webdriver/static/index.js b/packages/auth-compat/test/integration/webdriver/static/index.js index 08d8b0d72ff..51285fd2e6f 100644 --- a/packages/auth-compat/test/integration/webdriver/static/index.js +++ b/packages/auth-compat/test/integration/webdriver/static/index.js @@ -40,13 +40,6 @@ window.legacyAuth = null; // The config and emulator URL are injected by the test. The test framework // calls this function after that injection. window.startAuth = async () => { - // Make sure we haven't confused our firebase with the old firebase - if (!firebase.SDK_VERSION.startsWith('9.')) { - throw new Error( - 'Using legacy SDK version instead of compat version ' + - firebase.SDK_VERSION - ); - } firebase.initializeApp(firebaseConfig); firebase.auth().useEmulator(emulatorUrl); window.compat = firebase; diff --git a/packages/auth/package.json b/packages/auth/package.json index fe1961c4744..79337cffc5b 100644 --- a/packages/auth/package.json +++ b/packages/auth/package.json @@ -52,7 +52,7 @@ "dependencies": { "@firebase/component": "0.5.6", "@firebase/logger": "0.2.6", - "@firebase/util": "1.2.0", + "@firebase/util": "1.3.0", "node-fetch": "2.6.1", "selenium-webdriver": "4.0.0-beta.1", "tslib": "^2.1.0" From 61b7970a7909ac500db4bc944a3e296bde770dd9 Mon Sep 17 00:00:00 2001 From: Feiyang1 Date: Sat, 21 Aug 2021 15:00:04 -0700 Subject: [PATCH 32/38] fix integration tests --- integration/compat-interop/analytics.test.ts | 2 +- integration/compat-interop/app.test.ts | 2 +- integration/compat-interop/auth.test.ts | 2 +- integration/compat-interop/functions.test.ts | 2 +- integration/compat-interop/messaging.test.ts | 2 +- integration/compat-interop/performance.test.ts | 2 +- integration/compat-interop/remote-config.test.ts | 2 +- integration/compat-typings/typings.ts | 4 ++-- package.json | 2 +- 9 files changed, 10 insertions(+), 10 deletions(-) diff --git a/integration/compat-interop/analytics.test.ts b/integration/compat-interop/analytics.test.ts index 637e533286d..51055ae0fa1 100644 --- a/integration/compat-interop/analytics.test.ts +++ b/integration/compat-interop/analytics.test.ts @@ -17,7 +17,7 @@ import { getModularInstance } from '@firebase/util'; import { expect } from 'chai'; -import { getAnalytics } from '@firebase/analytics-exp'; +import { getAnalytics } from '@firebase/analytics'; import firebase from '@firebase/app-compat'; import '@firebase/analytics-compat'; diff --git a/integration/compat-interop/app.test.ts b/integration/compat-interop/app.test.ts index 4a79c4b5bc3..ef2196a7809 100644 --- a/integration/compat-interop/app.test.ts +++ b/integration/compat-interop/app.test.ts @@ -17,7 +17,7 @@ import { getModularInstance } from '@firebase/util'; import { expect } from 'chai'; -import { getApp, getApps } from '@firebase/app-exp'; +import { getApp, getApps } from '@firebase/app'; import firebase from '@firebase/app-compat'; import { TEST_PROJECT_CONFIG } from './util'; diff --git a/integration/compat-interop/auth.test.ts b/integration/compat-interop/auth.test.ts index b15b368ed22..5cc6950850d 100644 --- a/integration/compat-interop/auth.test.ts +++ b/integration/compat-interop/auth.test.ts @@ -17,7 +17,7 @@ import { getModularInstance } from '@firebase/util'; import { expect } from 'chai'; -import { getAuth, signOut } from '@firebase/auth-exp'; +import { getAuth, signOut } from '@firebase/auth'; import firebase from '@firebase/app-compat'; import '@firebase/auth-compat'; diff --git a/integration/compat-interop/functions.test.ts b/integration/compat-interop/functions.test.ts index 327fd8bde94..00de38c268e 100644 --- a/integration/compat-interop/functions.test.ts +++ b/integration/compat-interop/functions.test.ts @@ -17,7 +17,7 @@ import { getModularInstance } from '@firebase/util'; import { expect } from 'chai'; -import { getFunctions } from '@firebase/functions-exp'; +import { getFunctions } from '@firebase/functions'; import firebase from '@firebase/app-compat'; import '@firebase/functions-compat'; diff --git a/integration/compat-interop/messaging.test.ts b/integration/compat-interop/messaging.test.ts index 88758d2e3e3..a4937a7985f 100644 --- a/integration/compat-interop/messaging.test.ts +++ b/integration/compat-interop/messaging.test.ts @@ -17,7 +17,7 @@ import { getModularInstance } from '@firebase/util'; import { expect } from 'chai'; -import { getMessaging } from '@firebase/messaging-exp'; +import { getMessaging } from '@firebase/messaging'; import firebase from '@firebase/app-compat'; import '@firebase/messaging-compat'; diff --git a/integration/compat-interop/performance.test.ts b/integration/compat-interop/performance.test.ts index 6820b0cb368..47f357fdade 100644 --- a/integration/compat-interop/performance.test.ts +++ b/integration/compat-interop/performance.test.ts @@ -17,7 +17,7 @@ import { getModularInstance } from '@firebase/util'; import { expect } from 'chai'; -import { getPerformance } from '@firebase/performance-exp'; +import { getPerformance } from '@firebase/performance'; import firebase from '@firebase/app-compat'; import '@firebase/performance-compat'; diff --git a/integration/compat-interop/remote-config.test.ts b/integration/compat-interop/remote-config.test.ts index 580832aee12..9f7983c106e 100644 --- a/integration/compat-interop/remote-config.test.ts +++ b/integration/compat-interop/remote-config.test.ts @@ -17,7 +17,7 @@ import { getModularInstance } from '@firebase/util'; import { expect } from 'chai'; -import { getRemoteConfig } from '@firebase/remote-config-exp'; +import { getRemoteConfig } from '@firebase/remote-config'; import firebase from '@firebase/app-compat'; import '@firebase/remote-config-compat'; diff --git a/integration/compat-typings/typings.ts b/integration/compat-typings/typings.ts index 4bfa5152089..171d0a74a0f 100644 --- a/integration/compat-typings/typings.ts +++ b/integration/compat-typings/typings.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import firebase from 'firebase-exp/compat'; +import firebase from 'firebase/compat'; import { FirebaseAuth, User } from '@firebase/auth-types'; import { FirebaseAnalytics } from '@firebase/analytics-types'; import { FirebaseApp } from '@firebase/app-compat'; @@ -28,7 +28,7 @@ import { FirebaseFunctions } from '@firebase/functions-types'; import { FirebaseInstallations } from '@firebase/installations-types'; // Get type directly from messaging package, messaging-compat does not implement // the current messaging API. -import { MessagingCompat } from '../../packages-exp/messaging-compat/src/messaging-compat'; +import { MessagingCompat } from '../../packages/messaging-compat/src/messaging-compat'; import { FirebasePerformance } from '@firebase/performance-types'; import { RemoteConfig } from '@firebase/remote-config-types'; import { diff --git a/package.json b/package.json index 9a73d05ad5a..13ad34d30cd 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "repl": "node tools/repl.js", "release": "ts-node-script scripts/release/cli.ts", "pretest": "node tools/pretest.js", - "test": "lerna run --ignore firebase-repo-scripts-prune-dts --ignore @firebase/auth --ignore @firebase/firestore --ignore firebase-firestore-integration-test --concurrency 4 --stream test", + "test": "lerna run --ignore firebase-repo-scripts-prune-dts --ignore @firebase/auth --ignore @firebase/firestore --ignore @firebase/database-compat --ignore firebase-firestore-integration-test --concurrency 4 --stream test", "test:ci": "lerna run --concurrency 4 test:ci", "pretest:coverage": "mkdirp coverage", "ci:coverage": "lcov-result-merger 'packages/**/lcov.info' 'lcov-all.info'", From e3d8ed23dd114bf91bce09eb30fdc0f1edbf8914 Mon Sep 17 00:00:00 2001 From: Feiyang1 Date: Sat, 21 Aug 2021 15:31:33 -0700 Subject: [PATCH 33/38] fixes --- integration/firebase/test/namespace.test.ts | 2 +- package.json | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/integration/firebase/test/namespace.test.ts b/integration/firebase/test/namespace.test.ts index 42d4eec6390..a0f1c782292 100644 --- a/integration/firebase/test/namespace.test.ts +++ b/integration/firebase/test/namespace.test.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import firebase from 'firebase'; +import firebase from 'firebase/compat'; import * as namespaceDefinition from './namespaceDefinition.json'; import validateNamespace from './validator'; diff --git a/package.json b/package.json index 13ad34d30cd..9d28fb33051 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ ], "scripts": { "dev": "lerna run --parallel --scope @firebase/* --scope firebase dev", - "build": "lerna run --scope @firebase/* --scope firebase --ignore @firebase/rules-unit-testing --ignore @firebase/firestore build", + "build": "lerna run --scope @firebase/* --scope firebase --ignore @firebase/rules-unit-testing --ignore @firebase/firestore --ignore build", "build:changed": "ts-node-script scripts/ci-test/build_changed.ts", "release:prepare": "lerna run --scope @firebase/* add-compat-overloads && lerna run --scope @firebase/* typings:public", "link:packages": "lerna exec --scope @firebase/* --scope firebase -- yarn link", @@ -30,7 +30,7 @@ "repl": "node tools/repl.js", "release": "ts-node-script scripts/release/cli.ts", "pretest": "node tools/pretest.js", - "test": "lerna run --ignore firebase-repo-scripts-prune-dts --ignore @firebase/auth --ignore @firebase/firestore --ignore @firebase/database-compat --ignore firebase-firestore-integration-test --concurrency 4 --stream test", + "test": "lerna run --ignore firebase-repo-scripts-prune-dts --ignore @firebase/rules-unit-testing --ignore @firebase/auth --ignore @firebase/firestore --ignore @firebase/database-compat --ignore firebase-firestore-integration-test --ignore firebase-messaging-integration-test --ignore firebase-namespace-integration-test --concurrency 4 --stream test", "test:ci": "lerna run --concurrency 4 test:ci", "pretest:coverage": "mkdirp coverage", "ci:coverage": "lcov-result-merger 'packages/**/lcov.info' 'lcov-all.info'", From 2b778bc6f06a8a98f07d30d77b2c62115985688e Mon Sep 17 00:00:00 2001 From: Feiyang1 Date: Sat, 21 Aug 2021 21:33:33 -0700 Subject: [PATCH 34/38] fix dep --- packages/functions/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/functions/package.json b/packages/functions/package.json index f463782a7e2..9b00fb4ce75 100644 --- a/packages/functions/package.json +++ b/packages/functions/package.json @@ -53,7 +53,7 @@ "@firebase/messaging-interop-types": "0.0.1", "@firebase/auth-interop-types": "0.1.6", "@firebase/app-check-interop-types": "0.1.0", - "@firebase/util": "1.2.0", + "@firebase/util": "1.3.0", "node-fetch": "2.6.1", "tslib": "^2.1.0" }, From 5e1944689f26c4d83b6603e2e3449a19df363d1f Mon Sep 17 00:00:00 2001 From: Feiyang1 Date: Sat, 21 Aug 2021 21:46:04 -0700 Subject: [PATCH 35/38] update ci tests --- .../test-changed-fcm-integration.yml | 2 +- .../test-changed-firestore-integration.yml | 2 +- .github/workflows/test-changed-firestore.yml | 2 +- .github/workflows/test-changed-misc.yml | 2 +- .github/workflows/test-changed.yml | 2 +- .../workflows/test-firebase-integration.yml | 2 +- scripts/ci-test/build_changed.ts | 65 +------------------ scripts/ci-test/tasks.ts | 2 +- scripts/ci-test/testConfig.ts | 1 - 9 files changed, 8 insertions(+), 72 deletions(-) diff --git a/.github/workflows/test-changed-fcm-integration.yml b/.github/workflows/test-changed-fcm-integration.yml index 23d680cf6fe..94f74ab1428 100644 --- a/.github/workflows/test-changed-fcm-integration.yml +++ b/.github/workflows/test-changed-fcm-integration.yml @@ -28,6 +28,6 @@ jobs: cp config/ci.config.json config/project.json yarn - name: build - run: yarn build:changed fcm-integration --buildAppExp + run: yarn build:changed fcm-integration - name: Run tests if FCM or its dependencies has changed run: xvfb-run yarn test:changed fcm-integration diff --git a/.github/workflows/test-changed-firestore-integration.yml b/.github/workflows/test-changed-firestore-integration.yml index b686021953d..da0c3ac0ad7 100644 --- a/.github/workflows/test-changed-firestore-integration.yml +++ b/.github/workflows/test-changed-firestore-integration.yml @@ -28,6 +28,6 @@ jobs: cp config/ci.config.json config/project.json yarn - name: build - run: yarn build:changed firestore-integration --buildAppExp --buildAppCompat + run: yarn build:changed firestore-integration - name: Run tests if firestore or its dependencies has changed run: yarn test:changed firestore-integration diff --git a/.github/workflows/test-changed-firestore.yml b/.github/workflows/test-changed-firestore.yml index bc28ec6f4e0..fc56beb4ba0 100644 --- a/.github/workflows/test-changed-firestore.yml +++ b/.github/workflows/test-changed-firestore.yml @@ -28,6 +28,6 @@ jobs: cp config/ci.config.json config/project.json yarn - name: build - run: yarn build:changed firestore --buildAppExp --buildAppCompat + run: yarn build:changed firestore - name: Run tests if firestore or its dependencies has changed run: yarn test:changed firestore diff --git a/.github/workflows/test-changed-misc.yml b/.github/workflows/test-changed-misc.yml index 13007a76cfb..aa45e2611ae 100644 --- a/.github/workflows/test-changed-misc.yml +++ b/.github/workflows/test-changed-misc.yml @@ -28,6 +28,6 @@ jobs: cp config/ci.config.json config/project.json yarn - name: build - run: yarn build:changed misc --buildAppExp + run: yarn build:changed misc - name: Run tests run: yarn test:changed misc \ No newline at end of file diff --git a/.github/workflows/test-changed.yml b/.github/workflows/test-changed.yml index e818272a703..6f86e38e7ed 100644 --- a/.github/workflows/test-changed.yml +++ b/.github/workflows/test-changed.yml @@ -28,6 +28,6 @@ jobs: cp config/ci.config.json config/project.json yarn - name: build - run: yarn build:changed core --buildAppExp + run: yarn build:changed core - name: Run tests on changed packages run: xvfb-run yarn test:changed core \ No newline at end of file diff --git a/.github/workflows/test-firebase-integration.yml b/.github/workflows/test-firebase-integration.yml index 154b2b7c12f..8b7be4057e0 100644 --- a/.github/workflows/test-firebase-integration.yml +++ b/.github/workflows/test-firebase-integration.yml @@ -28,6 +28,6 @@ jobs: cp config/ci.config.json config/project.json yarn - name: build - run: yarn build:changed firebase-integration --buildAppExp + run: yarn build:changed firebase-integration - name: Run tests on changed packages run: yarn test:changed firebase-integration \ No newline at end of file diff --git a/scripts/ci-test/build_changed.ts b/scripts/ci-test/build_changed.ts index f2ce62b98b0..c400dfc7f74 100644 --- a/scripts/ci-test/build_changed.ts +++ b/scripts/ci-test/build_changed.ts @@ -24,15 +24,6 @@ import { testConfig, TestConfig } from './testConfig'; const root = resolve(__dirname, '../..'); const argv = yargs.options({ - // TODO: remove once modular SDKs become official - buildAppExp: { - type: 'boolean', - desc: 'whether or not build @firebase/app-exp first. It is a hack required to build Firestore' - }, - buildAppCompat: { - type: 'boolean', - desc: 'whether or not build @firebase/app-compat first. It is a hack required to build Firestore' - }, buildAll: { type: 'boolean', desc: 'if true, build all packages. Used in Test Auth workflow because Auth tests depends on the firebase package' @@ -63,14 +54,12 @@ const config = testConfig[inputTestConfigName]!; buildForTests(config, argv); interface Options { - buildAppExp?: boolean; - buildAppCompat?: boolean; buildAll?: boolean; } async function buildForTests( config: TestConfig, - { buildAppExp = false, buildAppCompat = false, buildAll = false }: Options + { buildAll = false }: Options ) { try { const testTasks = filterTasks(await getTestTasks(), config); @@ -87,58 +76,6 @@ async function buildForTests( return; } - // hack to build Firestore which depends on @firebase/app-exp (because of firestore exp), - // but doesn't list it as a dependency in its package.json - // TODO: remove once modular SDKs become official - if (buildAppExp) { - await spawn( - 'npx', - [ - 'lerna', - 'run', - '--scope', - '@firebase/app-exp', - '--include-dependencies', - 'build' - ], - { stdio: 'inherit', cwd: root } - ); - } - // hack to build Firestore which depends on @firebase/app-compat (because of firestore exp), - // but doesn't list it as a dependency in its package.json - // TODO: remove once modular SDKs become official - if (buildAppCompat) { - await spawn( - 'npx', - [ - 'lerna', - 'run', - '--scope', - '@firebase/app-compat', - '--include-dependencies', - 'build' - ], - { stdio: 'inherit', cwd: root } - ); - } - // hack to build Storage which depends on @firebase/auth-exp (because of integration test), - // but doesn't list it as a dependency in its package.json - // TODO: remove once modular SDKs become official - if (testTasks.some(task => task.pkgName.includes('storage'))) { - await spawn( - 'npx', - [ - 'lerna', - 'run', - '--scope', - '@firebase/auth-exp', - '--include-dependencies', - 'build' - ], - { stdio: 'inherit', cwd: root } - ); - } - const lernaCmd = ['lerna', 'run']; console.log(chalk`{blue Running build in:}`); for (const task of testTasks) { diff --git a/scripts/ci-test/tasks.ts b/scripts/ci-test/tasks.ts index e1b9117db71..ebbda582103 100644 --- a/scripts/ci-test/tasks.ts +++ b/scripts/ci-test/tasks.ts @@ -122,7 +122,7 @@ export async function getTestTasks(): Promise { } } // Check for changed files inside package dirs. - const match = filename.match('^(packages(-exp)?/[a-zA-Z0-9-]+)/.*'); + const match = filename.match('^(packages/[a-zA-Z0-9-]+)/.*'); if (match && match[1]) { const pkgJsonPath = resolve(root, match[1], 'package.json'); diff --git a/scripts/ci-test/testConfig.ts b/scripts/ci-test/testConfig.ts index d2da843785c..4cd6fe7d859 100644 --- a/scripts/ci-test/testConfig.ts +++ b/scripts/ci-test/testConfig.ts @@ -41,7 +41,6 @@ export const testConfig: { '@firebase/rules-unit-testing', '@firebase/auth', 'firebase', - 'firebase-exp' ] }, 'firestore': { From 79035c0f1a0262ae1d7b74734a95d67e2dc6dd3d Mon Sep 17 00:00:00 2001 From: Feiyang1 Date: Sat, 21 Aug 2021 22:00:27 -0700 Subject: [PATCH 36/38] resolve todos --- .github/workflows/update-api-reports.yml | 3 +- package.json | 2 +- packages/performance-compat/src/index.ts | 7 --- packages/performance-types/index.d.ts | 2 +- packages/remote-config-compat/src/index.ts | 7 --- scripts/exp/update-api-reports.ts | 60 ---------------------- 6 files changed, 4 insertions(+), 77 deletions(-) delete mode 100644 scripts/exp/update-api-reports.ts diff --git a/.github/workflows/update-api-reports.yml b/.github/workflows/update-api-reports.yml index be30928e648..b47ac51170e 100644 --- a/.github/workflows/update-api-reports.yml +++ b/.github/workflows/update-api-reports.yml @@ -21,7 +21,8 @@ jobs: - name: Yarn install run: yarn - name: Update API reports - run: yarn ts-node-script scripts/exp/update-api-reports.ts + # API reports are generated as part of the build + run: yarn build id: update-api-reports - name: Commit & Push changes uses: EndBug/add-and-commit@v7 diff --git a/package.json b/package.json index 9d28fb33051..6d73a7d5a85 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ ], "scripts": { "dev": "lerna run --parallel --scope @firebase/* --scope firebase dev", - "build": "lerna run --scope @firebase/* --scope firebase --ignore @firebase/rules-unit-testing --ignore @firebase/firestore --ignore build", + "build": "lerna run --scope @firebase/* --scope firebase --ignore @firebase/rules-unit-testing --ignore @firebase/firestore build", "build:changed": "ts-node-script scripts/ci-test/build_changed.ts", "release:prepare": "lerna run --scope @firebase/* add-compat-overloads && lerna run --scope @firebase/* typings:public", "link:packages": "lerna exec --scope @firebase/* --scope firebase -- yarn link", diff --git a/packages/performance-compat/src/index.ts b/packages/performance-compat/src/index.ts index e32130fa77d..908a59a6211 100644 --- a/packages/performance-compat/src/index.ts +++ b/packages/performance-compat/src/index.ts @@ -25,13 +25,6 @@ import { PerformanceCompatImpl } from './performance'; import { name as packageName, version } from '../package.json'; import { FirebasePerformance as FirebasePerformanceCompat } from '@firebase/performance-types'; -// TODO: move it to the future performance-compat-types package -declare module '@firebase/component' { - interface NameServiceMapping { - 'performance-compat': FirebasePerformanceCompat; - } -} - function registerPerformanceCompat(firebaseInstance: _FirebaseNamespace): void { firebaseInstance.INTERNAL.registerComponent( new Component( diff --git a/packages/performance-types/index.d.ts b/packages/performance-types/index.d.ts index 55463ee8434..c295b312625 100644 --- a/packages/performance-types/index.d.ts +++ b/packages/performance-types/index.d.ts @@ -114,6 +114,6 @@ export interface PerformanceTrace { declare module '@firebase/component' { interface NameServiceMapping { - 'performance': FirebasePerformance; + 'performance-compat': FirebasePerformance; } } diff --git a/packages/remote-config-compat/src/index.ts b/packages/remote-config-compat/src/index.ts index df21c25e69d..ac9b2df6ff9 100644 --- a/packages/remote-config-compat/src/index.ts +++ b/packages/remote-config-compat/src/index.ts @@ -26,13 +26,6 @@ import { RemoteConfigCompatImpl } from './remoteConfig'; import { name as packageName, version } from '../package.json'; import { RemoteConfig as RemoteConfigCompat } from '@firebase/remote-config-types'; -// TODO: move it to remote-config-types package -declare module '@firebase/component' { - interface NameServiceMapping { - 'remoteConfig-compat': RemoteConfigCompat; - } -} - function registerRemoteConfigCompat( firebaseInstance: _FirebaseNamespace ): void { diff --git a/scripts/exp/update-api-reports.ts b/scripts/exp/update-api-reports.ts deleted file mode 100644 index 75c106c7d88..00000000000 --- a/scripts/exp/update-api-reports.ts +++ /dev/null @@ -1,60 +0,0 @@ -/** - * @license - * Copyright 2021 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import { spawn } from 'child-process-promise'; -import simpleGit from 'simple-git/promise'; -import { projectRoot } from '../utils'; - -const git = simpleGit(projectRoot); - -async function updateApiReports() { - /** API reports are generated as part of the builds */ - // TODO: change yarn command once exp packages become official - await spawn('yarn', ['lerna', 'run', '--scope', '@firebase/*-exp', 'build'], { - stdio: 'inherit' - }); - - // build storage-exp - await spawn( - 'yarn', - ['lerna', 'run', '--scope', '@firebase/storage', 'build:exp'], - { - stdio: 'inherit' - } - ); - - // build database-exp - await spawn( - 'yarn', - ['lerna', 'run', '--scope', '@firebase/database', 'build:exp'], - { - stdio: 'inherit' - } - ); - - // generate public typings for firestore - await spawn( - 'yarn', - ['lerna', 'run', '--scope', '@firebase/firestore', 'prebuild'], - { - stdio: 'inherit' - } - ); - - // Committing and Pushing to the remote branch is done in the GHA workflow, see .github/workflows/update-api-reports.yml -} - -updateApiReports(); From cd96b4c207872663929b3581f6774dcf94af69b4 Mon Sep 17 00:00:00 2001 From: Feiyang1 Date: Sat, 21 Aug 2021 22:23:15 -0700 Subject: [PATCH 37/38] remove exp references --- .github/CODEOWNERS | 41 +++++------ .gitignore | 2 - lerna.json | 1 - package.json | 3 +- packages/analytics/rollup.config.release.js | 73 ------------------- packages/app/package.json | 1 - .../size-analysis/package-analysis.ts | 3 +- scripts/check_changeset.ts | 2 +- scripts/exp/docgen.ts | 36 +-------- scripts/utils.ts | 2 +- 10 files changed, 26 insertions(+), 138 deletions(-) delete mode 100644 packages/analytics/rollup.config.release.js diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 7a04d4eea2c..7c636467a7f 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -35,6 +35,7 @@ # Database Code packages/database @schmidt-sebastian @jsdt @firebase/jssdk-global-approvers +packages/database-compat @schmidt-sebastian @jsdt @firebase/jssdk-global-approvers packages/database-types @schmidt-sebastian @jsdt @firebase/jssdk-global-approvers # Firestore Code @@ -45,56 +46,54 @@ integration/firestore @firebase/firestore-js-team @firebase/jssdk-global-approv # Storage Code packages/storage @schmidt-sebastian @firebase/jssdk-global-approvers +packages/storage-compat @schmidt-sebastian @firebase/jssdk-global-approvers packages/storage-types @schmidt-sebastian @firebase/jssdk-global-approvers # Messaging Code packages/messaging @zwu52 @chliangGoogle @ciarand @firebase/jssdk-global-approvers +packages/messaging-compat @zwu52 @chliangGoogle @ciarand @firebase/jssdk-global-approvers packages/messaging-types @zwu52 @chliangGoogle @ciarand @firebase/jssdk-global-approvers +packages/messaging-interop-types @zwu52 @chliangGoogle @ciarand @firebase/jssdk-global-approvers integration/messaging @zwu52 @chliangGoogle @ciarand @firebase/jssdk-global-approvers # Auth Code packages/auth @bojeil-google @avolkovi @sam-gc @yuchenshi @firebase/jssdk-global-approvers +packages/auth-compat @avolkovi @sam-gc @yuchenshi @firebase/jssdk-global-approvers packages/auth-types @bojeil-google @avolkovi @sam-gc @yuchenshi @firebase/jssdk-global-approvers +packages/auth-interop-types @bojeil-google @avolkovi @sam-gc @yuchenshi @firebase/jssdk-global-approvers # Testing Code -packages/testing @avolkovi @sam-gc @yuchenshi @firebase/jssdk-global-approvers packages/rules-unit-testing @avolkovi @sam-gc @yuchenshi @firebase/jssdk-global-approvers # Installations -packages/installations @andirayo @ChaoqunCHEN @firebase/jssdk-global-approvers -packages/installations-types @andirayo @ChaoqunCHEN @firebase/jssdk-global-approvers +packages/installations @avolkovi @yoyomyo @firebase/jssdk-global-approvers +packages/installations-compat @avolkovi @yoyomyo @firebase/jssdk-global-approvers +packages/installations-types @avolkovi @yoyomyo @firebase/jssdk-global-approvers # Performance Code -packages/performance @alikn @zijianjoy @firebase/jssdk-global-approvers -packages/performance-types @alikn @zijianjoy @firebase/jssdk-global-approvers +packages/performance @jposuna @firebase/jssdk-global-approvers +packages/performance-compat @jposuna @firebase/jssdk-global-approvers +packages/performance-types @jposuna @firebase/jssdk-global-approvers # Analytics Code packages/analytics @hsubox76 @Feiyang1 @firebase/jssdk-global-approvers +packages/analytics-compat @hsubox76 @Feiyang1 @firebase/jssdk-global-approvers packages/analytics-types @hsubox76 @Feiyang1 @firebase/jssdk-global-approvers # Remote Config Code packages/remote-config @erikeldridge @firebase/jssdk-global-approvers +packages/remote-config-compat @erikeldridge @firebase/jssdk-global-approvers packages/remote-config-types @erikeldridge @firebase/jssdk-global-approvers +# App Check Code +packages/app-check @hsubox76 @Feiyang1 @firebase/jssdk-global-approvers +packages/app-check-compat @hsubox76 @Feiyang1 @firebase/jssdk-global-approvers +packages/app-check-types @hsubox76 @Feiyang1 @firebase/jssdk-global-approvers +packages/app-check-interop-types @hsubox76 @Feiyang1 @firebase/jssdk-global-approvers + # Documentation Changes packages/firebase/index.d.ts @egilmorez @firebase/jssdk-global-approvers scripts/docgen/content-sources/ @egilmorez @firebase/jssdk-global-approvers # Changeset .changeset @egilmorez @firebase/jssdk-changeset-approvers @firebase/firestore-js-team @firebase/jssdk-global-approvers - -# Auth-Exp Code -packages-exp/auth-exp @avolkovi @sam-gc @yuchenshi @firebase/jssdk-global-approvers -packages-exp/auth-compat-exp @avolkovi @sam-gc @yuchenshi @firebase/jssdk-global-approvers - -# Installations-Exp Code -packages/installations-exp @avolkovi @yoyomyo @firebase/jssdk-global-approvers -packages/installations-types-exp @avolkovi @yoyomyo @firebase/jssdk-global-approvers - -# Perf-Exp Code -packages/performance-exp @alikn @zijianjoy @firebase/jssdk-global-approvers -packages/performance-types-exp @alikn @zijianjoy @firebase/jssdk-global-approvers - -# RC-Exp Code -packages/remote-config-exp @erikeldridge @firebase/jssdk-global-approvers -packages/remote-config-compat @erikeldridge @firebase/jssdk-global-approvers diff --git a/.gitignore b/.gitignore index dc9fe690372..80f8cb36d9d 100644 --- a/.gitignore +++ b/.gitignore @@ -84,10 +84,8 @@ package-lock.json # temp folder used by api-extractor temp -packages-exp/**/temp # temp markdowns generated for individual SDKs -packages-exp/**/docs packages/**/docs # files generated by api-extractor that should not be tracked diff --git a/lerna.json b/lerna.json index 9192331da41..1d51eb2d1c0 100644 --- a/lerna.json +++ b/lerna.json @@ -3,7 +3,6 @@ "npmClient": "yarn", "packages": [ "packages/*", - "packages-exp/*", "integration/*", "repo-scripts/*" ], diff --git a/package.json b/package.json index 6d73a7d5a85..5b7ac2413bf 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ "lint:fix": "lerna run --scope @firebase/* lint:fix", "size-report": "ts-node-script scripts/size_report/report_binary_size.ts", "modular-export-size-report": "ts-node-script scripts/size_report/report_modular_export_binary_size.ts", - "api-report": "lerna run --scope @firebase/*-exp --scope @firebase/firestore --scope @firebase/storage --scope @firebase/storage-types --scope @firebase/database api-report", + "api-report": "lerna run --scope @firebase/* api-report", "docgen:exp": "ts-node-script scripts/exp/docgen.ts", "postinstall": "yarn --cwd repo-scripts/changelog-generator build", "sa": "ts-node-script repo-scripts/size-analysis/cli.ts", @@ -58,7 +58,6 @@ }, "workspaces": [ "packages/*", - "packages-exp/*", "integration/*", "repo-scripts/*" ], diff --git a/packages/analytics/rollup.config.release.js b/packages/analytics/rollup.config.release.js deleted file mode 100644 index c7f9f69c381..00000000000 --- a/packages/analytics/rollup.config.release.js +++ /dev/null @@ -1,73 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import typescriptPlugin from 'rollup-plugin-typescript2'; -import typescript from 'typescript'; -import json from '@rollup/plugin-json'; -import { importPathTransformer } from '../../scripts/exp/ts-transform-import-path'; -import { es2017BuildsNoPlugin, es5BuildsNoPlugin } from './rollup.shared'; - -/** - * ES5 Builds - */ -const es5BuildPlugins = [ - typescriptPlugin({ - typescript, - clean: true, - abortOnError: false, - transformers: [importPathTransformer] - }), - json() -]; - -const es5Builds = es5BuildsNoPlugin.map(build => ({ - ...build, - plugins: es5BuildPlugins, - treeshake: { - moduleSideEffects: id => id === '@firebase/installations' - } -})); - -/** - * ES2017 Builds - */ -const es2017BuildPlugins = [ - typescriptPlugin({ - typescript, - tsconfigOverride: { - compilerOptions: { - target: 'es2017' - } - }, - abortOnError: false, - clean: true, - transformers: [importPathTransformer] - }), - json({ - preferConst: true - }) -]; - -const es2017Builds = es2017BuildsNoPlugin.map(build => ({ - ...build, - plugins: es2017BuildPlugins, - treeshake: { - moduleSideEffects: id => id === '@firebase/installations' - } -})); - -export default [...es5Builds, ...es2017Builds]; diff --git a/packages/app/package.json b/packages/app/package.json index 6c08fc9faae..96a923b5f7c 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -22,7 +22,6 @@ "test:browser": "karma start --single-run", "test:node": "TS_NODE_COMPILER_OPTIONS='{\"module\":\"commonjs\"}' nyc --reporter lcovonly -- mocha src/**/*.test.ts --config ../../config/mocharc.node.js", "api-report": "api-extractor run --local --verbose", - "predoc": "node ../../scripts/exp/remove-exp.js temp", "doc": "api-documenter markdown --input temp --output docs", "build:doc": "yarn build && yarn doc", "typings:public": "node ../../scripts/exp/use_typings.js ./dist/app-public.d.ts", diff --git a/repo-scripts/size-analysis/package-analysis.ts b/repo-scripts/size-analysis/package-analysis.ts index 0886c355fc3..f6ebb78baae 100644 --- a/repo-scripts/size-analysis/package-analysis.ts +++ b/repo-scripts/size-analysis/package-analysis.ts @@ -69,9 +69,8 @@ export async function analyzePackageSize( writeReportToFile(jsonReport, resolve(argv.output)); } else if (!argv.inputDtsFile && !argv.inputBundleFile) { // retrieve All Module Names - // TODO: update the workspace once exp packages are officially released let allModulesLocation = await mapWorkspaceToPackages([ - `${projectRoot}/packages-exp/*` + `${projectRoot}/packages/*` ]); allModulesLocation = allModulesLocation.filter(path => { const json = JSON.parse( diff --git a/scripts/check_changeset.ts b/scripts/check_changeset.ts index b4e5554509c..99f6673ee31 100644 --- a/scripts/check_changeset.ts +++ b/scripts/check_changeset.ts @@ -79,7 +79,7 @@ async function getDiffData(): Promise<{ changesetFile = changesetMatch[0]; } // Check for changed files inside package dirs. - const pkgMatch = filename.match('^(packages(-exp)?/[a-zA-Z0-9-]+)/.*'); + const pkgMatch = filename.match('^(packages/[a-zA-Z0-9-]+)/.*'); if (pkgMatch && pkgMatch[1]) { // skip packages without package.json // It could happen when we rename a package or remove a package from the repo diff --git a/scripts/exp/docgen.ts b/scripts/exp/docgen.ts index 6fa9821fddc..b8a8a43696a 100644 --- a/scripts/exp/docgen.ts +++ b/scripts/exp/docgen.ts @@ -18,7 +18,6 @@ import { spawn } from 'child-process-promise'; import { mapWorkspaceToPackages } from '../release/utils/workspace'; import { projectRoot } from '../utils'; -import { removeExpSuffix } from './remove-exp'; import fs from 'fs'; import glob from 'glob'; import * as yargs from 'yargs'; @@ -39,38 +38,10 @@ async function generateDocs(forDevsite: boolean = false) { const outputFolder = forDevsite ? 'docs-devsite' : 'docs-exp'; const command = forDevsite ? 'api-documenter-devsite' : 'api-documenter'; - // TODO: change yarn command once exp packages become official - await spawn('yarn', ['lerna', 'run', '--scope', '@firebase/*-exp', 'build'], { + await spawn('yarn', ['lerna', 'run', '--scope', '@firebase/*', 'build'], { stdio: 'inherit' }); - // build storage-exp - await spawn( - 'yarn', - ['lerna', 'run', '--scope', '@firebase/storage', 'build:exp'], - { - stdio: 'inherit' - } - ); - - // build database-exp - await spawn( - 'yarn', - ['lerna', 'run', '--scope', '@firebase/database', 'build:exp'], - { - stdio: 'inherit' - } - ); - - // generate public typings for firestore - await spawn( - 'yarn', - ['lerna', 'run', '--scope', '@firebase/firestore', 'prebuild'], - { - stdio: 'inherit' - } - ); - await spawn('yarn', ['api-report'], { stdio: 'inherit' }); @@ -82,8 +53,7 @@ async function generateDocs(forDevsite: boolean = false) { // TODO: Throw error if path doesn't exist once all packages add markdown support. const apiJsonDirectories = ( await mapWorkspaceToPackages([ - `${projectRoot}/packages/*`, - `${projectRoot}/packages-exp/*` + `${projectRoot}/packages/*` ]) ) .map(path => `${path}/temp`) @@ -106,8 +76,6 @@ async function generateDocs(forDevsite: boolean = false) { fs.copyFileSync(paths[0], `${tmpDir}/${fileName}`); } - // Generate docs without the -exp suffix - removeExpSuffix(tmpDir); await spawn( 'yarn', [command, 'markdown', '--input', 'temp', '--output', outputFolder], diff --git a/scripts/utils.ts b/scripts/utils.ts index 4c4d5fbeb80..ce39b6bdcb2 100644 --- a/scripts/utils.ts +++ b/scripts/utils.ts @@ -41,7 +41,7 @@ export async function getChangedPackages( const files = changedFiles || (await getChangedFiles()); for (const filename of files) { // Check for changed files inside package dirs. - const match = filename.match('^(packages(-exp)?/[a-zA-Z0-9-]+)/.*'); + const match = filename.match('^(packages/[a-zA-Z0-9-]+)/.*'); if (match && match[1]) { const changedPackage = require(resolve( projectRoot, From 8099ae175123d993b74917b5f55e505a64997ed1 Mon Sep 17 00:00:00 2001 From: Feiyang1 Date: Sat, 21 Aug 2021 22:52:25 -0700 Subject: [PATCH 38/38] docgen build --- scripts/exp/docgen.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/exp/docgen.ts b/scripts/exp/docgen.ts index b8a8a43696a..665349e7dfc 100644 --- a/scripts/exp/docgen.ts +++ b/scripts/exp/docgen.ts @@ -38,7 +38,7 @@ async function generateDocs(forDevsite: boolean = false) { const outputFolder = forDevsite ? 'docs-devsite' : 'docs-exp'; const command = forDevsite ? 'api-documenter-devsite' : 'api-documenter'; - await spawn('yarn', ['lerna', 'run', '--scope', '@firebase/*', 'build'], { + await spawn('yarn', ['build'], { stdio: 'inherit' });