From 914216c47926ff108720d27852cfb1970c26ea8b Mon Sep 17 00:00:00 2001 From: Sam Olsen Date: Tue, 3 Oct 2023 11:13:20 -0700 Subject: [PATCH 1/8] Add extension package that strips external JS loading --- packages/auth/extension/package.json | 7 + packages/auth/index.extension.ts | 123 ++++++++++++++++++ packages/auth/package.json | 13 ++ packages/auth/rollup.config.js | 46 ++++++- .../auth/src/platform_browser/iframe/gapi.ts | 2 +- packages/auth/src/platform_browser/index.ts | 29 +++++ packages/auth/src/platform_browser/load_js.ts | 60 ++++++--- .../recaptcha/recaptcha_loader.ts | 3 +- 8 files changed, 262 insertions(+), 21 deletions(-) create mode 100644 packages/auth/extension/package.json create mode 100644 packages/auth/index.extension.ts diff --git a/packages/auth/extension/package.json b/packages/auth/extension/package.json new file mode 100644 index 00000000000..3630ec1d8a4 --- /dev/null +++ b/packages/auth/extension/package.json @@ -0,0 +1,7 @@ +{ + "name": "@firebase/auth/extension", + "description": "A Manifest-v3-specific build of the Firebase Auth JS SDK", + "browser": "../dist/extension-esm2017/index.js", + "module": "../dist/extension-esm2017/index.js", + "typings": "../dist/extension-esm2017/index.extension.d.ts" + } \ No newline at end of file diff --git a/packages/auth/index.extension.ts b/packages/auth/index.extension.ts new file mode 100644 index 00000000000..b764d50a3e5 --- /dev/null +++ b/packages/auth/index.extension.ts @@ -0,0 +1,123 @@ +/** + * @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. + */ + +// Core functionality shared by all clients +export * from './src'; + +// Additional DOM dependend functionality; we need to import and then +// export separately so that the rollup alias will work (for aliasing these +// imports in node environments to no-ops and errors... see +// src/platform_node/index.ts). + +// persistence +import { browserLocalPersistence } from './src/platform_browser/persistence/local_storage'; +import { browserSessionPersistence } from './src/platform_browser/persistence/session_storage'; +import { indexedDBLocalPersistence } from './src/platform_browser/persistence/indexed_db'; + +// providers +import { PhoneAuthProvider } from './src/platform_browser/providers/phone'; + +// strategies +import { + signInWithPhoneNumber, + linkWithPhoneNumber, + reauthenticateWithPhoneNumber, + updatePhoneNumber +} from './src/platform_browser/strategies/phone'; +import { + signInWithPopup, + linkWithPopup, + reauthenticateWithPopup +} from './src/platform_browser/strategies/popup'; +import { + signInWithRedirect, + linkWithRedirect, + reauthenticateWithRedirect, + getRedirectResult +} from './src/platform_browser/strategies/redirect'; + +import { RecaptchaVerifier } from './src/platform_browser/recaptcha/recaptcha_verifier'; +import { browserPopupRedirectResolver } from './src/platform_browser/popup_redirect'; + +// MFA +import { PhoneMultiFactorGenerator } from './src/platform_browser/mfa/assertions/phone'; +import { + TotpMultiFactorGenerator, + TotpSecret +} from './src/mfa/assertions/totp'; +import { FirebaseApp, getApp, _getProvider } from '@firebase/app'; +import { Auth, connectAuthEmulator, initializeAuth } from './index.shared'; +import { getDefaultEmulatorHost } from '@firebase/util'; +import { registerAuth } from './src/core/auth/register'; + +/** + * Returns the Auth instance associated with the provided {@link @firebase/app#FirebaseApp}. + * If no instance exists, initializes an Auth instance with platform-specific default dependencies. + * + * @param app - The Firebase App. + * + * @public + */ +function getAuth(app: FirebaseApp = getApp()): Auth { + const provider = _getProvider(app, 'auth'); + + if (provider.isInitialized()) { + return provider.getImmediate(); + } + + const auth = initializeAuth(app, { + popupRedirectResolver: browserPopupRedirectResolver, + persistence: [ + indexedDBLocalPersistence, + browserLocalPersistence, + browserSessionPersistence + ] + }); + + const authEmulatorHost = getDefaultEmulatorHost('auth'); + if (authEmulatorHost) { + connectAuthEmulator(auth, `http://${authEmulatorHost}`); + } + + return auth; +} + +registerAuth('browser' as any); + +export { + browserLocalPersistence, + browserSessionPersistence, + indexedDBLocalPersistence, + PhoneAuthProvider, + signInWithPhoneNumber, + linkWithPhoneNumber, + reauthenticateWithPhoneNumber, + updatePhoneNumber, + signInWithPopup, + linkWithPopup, + reauthenticateWithPopup, + signInWithRedirect, + linkWithRedirect, + reauthenticateWithRedirect, + getRedirectResult, + RecaptchaVerifier, + browserPopupRedirectResolver, + PhoneMultiFactorGenerator, + TotpMultiFactorGenerator, + TotpSecret, + getAuth +}; diff --git a/packages/auth/package.json b/packages/auth/package.json index 57300a8c00f..10d7d8c164f 100644 --- a/packages/auth/package.json +++ b/packages/auth/package.json @@ -8,6 +8,7 @@ "browser": "dist/esm2017/index.js", "module": "dist/esm2017/index.js", "cordova": "dist/cordova/index.js", + "extension": "dist/extension-esm2017/index.js", "webworker": "dist/index.webworker.esm5.js", "esm5": "dist/esm5/index.js", "exports": { @@ -35,12 +36,20 @@ "require": "./dist/browser-cjs/index.js", "import": "./dist/esm2017/index.js" }, + "extension": { + "require": "./dist/extension-cjs/index.js", + "import": "./dist/extension-esm2017/index.js" + }, "default": "./dist/esm2017/index.js" }, "./cordova": { "types": "./dist/cordova/index.cordova.d.ts", "default": "./dist/cordova/index.js" }, + "./extension": { + "types:": "./dist/extension-esm2017/index.extension.d.ts", + "default": "./dist/extension-esm2017/index.js" + }, "./internal": { "types": "./dist/internal/index.d.ts", "node": { @@ -61,6 +70,10 @@ "require": "./dist/browser-cjs/internal.js", "import": "./dist/esm2017/internal.js" }, + "extension": { + "require": "./dist/extension-cjs/internal.js", + "import": "./dist/extension-esm2017/internal.js" + }, "default": "./dist/esm2017/internal.js" }, "./package.json": "./package.json" diff --git a/packages/auth/rollup.config.js b/packages/auth/rollup.config.js index 01e358a9aff..f9f2751bb70 100644 --- a/packages/auth/rollup.config.js +++ b/packages/auth/rollup.config.js @@ -112,6 +112,49 @@ const browserBuilds = [ } ]; +const browserExtensionBuilds = [ + { + input: { + index: 'index.extension.ts', + internal: 'internal/index.ts' + }, + output: [{ dir: 'dist/extension-esm5', format: 'es', sourcemap: true }], + plugins: [ + ...es5BuildPlugins, + replace(generateBuildTargetReplaceConfig('esm', 5)) + ], + external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)) + }, + { + input: { + index: 'index.extension.ts', + internal: 'internal/index.ts' + }, + output: { + dir: 'dist/extension-esm2017', + format: 'es', + sourcemap: true + }, + plugins: [ + ...es2017BuildPlugins, + replace(generateBuildTargetReplaceConfig('esm', 2017)) + ], + external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)) + }, + { + input: { + index: 'index.extension.ts', + internal: 'internal/index.ts' + }, + output: [{ dir: 'dist/extension-cjs', format: 'cjs', sourcemap: true }], + plugins: [ + ...es2017BuildPlugins, + replace(generateBuildTargetReplaceConfig('cjs', 2017)) + ], + external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)) + } +]; + const nodeBuilds = [ { input: { @@ -198,8 +241,9 @@ const webWorkerBuild = { export default [ ...browserBuilds, + ...browserExtensionBuilds, ...nodeBuilds, cordovaBuild, rnBuild, - webWorkerBuild + webWorkerBuild, ]; diff --git a/packages/auth/src/platform_browser/iframe/gapi.ts b/packages/auth/src/platform_browser/iframe/gapi.ts index a76cf886d34..7d9633043fe 100644 --- a/packages/auth/src/platform_browser/iframe/gapi.ts +++ b/packages/auth/src/platform_browser/iframe/gapi.ts @@ -104,7 +104,7 @@ function loadGapi(auth: AuthInternal): Promise { }; // Load GApi loader. return js - ._loadJS(`https://apis.google.com/js/api.js?onload=${cbName}`) + ._loadJS(`${js._gapiScriptUrl()}?onload=${cbName}`) .catch(e => reject(e)); } }).catch(error => { diff --git a/packages/auth/src/platform_browser/index.ts b/packages/auth/src/platform_browser/index.ts index 9bfe4e3b01a..be44c63adf4 100644 --- a/packages/auth/src/platform_browser/index.ts +++ b/packages/auth/src/platform_browser/index.ts @@ -31,6 +31,9 @@ import { indexedDBLocalPersistence } from './persistence/indexed_db'; import { browserPopupRedirectResolver } from './popup_redirect'; import { Auth, User } from '../model/public_types'; import { getDefaultEmulatorHost, getExperimentalSetting } from '@firebase/util'; +import { _setExternalJSProvider } from './load_js'; +import { _createError } from '../core/util/assert'; +import { AuthErrorCode } from '../core/errors'; const DEFAULT_ID_TOKEN_MAX_AGE = 5 * 60; const authIdTokenMaxAge = @@ -103,4 +106,30 @@ export function getAuth(app: FirebaseApp = getApp()): Auth { return auth; } +function getScriptParentElement(): HTMLDocument | HTMLHeadElement { + return document.getElementsByTagName('head')?.[0] ?? document; +} + +_setExternalJSProvider({ + loadJS(url: string): Promise { + // TODO: consider adding timeout support & cancellation + return new Promise((resolve, reject) => { + const el = document.createElement('script'); + el.setAttribute('src', url); + el.onload = resolve; + el.onerror = e => { + const error = _createError(AuthErrorCode.INTERNAL_ERROR); + error.customData = e as unknown as Record; + reject(error); + }; + el.type = 'text/javascript'; + el.charset = 'UTF-8'; + getScriptParentElement().appendChild(el); + }); + }, + + gapiScript: 'https://apis.google.com/js/api.js', + reCAPTCHAScript: 'https://www.google.com/recaptcha/api.js', +}) + registerAuth(ClientPlatform.BROWSER); diff --git a/packages/auth/src/platform_browser/load_js.ts b/packages/auth/src/platform_browser/load_js.ts index 229442b0b51..24c76446109 100644 --- a/packages/auth/src/platform_browser/load_js.ts +++ b/packages/auth/src/platform_browser/load_js.ts @@ -15,30 +15,56 @@ * limitations under the License. */ -import { AuthErrorCode } from '../core/errors'; import { _createError } from '../core/util/assert'; -function getScriptParentElement(): HTMLDocument | HTMLHeadElement { - return document.getElementsByTagName('head')?.[0] ?? document; +interface ExternalJSProvider { + loadJS(url: string): Promise; + reCAPTCHAScript: string; + gapiScript: string; +} + +let externalJSProvider: ExternalJSProvider = { + async loadJS() { + throw new Error('Unable to load external scripts'); + }, + + reCAPTCHAScript: '', + gapiScript: '', +} + +export function _setExternalJSProvider(p: ExternalJSProvider) { + externalJSProvider = p; } export function _loadJS(url: string): Promise { - // TODO: consider adding timeout support & cancellation - return new Promise((resolve, reject) => { - const el = document.createElement('script'); - el.setAttribute('src', url); - el.onload = resolve; - el.onerror = e => { - const error = _createError(AuthErrorCode.INTERNAL_ERROR); - error.customData = e as unknown as Record; - reject(error); - }; - el.type = 'text/javascript'; - el.charset = 'UTF-8'; - getScriptParentElement().appendChild(el); - }); + return externalJSProvider.loadJS(url); } +export function _recaptchaScriptUrl(): string { + return externalJSProvider.reCAPTCHAScript; +} + +export function _gapiScriptUrl(): string { + return externalJSProvider.gapiScript; +} + +// export function _loadJS(url: string): Promise { +// // TODO: consider adding timeout support & cancellation +// return new Promise((resolve, reject) => { +// const el = document.createElement('script'); +// el.setAttribute('src', url); +// el.onload = resolve; +// el.onerror = e => { +// const error = _createError(AuthErrorCode.INTERNAL_ERROR); +// error.customData = e as unknown as Record; +// reject(error); +// }; +// el.type = 'text/javascript'; +// el.charset = 'UTF-8'; +// getScriptParentElement().appendChild(el); +// }); +// } + export function _generateCallbackName(prefix: string): string { return `__${prefix}${Math.floor(Math.random() * 1000000)}`; } diff --git a/packages/auth/src/platform_browser/recaptcha/recaptcha_loader.ts b/packages/auth/src/platform_browser/recaptcha/recaptcha_loader.ts index 2b945464cea..bb6ff1dec29 100644 --- a/packages/auth/src/platform_browser/recaptcha/recaptcha_loader.ts +++ b/packages/auth/src/platform_browser/recaptcha/recaptcha_loader.ts @@ -30,7 +30,6 @@ import { MockReCaptcha } from './recaptcha_mock'; // to be kept around export const _JSLOAD_CALLBACK = jsHelpers._generateCallbackName('rcb'); const NETWORK_TIMEOUT_DELAY = new Delay(30000, 60000); -const RECAPTCHA_BASE = 'https://www.google.com/recaptcha/api.js?'; /** * We need to mark this interface as internal explicitly to exclude it in the public typings, because @@ -91,7 +90,7 @@ export class ReCaptchaLoaderImpl implements ReCaptchaLoader { resolve(recaptcha); }; - const url = `${RECAPTCHA_BASE}?${querystring({ + const url = `${jsHelpers._recaptchaScriptUrl()}?${querystring({ onload: _JSLOAD_CALLBACK, render: 'explicit', hl From c82c6f3dd7dd12b64c486fd2cce7ac7bb2a3f5ec Mon Sep 17 00:00:00 2001 From: nhienlam Date: Sun, 5 Nov 2023 22:22:44 -0800 Subject: [PATCH 2/8] Strip recaptcha enterprise script and unsupported methods in extension --- packages/auth/index.extension.ts | 50 ++----------------- packages/auth/rollup.config.js | 2 +- packages/auth/src/core/auth/register.ts | 2 + packages/auth/src/core/util/version.ts | 3 +- packages/auth/src/platform_browser/index.ts | 6 ++- .../auth/src/platform_browser/load_js.test.ts | 24 ++++++++- packages/auth/src/platform_browser/load_js.ts | 22 ++++---- .../recaptcha_enterprise_verifier.ts | 9 ++-- .../recaptcha/recaptcha_loader.ts | 2 +- 9 files changed, 55 insertions(+), 65 deletions(-) diff --git a/packages/auth/index.extension.ts b/packages/auth/index.extension.ts index b764d50a3e5..f8038cb2eff 100644 --- a/packages/auth/index.extension.ts +++ b/packages/auth/index.extension.ts @@ -1,6 +1,6 @@ /** * @license - * Copyright 2017 Google LLC + * Copyright 2023 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,31 +18,11 @@ // Core functionality shared by all clients export * from './src'; -// Additional DOM dependend functionality; we need to import and then -// export separately so that the rollup alias will work (for aliasing these -// imports in node environments to no-ops and errors... see -// src/platform_node/index.ts). +import { ClientPlatform } from './src/core/util/version'; -// persistence -import { browserLocalPersistence } from './src/platform_browser/persistence/local_storage'; import { browserSessionPersistence } from './src/platform_browser/persistence/session_storage'; import { indexedDBLocalPersistence } from './src/platform_browser/persistence/indexed_db'; -// providers -import { PhoneAuthProvider } from './src/platform_browser/providers/phone'; - -// strategies -import { - signInWithPhoneNumber, - linkWithPhoneNumber, - reauthenticateWithPhoneNumber, - updatePhoneNumber -} from './src/platform_browser/strategies/phone'; -import { - signInWithPopup, - linkWithPopup, - reauthenticateWithPopup -} from './src/platform_browser/strategies/popup'; import { signInWithRedirect, linkWithRedirect, @@ -50,11 +30,6 @@ import { getRedirectResult } from './src/platform_browser/strategies/redirect'; -import { RecaptchaVerifier } from './src/platform_browser/recaptcha/recaptcha_verifier'; -import { browserPopupRedirectResolver } from './src/platform_browser/popup_redirect'; - -// MFA -import { PhoneMultiFactorGenerator } from './src/platform_browser/mfa/assertions/phone'; import { TotpMultiFactorGenerator, TotpSecret @@ -80,12 +55,7 @@ function getAuth(app: FirebaseApp = getApp()): Auth { } const auth = initializeAuth(app, { - popupRedirectResolver: browserPopupRedirectResolver, - persistence: [ - indexedDBLocalPersistence, - browserLocalPersistence, - browserSessionPersistence - ] + persistence: [indexedDBLocalPersistence, browserSessionPersistence] }); const authEmulatorHost = getDefaultEmulatorHost('auth'); @@ -96,27 +66,15 @@ function getAuth(app: FirebaseApp = getApp()): Auth { return auth; } -registerAuth('browser' as any); +registerAuth(ClientPlatform.EXTENSION); export { - browserLocalPersistence, browserSessionPersistence, indexedDBLocalPersistence, - PhoneAuthProvider, - signInWithPhoneNumber, - linkWithPhoneNumber, - reauthenticateWithPhoneNumber, - updatePhoneNumber, - signInWithPopup, - linkWithPopup, - reauthenticateWithPopup, signInWithRedirect, linkWithRedirect, reauthenticateWithRedirect, getRedirectResult, - RecaptchaVerifier, - browserPopupRedirectResolver, - PhoneMultiFactorGenerator, TotpMultiFactorGenerator, TotpSecret, getAuth diff --git a/packages/auth/rollup.config.js b/packages/auth/rollup.config.js index f9f2751bb70..97e10456984 100644 --- a/packages/auth/rollup.config.js +++ b/packages/auth/rollup.config.js @@ -245,5 +245,5 @@ export default [ ...nodeBuilds, cordovaBuild, rnBuild, - webWorkerBuild, + webWorkerBuild ]; diff --git a/packages/auth/src/core/auth/register.ts b/packages/auth/src/core/auth/register.ts index c203d682d00..7fe6081acb0 100644 --- a/packages/auth/src/core/auth/register.ts +++ b/packages/auth/src/core/auth/register.ts @@ -49,6 +49,8 @@ function getVersionForPlatform( return 'webworker'; case ClientPlatform.CORDOVA: return 'cordova'; + case ClientPlatform.EXTENSION: + return 'extension'; default: return undefined; } diff --git a/packages/auth/src/core/util/version.ts b/packages/auth/src/core/util/version.ts index dae126296d6..3e57f08467e 100644 --- a/packages/auth/src/core/util/version.ts +++ b/packages/auth/src/core/util/version.ts @@ -31,7 +31,8 @@ export const enum ClientPlatform { NODE = 'Node', REACT_NATIVE = 'ReactNative', CORDOVA = 'Cordova', - WORKER = 'Worker' + WORKER = 'Worker', + EXTENSION = 'Extension' } /* diff --git a/packages/auth/src/platform_browser/index.ts b/packages/auth/src/platform_browser/index.ts index be44c63adf4..6399072d713 100644 --- a/packages/auth/src/platform_browser/index.ts +++ b/packages/auth/src/platform_browser/index.ts @@ -129,7 +129,9 @@ _setExternalJSProvider({ }, gapiScript: 'https://apis.google.com/js/api.js', - reCAPTCHAScript: 'https://www.google.com/recaptcha/api.js', -}) + recaptchaV2Script: 'https://www.google.com/recaptcha/api.js', + recaptchaEnterpriseScript: + 'https://www.google.com/recaptcha/enterprise.js?render=' +}); registerAuth(ClientPlatform.BROWSER); diff --git a/packages/auth/src/platform_browser/load_js.test.ts b/packages/auth/src/platform_browser/load_js.test.ts index df6e994f614..6db1af25a70 100644 --- a/packages/auth/src/platform_browser/load_js.test.ts +++ b/packages/auth/src/platform_browser/load_js.test.ts @@ -19,7 +19,13 @@ import { expect, use } from 'chai'; import * as sinon from 'sinon'; import sinonChai from 'sinon-chai'; -import { _generateCallbackName, _loadJS } from './load_js'; +import { + _generateCallbackName, + _loadJS, + _setExternalJSProvider +} from './load_js'; +import { _createError } from '../core/util/assert'; +import { AuthErrorCode } from '../core/errors'; use(sinonChai); @@ -34,6 +40,22 @@ describe('platform-browser/load_js', () => { describe('_loadJS', () => { it('sets the appropriate properties', () => { + _setExternalJSProvider({ + loadJS(url: string): Promise { + return new Promise((resolve, reject) => { + const el = document.createElement('script'); + el.setAttribute('src', url); + el.onload = resolve; + el.onerror = e => { + const error = _createError(AuthErrorCode.INTERNAL_ERROR); + error.customData = e as unknown as Record; + reject(error); + }; + el.type = 'text/javascript'; + el.charset = 'UTF-8'; + }); + } + }); const el = document.createElement('script'); sinon.stub(el); // Prevent actually setting the src attribute sinon.stub(document, 'createElement').returns(el); diff --git a/packages/auth/src/platform_browser/load_js.ts b/packages/auth/src/platform_browser/load_js.ts index 24c76446109..c0783016488 100644 --- a/packages/auth/src/platform_browser/load_js.ts +++ b/packages/auth/src/platform_browser/load_js.ts @@ -15,11 +15,10 @@ * limitations under the License. */ -import { _createError } from '../core/util/assert'; - interface ExternalJSProvider { loadJS(url: string): Promise; - reCAPTCHAScript: string; + recaptchaV2Script: string; + recaptchaEnterpriseScript: string; gapiScript: string; } @@ -28,11 +27,12 @@ let externalJSProvider: ExternalJSProvider = { throw new Error('Unable to load external scripts'); }, - reCAPTCHAScript: '', - gapiScript: '', -} + recaptchaV2Script: '', + recaptchaEnterpriseScript: '', + gapiScript: '' +}; -export function _setExternalJSProvider(p: ExternalJSProvider) { +export function _setExternalJSProvider(p: ExternalJSProvider): void { externalJSProvider = p; } @@ -40,8 +40,12 @@ export function _loadJS(url: string): Promise { return externalJSProvider.loadJS(url); } -export function _recaptchaScriptUrl(): string { - return externalJSProvider.reCAPTCHAScript; +export function _recaptchaV2ScriptUrl(): string { + return externalJSProvider.recaptchaV2Script; +} + +export function _recaptchaEnterpriseScriptUrl(): string { + return externalJSProvider.recaptchaEnterpriseScript; } export function _gapiScriptUrl(): string { diff --git a/packages/auth/src/platform_browser/recaptcha/recaptcha_enterprise_verifier.ts b/packages/auth/src/platform_browser/recaptcha/recaptcha_enterprise_verifier.ts index 8d188032e36..cccd737defc 100644 --- a/packages/auth/src/platform_browser/recaptcha/recaptcha_enterprise_verifier.ts +++ b/packages/auth/src/platform_browser/recaptcha/recaptcha_enterprise_verifier.ts @@ -31,9 +31,6 @@ import { _castAuth } from '../../core/auth/auth_impl'; import * as jsHelpers from '../load_js'; import { AuthErrorCode } from '../../core/errors'; -const RECAPTCHA_ENTERPRISE_URL = - 'https://www.google.com/recaptcha/enterprise.js?render='; - export const RECAPTCHA_ENTERPRISE_VERIFIER_TYPE = 'recaptcha-enterprise'; export const FAKE_TOKEN = 'NO_RECAPTCHA'; @@ -134,8 +131,12 @@ export class RecaptchaEnterpriseVerifier { ); return; } + let url = jsHelpers._recaptchaEnterpriseScriptUrl(); + if (url.length !== 0) { + url += siteKey; + } jsHelpers - ._loadJS(RECAPTCHA_ENTERPRISE_URL + siteKey) + ._loadJS(url) .then(() => { retrieveRecaptchaToken(siteKey, resolve, reject); }) diff --git a/packages/auth/src/platform_browser/recaptcha/recaptcha_loader.ts b/packages/auth/src/platform_browser/recaptcha/recaptcha_loader.ts index bb6ff1dec29..f510436223f 100644 --- a/packages/auth/src/platform_browser/recaptcha/recaptcha_loader.ts +++ b/packages/auth/src/platform_browser/recaptcha/recaptcha_loader.ts @@ -90,7 +90,7 @@ export class ReCaptchaLoaderImpl implements ReCaptchaLoader { resolve(recaptcha); }; - const url = `${jsHelpers._recaptchaScriptUrl()}?${querystring({ + const url = `${jsHelpers._recaptchaV2ScriptUrl()}?${querystring({ onload: _JSLOAD_CALLBACK, render: 'explicit', hl From 1d9f9e206cec0d616df26cf450a821883ce9194e Mon Sep 17 00:00:00 2001 From: nhienlam Date: Mon, 6 Nov 2023 15:29:19 -0800 Subject: [PATCH 3/8] Remove signInWithRedirect from Extension package and dist/extension-esm5 from rollup file --- packages/auth/index.extension.ts | 11 ----------- packages/auth/rollup.config.js | 12 ------------ packages/auth/src/platform_browser/load_js.ts | 17 ----------------- 3 files changed, 40 deletions(-) diff --git a/packages/auth/index.extension.ts b/packages/auth/index.extension.ts index f8038cb2eff..6faed336c5c 100644 --- a/packages/auth/index.extension.ts +++ b/packages/auth/index.extension.ts @@ -23,13 +23,6 @@ import { ClientPlatform } from './src/core/util/version'; import { browserSessionPersistence } from './src/platform_browser/persistence/session_storage'; import { indexedDBLocalPersistence } from './src/platform_browser/persistence/indexed_db'; -import { - signInWithRedirect, - linkWithRedirect, - reauthenticateWithRedirect, - getRedirectResult -} from './src/platform_browser/strategies/redirect'; - import { TotpMultiFactorGenerator, TotpSecret @@ -71,10 +64,6 @@ registerAuth(ClientPlatform.EXTENSION); export { browserSessionPersistence, indexedDBLocalPersistence, - signInWithRedirect, - linkWithRedirect, - reauthenticateWithRedirect, - getRedirectResult, TotpMultiFactorGenerator, TotpSecret, getAuth diff --git a/packages/auth/rollup.config.js b/packages/auth/rollup.config.js index 97e10456984..e4f3311bcfc 100644 --- a/packages/auth/rollup.config.js +++ b/packages/auth/rollup.config.js @@ -113,18 +113,6 @@ const browserBuilds = [ ]; const browserExtensionBuilds = [ - { - input: { - index: 'index.extension.ts', - internal: 'internal/index.ts' - }, - output: [{ dir: 'dist/extension-esm5', format: 'es', sourcemap: true }], - plugins: [ - ...es5BuildPlugins, - replace(generateBuildTargetReplaceConfig('esm', 5)) - ], - external: id => deps.some(dep => id === dep || id.startsWith(`${dep}/`)) - }, { input: { index: 'index.extension.ts', diff --git a/packages/auth/src/platform_browser/load_js.ts b/packages/auth/src/platform_browser/load_js.ts index c0783016488..b7eb0ce4690 100644 --- a/packages/auth/src/platform_browser/load_js.ts +++ b/packages/auth/src/platform_browser/load_js.ts @@ -52,23 +52,6 @@ export function _gapiScriptUrl(): string { return externalJSProvider.gapiScript; } -// export function _loadJS(url: string): Promise { -// // TODO: consider adding timeout support & cancellation -// return new Promise((resolve, reject) => { -// const el = document.createElement('script'); -// el.setAttribute('src', url); -// el.onload = resolve; -// el.onerror = e => { -// const error = _createError(AuthErrorCode.INTERNAL_ERROR); -// error.customData = e as unknown as Record; -// reject(error); -// }; -// el.type = 'text/javascript'; -// el.charset = 'UTF-8'; -// getScriptParentElement().appendChild(el); -// }); -// } - export function _generateCallbackName(prefix: string): string { return `__${prefix}${Math.floor(Math.random() * 1000000)}`; } From ee0167b3c767686f5c90fb92ea1516175bce662f Mon Sep 17 00:00:00 2001 From: nhienlam Date: Thu, 9 Nov 2023 17:13:27 -0800 Subject: [PATCH 4/8] Add extension entry point to firebase/auth --- packages/auth/extension/package.json | 1 + packages/auth/package.json | 13 +++++++------ packages/firebase/auth/extension/index.ts | 18 ++++++++++++++++++ packages/firebase/auth/extension/package.json | 7 +++++++ packages/firebase/package.json | 12 ++++++++++++ 5 files changed, 45 insertions(+), 6 deletions(-) create mode 100644 packages/firebase/auth/extension/index.ts create mode 100644 packages/firebase/auth/extension/package.json diff --git a/packages/auth/extension/package.json b/packages/auth/extension/package.json index 3630ec1d8a4..7529a81748d 100644 --- a/packages/auth/extension/package.json +++ b/packages/auth/extension/package.json @@ -1,6 +1,7 @@ { "name": "@firebase/auth/extension", "description": "A Manifest-v3-specific build of the Firebase Auth JS SDK", + "main": "dist/index.cjs.js", "browser": "../dist/extension-esm2017/index.js", "module": "../dist/extension-esm2017/index.js", "typings": "../dist/extension-esm2017/index.extension.d.ts" diff --git a/packages/auth/package.json b/packages/auth/package.json index 10d7d8c164f..0f12cd18156 100644 --- a/packages/auth/package.json +++ b/packages/auth/package.json @@ -36,10 +36,6 @@ "require": "./dist/browser-cjs/index.js", "import": "./dist/esm2017/index.js" }, - "extension": { - "require": "./dist/extension-cjs/index.js", - "import": "./dist/extension-esm2017/index.js" - }, "default": "./dist/esm2017/index.js" }, "./cordova": { @@ -48,6 +44,8 @@ }, "./extension": { "types:": "./dist/extension-esm2017/index.extension.d.ts", + "import": "./dist/extension-esm2017/index.js", + "require": "./dist/extension-cjs/index.js", "default": "./dist/extension-esm2017/index.js" }, "./internal": { @@ -71,8 +69,10 @@ "import": "./dist/esm2017/internal.js" }, "extension": { + "types:": "./dist/extension-cjs/internal/index.d.ts", + "import": "./dist/extension-esm2017/internal.js", "require": "./dist/extension-cjs/internal.js", - "import": "./dist/extension-esm2017/internal.js" + "default": "./dist/extension-esm2017/internal.js" }, "default": "./dist/esm2017/internal.js" }, @@ -81,7 +81,8 @@ "files": [ "dist", "cordova/package.json", - "internal/package.json" + "internal/package.json", + "extension/package.json" ], "scripts": { "lint": "eslint -c .eslintrc.js '**/*.ts' --ignore-path '../../.gitignore'", diff --git a/packages/firebase/auth/extension/index.ts b/packages/firebase/auth/extension/index.ts new file mode 100644 index 00000000000..b97b5f0b9a5 --- /dev/null +++ b/packages/firebase/auth/extension/index.ts @@ -0,0 +1,18 @@ +/** + * @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. + */ + +export * from '@firebase/auth/extension'; diff --git a/packages/firebase/auth/extension/package.json b/packages/firebase/auth/extension/package.json new file mode 100644 index 00000000000..ee160ec82ce --- /dev/null +++ b/packages/firebase/auth/extension/package.json @@ -0,0 +1,7 @@ +{ + "name": "firebase/auth/extension", + "main": "dist/index.cjs.js", + "browser": "dist/esm/index.esm.js", + "module": "dist/esm/index.esm.js", + "typings": "dist/auth/extension/index.d.ts" +} \ No newline at end of file diff --git a/packages/firebase/package.json b/packages/firebase/package.json index d6c9606a29b..ec91ed91575 100644 --- a/packages/firebase/package.json +++ b/packages/firebase/package.json @@ -83,6 +83,18 @@ }, "default": "./auth/cordova/dist/esm/index.esm.js" }, + "./auth/extension": { + "types": "./auth/extension/dist/auth/extension/index.d.ts", + "node": { + "require": "./auth/extension/dist/index.cjs.js", + "import": "./auth/extension/dist/index.mjs" + }, + "browser": { + "require": "./auth/extension/dist/index.cjs.js", + "import": "./auth/extension/dist/esm/index.esm.js" + }, + "default": "./auth/extension/dist/esm/index.esm.js" + }, "./database": { "types": "./database/dist/database/index.d.ts", "node": { From f8ee64b30fe85371c56697e505bc76c5ac63c9b4 Mon Sep 17 00:00:00 2001 From: nhienlam Date: Sat, 11 Nov 2023 14:55:56 -0800 Subject: [PATCH 5/8] Resolve comments --- packages/auth/extension/package.json | 2 +- packages/firebase/auth/extension/index.ts | 2 +- packages/firebase/package.json | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/auth/extension/package.json b/packages/auth/extension/package.json index 7529a81748d..7286c11260c 100644 --- a/packages/auth/extension/package.json +++ b/packages/auth/extension/package.json @@ -1,7 +1,7 @@ { "name": "@firebase/auth/extension", "description": "A Manifest-v3-specific build of the Firebase Auth JS SDK", - "main": "dist/index.cjs.js", + "main": "../dist/extension-cjs/index.js", "browser": "../dist/extension-esm2017/index.js", "module": "../dist/extension-esm2017/index.js", "typings": "../dist/extension-esm2017/index.extension.d.ts" diff --git a/packages/firebase/auth/extension/index.ts b/packages/firebase/auth/extension/index.ts index b97b5f0b9a5..3eadc0018dc 100644 --- a/packages/firebase/auth/extension/index.ts +++ b/packages/firebase/auth/extension/index.ts @@ -1,6 +1,6 @@ /** * @license - * Copyright 2021 Google LLC + * Copyright 2023 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/packages/firebase/package.json b/packages/firebase/package.json index ec91ed91575..3f0f9a80132 100644 --- a/packages/firebase/package.json +++ b/packages/firebase/package.json @@ -421,6 +421,7 @@ "app-check", "auth", "auth/cordova", + "auth/extension", "functions", "firestore", "firestore/lite", From baf695b9eb450385b41f3d54acd4ad2296b8ef87 Mon Sep 17 00:00:00 2001 From: nhienlam Date: Mon, 11 Dec 2023 10:31:39 -0800 Subject: [PATCH 6/8] Rename 'extension' to 'chrome-extension' --- packages/auth/chrome-extension/package.json | 8 +++++++ packages/auth/extension/package.json | 8 ------- ...extension.ts => index.chrome-extension.ts} | 6 ++--- packages/auth/package.json | 24 +++++++++---------- packages/auth/rollup.config.js | 14 ++++++----- packages/auth/src/core/auth/register.ts | 4 ++-- packages/auth/src/core/util/version.test.ts | 8 +++++++ packages/auth/src/core/util/version.ts | 2 +- .../{extension => chrome-extension}/index.ts | 2 +- .../package.json | 4 ++-- packages/firebase/package.json | 16 ++++++------- 11 files changed, 52 insertions(+), 44 deletions(-) create mode 100644 packages/auth/chrome-extension/package.json delete mode 100644 packages/auth/extension/package.json rename packages/auth/{index.extension.ts => index.chrome-extension.ts} (88%) rename packages/firebase/auth/{extension => chrome-extension}/index.ts (92%) rename packages/firebase/auth/{extension => chrome-extension}/package.json (52%) diff --git a/packages/auth/chrome-extension/package.json b/packages/auth/chrome-extension/package.json new file mode 100644 index 00000000000..9d4ddf57c12 --- /dev/null +++ b/packages/auth/chrome-extension/package.json @@ -0,0 +1,8 @@ +{ + "name": "@firebase/auth/chrome-extension", + "description": "A Chrome-Manifest-v3-specific build of the Firebase Auth JS SDK", + "main": "../dist/chrome-extension-cjs/index.js", + "browser": "../dist/chrome-extension-esm2017/index.js", + "module": "../dist/chrome-extension-esm2017/index.js", + "typings": "../dist/chrome-extension-esm2017/index.chrome-extension.d.ts" +} \ No newline at end of file diff --git a/packages/auth/extension/package.json b/packages/auth/extension/package.json deleted file mode 100644 index 7286c11260c..00000000000 --- a/packages/auth/extension/package.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "name": "@firebase/auth/extension", - "description": "A Manifest-v3-specific build of the Firebase Auth JS SDK", - "main": "../dist/extension-cjs/index.js", - "browser": "../dist/extension-esm2017/index.js", - "module": "../dist/extension-esm2017/index.js", - "typings": "../dist/extension-esm2017/index.extension.d.ts" - } \ No newline at end of file diff --git a/packages/auth/index.extension.ts b/packages/auth/index.chrome-extension.ts similarity index 88% rename from packages/auth/index.extension.ts rename to packages/auth/index.chrome-extension.ts index 6faed336c5c..1625d6c9b76 100644 --- a/packages/auth/index.extension.ts +++ b/packages/auth/index.chrome-extension.ts @@ -20,7 +20,6 @@ export * from './src'; import { ClientPlatform } from './src/core/util/version'; -import { browserSessionPersistence } from './src/platform_browser/persistence/session_storage'; import { indexedDBLocalPersistence } from './src/platform_browser/persistence/indexed_db'; import { @@ -48,7 +47,7 @@ function getAuth(app: FirebaseApp = getApp()): Auth { } const auth = initializeAuth(app, { - persistence: [indexedDBLocalPersistence, browserSessionPersistence] + persistence: [indexedDBLocalPersistence] }); const authEmulatorHost = getDefaultEmulatorHost('auth'); @@ -59,10 +58,9 @@ function getAuth(app: FirebaseApp = getApp()): Auth { return auth; } -registerAuth(ClientPlatform.EXTENSION); +registerAuth(ClientPlatform.CHROME_EXTENSION); export { - browserSessionPersistence, indexedDBLocalPersistence, TotpMultiFactorGenerator, TotpSecret, diff --git a/packages/auth/package.json b/packages/auth/package.json index 0f12cd18156..2222a8b5876 100644 --- a/packages/auth/package.json +++ b/packages/auth/package.json @@ -8,7 +8,7 @@ "browser": "dist/esm2017/index.js", "module": "dist/esm2017/index.js", "cordova": "dist/cordova/index.js", - "extension": "dist/extension-esm2017/index.js", + "chrome-extension": "dist/chrome-extension-esm2017/index.js", "webworker": "dist/index.webworker.esm5.js", "esm5": "dist/esm5/index.js", "exports": { @@ -42,11 +42,11 @@ "types": "./dist/cordova/index.cordova.d.ts", "default": "./dist/cordova/index.js" }, - "./extension": { - "types:": "./dist/extension-esm2017/index.extension.d.ts", - "import": "./dist/extension-esm2017/index.js", - "require": "./dist/extension-cjs/index.js", - "default": "./dist/extension-esm2017/index.js" + "./chrome-extension": { + "types:": "./dist/chrome-extension-esm2017/index.chrome-extension.d.ts", + "import": "./dist/chrome-extension-esm2017/index.js", + "require": "./dist/chrome-extension-cjs/index.js", + "default": "./dist/chrome-extension-esm2017/index.js" }, "./internal": { "types": "./dist/internal/index.d.ts", @@ -68,11 +68,11 @@ "require": "./dist/browser-cjs/internal.js", "import": "./dist/esm2017/internal.js" }, - "extension": { - "types:": "./dist/extension-cjs/internal/index.d.ts", - "import": "./dist/extension-esm2017/internal.js", - "require": "./dist/extension-cjs/internal.js", - "default": "./dist/extension-esm2017/internal.js" + "chrome-extension": { + "types:": "./dist/chrome-extension-cjs/internal/index.d.ts", + "import": "./dist/chrome-extension-esm2017/internal.js", + "require": "./dist/chrome-extension-cjs/internal.js", + "default": "./dist/chrome-extension-esm2017/internal.js" }, "default": "./dist/esm2017/internal.js" }, @@ -82,7 +82,7 @@ "dist", "cordova/package.json", "internal/package.json", - "extension/package.json" + "chrome-extension/package.json" ], "scripts": { "lint": "eslint -c .eslintrc.js '**/*.ts' --ignore-path '../../.gitignore'", diff --git a/packages/auth/rollup.config.js b/packages/auth/rollup.config.js index e4f3311bcfc..67e1737fd89 100644 --- a/packages/auth/rollup.config.js +++ b/packages/auth/rollup.config.js @@ -112,14 +112,14 @@ const browserBuilds = [ } ]; -const browserExtensionBuilds = [ +const browserChromeExtensionBuilds = [ { input: { - index: 'index.extension.ts', + index: 'index.chrome-extension.ts', internal: 'internal/index.ts' }, output: { - dir: 'dist/extension-esm2017', + dir: 'dist/chrome-extension-esm2017', format: 'es', sourcemap: true }, @@ -131,10 +131,12 @@ const browserExtensionBuilds = [ }, { input: { - index: 'index.extension.ts', + index: 'index.chrome-extension.ts', internal: 'internal/index.ts' }, - output: [{ dir: 'dist/extension-cjs', format: 'cjs', sourcemap: true }], + output: [ + { dir: 'dist/chrome-extension-cjs', format: 'cjs', sourcemap: true } + ], plugins: [ ...es2017BuildPlugins, replace(generateBuildTargetReplaceConfig('cjs', 2017)) @@ -229,7 +231,7 @@ const webWorkerBuild = { export default [ ...browserBuilds, - ...browserExtensionBuilds, + ...browserChromeExtensionBuilds, ...nodeBuilds, cordovaBuild, rnBuild, diff --git a/packages/auth/src/core/auth/register.ts b/packages/auth/src/core/auth/register.ts index 7fe6081acb0..889d5d69b4e 100644 --- a/packages/auth/src/core/auth/register.ts +++ b/packages/auth/src/core/auth/register.ts @@ -49,8 +49,8 @@ function getVersionForPlatform( return 'webworker'; case ClientPlatform.CORDOVA: return 'cordova'; - case ClientPlatform.EXTENSION: - return 'extension'; + case ClientPlatform.CHROME_EXTENSION: + return 'chrome-extension'; default: return undefined; } diff --git a/packages/auth/src/core/util/version.test.ts b/packages/auth/src/core/util/version.test.ts index 86ab624f22d..f284366c8f9 100644 --- a/packages/auth/src/core/util/version.test.ts +++ b/packages/auth/src/core/util/version.test.ts @@ -56,5 +56,13 @@ describe('core/util/_getClientVersion', () => { ); }); }); + + context('Chrome Extension', () => { + it('should set the correct version', () => { + expect(_getClientVersion(ClientPlatform.CHROME_EXTENSION)).to.eq( + `ChromeExtension/JsCore/${SDK_VERSION}/FirebaseCore-web` + ); + }); + }); } }); diff --git a/packages/auth/src/core/util/version.ts b/packages/auth/src/core/util/version.ts index 3e57f08467e..f42882756ac 100644 --- a/packages/auth/src/core/util/version.ts +++ b/packages/auth/src/core/util/version.ts @@ -32,7 +32,7 @@ export const enum ClientPlatform { REACT_NATIVE = 'ReactNative', CORDOVA = 'Cordova', WORKER = 'Worker', - EXTENSION = 'Extension' + CHROME_EXTENSION = 'ChromeExtension' } /* diff --git a/packages/firebase/auth/extension/index.ts b/packages/firebase/auth/chrome-extension/index.ts similarity index 92% rename from packages/firebase/auth/extension/index.ts rename to packages/firebase/auth/chrome-extension/index.ts index 3eadc0018dc..a6d3be1e2e2 100644 --- a/packages/firebase/auth/extension/index.ts +++ b/packages/firebase/auth/chrome-extension/index.ts @@ -15,4 +15,4 @@ * limitations under the License. */ -export * from '@firebase/auth/extension'; +export * from '@firebase/auth/chrome-extension'; diff --git a/packages/firebase/auth/extension/package.json b/packages/firebase/auth/chrome-extension/package.json similarity index 52% rename from packages/firebase/auth/extension/package.json rename to packages/firebase/auth/chrome-extension/package.json index ee160ec82ce..78f61e701c1 100644 --- a/packages/firebase/auth/extension/package.json +++ b/packages/firebase/auth/chrome-extension/package.json @@ -1,7 +1,7 @@ { - "name": "firebase/auth/extension", + "name": "firebase/auth/chrome-extension", "main": "dist/index.cjs.js", "browser": "dist/esm/index.esm.js", "module": "dist/esm/index.esm.js", - "typings": "dist/auth/extension/index.d.ts" + "typings": "dist/auth/chrome-extension/index.d.ts" } \ No newline at end of file diff --git a/packages/firebase/package.json b/packages/firebase/package.json index 3f0f9a80132..55850df674c 100644 --- a/packages/firebase/package.json +++ b/packages/firebase/package.json @@ -83,17 +83,17 @@ }, "default": "./auth/cordova/dist/esm/index.esm.js" }, - "./auth/extension": { - "types": "./auth/extension/dist/auth/extension/index.d.ts", + "./auth/chrome-extension": { + "types": "./auth/chrome-extension/dist/auth/chrome-extension/index.d.ts", "node": { - "require": "./auth/extension/dist/index.cjs.js", - "import": "./auth/extension/dist/index.mjs" + "require": "./auth/chrome-extension/dist/index.cjs.js", + "import": "./auth/chrome-extension/dist/index.mjs" }, "browser": { - "require": "./auth/extension/dist/index.cjs.js", - "import": "./auth/extension/dist/esm/index.esm.js" + "require": "./auth/chrome-extension/dist/index.cjs.js", + "import": "./auth/chrome-extension/dist/esm/index.esm.js" }, - "default": "./auth/extension/dist/esm/index.esm.js" + "default": "./auth/chrome-extension/dist/esm/index.esm.js" }, "./database": { "types": "./database/dist/database/index.d.ts", @@ -421,7 +421,7 @@ "app-check", "auth", "auth/cordova", - "auth/extension", + "auth/chrome-extension", "functions", "firestore", "firestore/lite", From 12ffe84f3e668bb708dd52c9de999dd0bd4237c1 Mon Sep 17 00:00:00 2001 From: nhienlam Date: Mon, 11 Dec 2023 12:04:25 -0800 Subject: [PATCH 7/8] Fix test --- packages/auth/src/platform_browser/load_js.test.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/auth/src/platform_browser/load_js.test.ts b/packages/auth/src/platform_browser/load_js.test.ts index 6db1af25a70..972fb292065 100644 --- a/packages/auth/src/platform_browser/load_js.test.ts +++ b/packages/auth/src/platform_browser/load_js.test.ts @@ -54,7 +54,10 @@ describe('platform-browser/load_js', () => { el.type = 'text/javascript'; el.charset = 'UTF-8'; }); - } + }, + gapiScript: 'https://gapiScript', + recaptchaV2Script: 'https://recaptchaV2Script', + recaptchaEnterpriseScript: 'https://recaptchaEnterpriseScript' }); const el = document.createElement('script'); sinon.stub(el); // Prevent actually setting the src attribute From 26634a44dcc9c097a8d7cceb9e1caf0bcb4ab8cc Mon Sep 17 00:00:00 2001 From: nhienlam Date: Tue, 9 Jan 2024 13:35:10 -0800 Subject: [PATCH 8/8] Rename 'chrome-extension' to 'web-extension --- packages/auth/chrome-extension/package.json | 8 ------- ...me-extension.ts => index.web-extension.ts} | 2 +- packages/auth/package.json | 24 +++++++++---------- packages/auth/rollup.config.js | 14 +++++------ packages/auth/src/core/auth/register.ts | 4 ++-- packages/auth/src/core/util/version.test.ts | 6 ++--- packages/auth/src/core/util/version.ts | 2 +- packages/auth/web-extension/package.json | 8 +++++++ .../index.ts | 2 +- .../package.json | 4 ++-- packages/firebase/package.json | 16 ++++++------- 11 files changed, 44 insertions(+), 46 deletions(-) delete mode 100644 packages/auth/chrome-extension/package.json rename packages/auth/{index.chrome-extension.ts => index.web-extension.ts} (97%) create mode 100644 packages/auth/web-extension/package.json rename packages/firebase/auth/{chrome-extension => web-extension}/index.ts (92%) rename packages/firebase/auth/{chrome-extension => web-extension}/package.json (52%) diff --git a/packages/auth/chrome-extension/package.json b/packages/auth/chrome-extension/package.json deleted file mode 100644 index 9d4ddf57c12..00000000000 --- a/packages/auth/chrome-extension/package.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "name": "@firebase/auth/chrome-extension", - "description": "A Chrome-Manifest-v3-specific build of the Firebase Auth JS SDK", - "main": "../dist/chrome-extension-cjs/index.js", - "browser": "../dist/chrome-extension-esm2017/index.js", - "module": "../dist/chrome-extension-esm2017/index.js", - "typings": "../dist/chrome-extension-esm2017/index.chrome-extension.d.ts" -} \ No newline at end of file diff --git a/packages/auth/index.chrome-extension.ts b/packages/auth/index.web-extension.ts similarity index 97% rename from packages/auth/index.chrome-extension.ts rename to packages/auth/index.web-extension.ts index 1625d6c9b76..d7296e9c839 100644 --- a/packages/auth/index.chrome-extension.ts +++ b/packages/auth/index.web-extension.ts @@ -58,7 +58,7 @@ function getAuth(app: FirebaseApp = getApp()): Auth { return auth; } -registerAuth(ClientPlatform.CHROME_EXTENSION); +registerAuth(ClientPlatform.WEB_EXTENSION); export { indexedDBLocalPersistence, diff --git a/packages/auth/package.json b/packages/auth/package.json index 2222a8b5876..bd2d47d3fd5 100644 --- a/packages/auth/package.json +++ b/packages/auth/package.json @@ -8,7 +8,7 @@ "browser": "dist/esm2017/index.js", "module": "dist/esm2017/index.js", "cordova": "dist/cordova/index.js", - "chrome-extension": "dist/chrome-extension-esm2017/index.js", + "web-extension": "dist/web-extension-esm2017/index.js", "webworker": "dist/index.webworker.esm5.js", "esm5": "dist/esm5/index.js", "exports": { @@ -42,11 +42,11 @@ "types": "./dist/cordova/index.cordova.d.ts", "default": "./dist/cordova/index.js" }, - "./chrome-extension": { - "types:": "./dist/chrome-extension-esm2017/index.chrome-extension.d.ts", - "import": "./dist/chrome-extension-esm2017/index.js", - "require": "./dist/chrome-extension-cjs/index.js", - "default": "./dist/chrome-extension-esm2017/index.js" + "./web-extension": { + "types:": "./dist/web-extension-esm2017/index.web-extension.d.ts", + "import": "./dist/web-extension-esm2017/index.js", + "require": "./dist/web-extension-cjs/index.js", + "default": "./dist/web-extension-esm2017/index.js" }, "./internal": { "types": "./dist/internal/index.d.ts", @@ -68,11 +68,11 @@ "require": "./dist/browser-cjs/internal.js", "import": "./dist/esm2017/internal.js" }, - "chrome-extension": { - "types:": "./dist/chrome-extension-cjs/internal/index.d.ts", - "import": "./dist/chrome-extension-esm2017/internal.js", - "require": "./dist/chrome-extension-cjs/internal.js", - "default": "./dist/chrome-extension-esm2017/internal.js" + "web-extension": { + "types:": "./dist/web-extension-cjs/internal/index.d.ts", + "import": "./dist/web-extension-esm2017/internal.js", + "require": "./dist/web-extension-cjs/internal.js", + "default": "./dist/web-extension-esm2017/internal.js" }, "default": "./dist/esm2017/internal.js" }, @@ -82,7 +82,7 @@ "dist", "cordova/package.json", "internal/package.json", - "chrome-extension/package.json" + "web-extension/package.json" ], "scripts": { "lint": "eslint -c .eslintrc.js '**/*.ts' --ignore-path '../../.gitignore'", diff --git a/packages/auth/rollup.config.js b/packages/auth/rollup.config.js index 67e1737fd89..c31417ca1a4 100644 --- a/packages/auth/rollup.config.js +++ b/packages/auth/rollup.config.js @@ -112,14 +112,14 @@ const browserBuilds = [ } ]; -const browserChromeExtensionBuilds = [ +const browserWebExtensionBuilds = [ { input: { - index: 'index.chrome-extension.ts', + index: 'index.web-extension.ts', internal: 'internal/index.ts' }, output: { - dir: 'dist/chrome-extension-esm2017', + dir: 'dist/web-extension-esm2017', format: 'es', sourcemap: true }, @@ -131,12 +131,10 @@ const browserChromeExtensionBuilds = [ }, { input: { - index: 'index.chrome-extension.ts', + index: 'index.web-extension.ts', internal: 'internal/index.ts' }, - output: [ - { dir: 'dist/chrome-extension-cjs', format: 'cjs', sourcemap: true } - ], + output: [{ dir: 'dist/web-extension-cjs', format: 'cjs', sourcemap: true }], plugins: [ ...es2017BuildPlugins, replace(generateBuildTargetReplaceConfig('cjs', 2017)) @@ -231,7 +229,7 @@ const webWorkerBuild = { export default [ ...browserBuilds, - ...browserChromeExtensionBuilds, + ...browserWebExtensionBuilds, ...nodeBuilds, cordovaBuild, rnBuild, diff --git a/packages/auth/src/core/auth/register.ts b/packages/auth/src/core/auth/register.ts index 889d5d69b4e..4b891618d3a 100644 --- a/packages/auth/src/core/auth/register.ts +++ b/packages/auth/src/core/auth/register.ts @@ -49,8 +49,8 @@ function getVersionForPlatform( return 'webworker'; case ClientPlatform.CORDOVA: return 'cordova'; - case ClientPlatform.CHROME_EXTENSION: - return 'chrome-extension'; + case ClientPlatform.WEB_EXTENSION: + return 'web-extension'; default: return undefined; } diff --git a/packages/auth/src/core/util/version.test.ts b/packages/auth/src/core/util/version.test.ts index f284366c8f9..80cfc41b378 100644 --- a/packages/auth/src/core/util/version.test.ts +++ b/packages/auth/src/core/util/version.test.ts @@ -57,10 +57,10 @@ describe('core/util/_getClientVersion', () => { }); }); - context('Chrome Extension', () => { + context('Web Extension', () => { it('should set the correct version', () => { - expect(_getClientVersion(ClientPlatform.CHROME_EXTENSION)).to.eq( - `ChromeExtension/JsCore/${SDK_VERSION}/FirebaseCore-web` + expect(_getClientVersion(ClientPlatform.WEB_EXTENSION)).to.eq( + `WebExtension/JsCore/${SDK_VERSION}/FirebaseCore-web` ); }); }); diff --git a/packages/auth/src/core/util/version.ts b/packages/auth/src/core/util/version.ts index f42882756ac..777b4eadc6d 100644 --- a/packages/auth/src/core/util/version.ts +++ b/packages/auth/src/core/util/version.ts @@ -32,7 +32,7 @@ export const enum ClientPlatform { REACT_NATIVE = 'ReactNative', CORDOVA = 'Cordova', WORKER = 'Worker', - CHROME_EXTENSION = 'ChromeExtension' + WEB_EXTENSION = 'WebExtension' } /* diff --git a/packages/auth/web-extension/package.json b/packages/auth/web-extension/package.json new file mode 100644 index 00000000000..1a46dcf1f90 --- /dev/null +++ b/packages/auth/web-extension/package.json @@ -0,0 +1,8 @@ +{ + "name": "@firebase/auth/web-extension", + "description": "A Chrome-Manifest-v3-specific build of the Firebase Auth JS SDK", + "main": "../dist/web-extension-cjs/index.js", + "browser": "../dist/web-extension-esm2017/index.js", + "module": "../dist/web-extension-esm2017/index.js", + "typings": "../dist/web-extension-esm2017/index.web-extension.d.ts" +} \ No newline at end of file diff --git a/packages/firebase/auth/chrome-extension/index.ts b/packages/firebase/auth/web-extension/index.ts similarity index 92% rename from packages/firebase/auth/chrome-extension/index.ts rename to packages/firebase/auth/web-extension/index.ts index a6d3be1e2e2..52c9bee35eb 100644 --- a/packages/firebase/auth/chrome-extension/index.ts +++ b/packages/firebase/auth/web-extension/index.ts @@ -15,4 +15,4 @@ * limitations under the License. */ -export * from '@firebase/auth/chrome-extension'; +export * from '@firebase/auth/web-extension'; diff --git a/packages/firebase/auth/chrome-extension/package.json b/packages/firebase/auth/web-extension/package.json similarity index 52% rename from packages/firebase/auth/chrome-extension/package.json rename to packages/firebase/auth/web-extension/package.json index 78f61e701c1..6ff8f79531e 100644 --- a/packages/firebase/auth/chrome-extension/package.json +++ b/packages/firebase/auth/web-extension/package.json @@ -1,7 +1,7 @@ { - "name": "firebase/auth/chrome-extension", + "name": "firebase/auth/web-extension", "main": "dist/index.cjs.js", "browser": "dist/esm/index.esm.js", "module": "dist/esm/index.esm.js", - "typings": "dist/auth/chrome-extension/index.d.ts" + "typings": "dist/auth/web-extension/index.d.ts" } \ No newline at end of file diff --git a/packages/firebase/package.json b/packages/firebase/package.json index 55850df674c..a06cc56183c 100644 --- a/packages/firebase/package.json +++ b/packages/firebase/package.json @@ -83,17 +83,17 @@ }, "default": "./auth/cordova/dist/esm/index.esm.js" }, - "./auth/chrome-extension": { - "types": "./auth/chrome-extension/dist/auth/chrome-extension/index.d.ts", + "./auth/web-extension": { + "types": "./auth/web-extension/dist/auth/web-extension/index.d.ts", "node": { - "require": "./auth/chrome-extension/dist/index.cjs.js", - "import": "./auth/chrome-extension/dist/index.mjs" + "require": "./auth/web-extension/dist/index.cjs.js", + "import": "./auth/web-extension/dist/index.mjs" }, "browser": { - "require": "./auth/chrome-extension/dist/index.cjs.js", - "import": "./auth/chrome-extension/dist/esm/index.esm.js" + "require": "./auth/web-extension/dist/index.cjs.js", + "import": "./auth/web-extension/dist/esm/index.esm.js" }, - "default": "./auth/chrome-extension/dist/esm/index.esm.js" + "default": "./auth/web-extension/dist/esm/index.esm.js" }, "./database": { "types": "./database/dist/database/index.d.ts", @@ -421,7 +421,7 @@ "app-check", "auth", "auth/cordova", - "auth/chrome-extension", + "auth/web-extension", "functions", "firestore", "firestore/lite",