diff --git a/__mocks__/firebase/app.js b/__mocks__/firebase/app.js index fb7d1545..b2b24b43 100644 --- a/__mocks__/firebase/app.js +++ b/__mocks__/firebase/app.js @@ -1,13 +1,5 @@ -const firebaseAppMock = jest.createMockFromModule('firebase') -firebaseAppMock.apps = [] +const firebaseAppMock = jest.createMockFromModule('firebase/app') -const mockOnIdTokenChangedUnsubscribe = jest.fn() -const mockOnIdTokenChanged = jest.fn(() => mockOnIdTokenChangedUnsubscribe) -const mockSignOut = jest.fn(() => Promise.resolve()) - -firebaseAppMock.auth = jest.fn(() => ({ - onIdTokenChanged: mockOnIdTokenChanged, - signOut: mockSignOut, -})) +firebaseAppMock.getApps = jest.fn(() => []) module.exports = firebaseAppMock diff --git a/__mocks__/firebase/auth.js b/__mocks__/firebase/auth.js index b4bbacb1..e306a2b3 100644 --- a/__mocks__/firebase/auth.js +++ b/__mocks__/firebase/auth.js @@ -1 +1,10 @@ -module.exports = jest.fn() +const firebaseAuthMock = jest.createMockFromModule('firebase/auth') + +const mockOnIdTokenChangedUnsubscribe = jest.fn() +const mockOnIdTokenChanged = jest.fn(() => mockOnIdTokenChangedUnsubscribe) +const mockSignOut = jest.fn(() => Promise.resolve()) + +firebaseAuthMock.onIdTokenChanged = mockOnIdTokenChanged +firebaseAuthMock.signOut = mockSignOut + +module.exports = firebaseAuthMock diff --git a/example/components/FirebaseAuth.js b/example/components/FirebaseAuth.js index dd18e116..a6406c17 100644 --- a/example/components/FirebaseAuth.js +++ b/example/components/FirebaseAuth.js @@ -1,8 +1,8 @@ /* globals window */ import React, { useEffect, useState } from 'react' import StyledFirebaseAuth from 'react-firebaseui/StyledFirebaseAuth' -import firebase from 'firebase/app' -import 'firebase/auth' +import { getApp } from 'firebase/app' +import { getAuth, EmailAuthProvider } from 'firebase/auth' // Note that next-firebase-auth inits Firebase for us, // so we don't need to. @@ -13,7 +13,7 @@ const firebaseAuthConfig = { // https://github.com/firebase/firebaseui-web#configure-oauth-providers signInOptions: [ { - provider: firebase.auth.EmailAuthProvider.PROVIDER_ID, + provider: EmailAuthProvider.PROVIDER_ID, requireDisplayName: false, }, ], @@ -42,7 +42,7 @@ const FirebaseAuth = () => { {renderAuth ? ( ) : null} diff --git a/example/package.json b/example/package.json index 3774d46c..934dfb14 100644 --- a/example/package.json +++ b/example/package.json @@ -9,7 +9,7 @@ "deploy": "vercel --prod" }, "dependencies": { - "firebase": "^8.9.1", + "firebase": "^9.0.0", "firebase-admin": "^9.11.0", "next": "11.1.0", "next-absolute-url": "^1.2.2", diff --git a/index.d.ts b/index.d.ts index e832eb55..1e4926d2 100644 --- a/index.d.ts +++ b/index.d.ts @@ -1,5 +1,5 @@ import * as Cookies from 'cookies' -import type Firebase from 'firebase' +import type { User } from 'firebase/auth' import * as firebaseAdmin from 'firebase-admin' import type { GetServerSidePropsContext, @@ -28,7 +28,7 @@ export interface AuthUser { claims: Record getIdToken: () => Promise clientInitialized: boolean - firebaseUser: Firebase.User | null + firebaseUser: User | null signOut: () => Promise } diff --git a/package.json b/package.json index f48c6fc6..548a7293 100644 --- a/package.json +++ b/package.json @@ -58,7 +58,7 @@ "eslint-plugin-prettier": "^3.3.0", "eslint-plugin-react": "^7.24.0", "eslint-plugin-react-hooks": "^4.2.0", - "firebase": "^8.8.1", + "firebase": "^9.0.0", "firebase-admin": "^9.11.0", "jest": "^27.0.6", "jsdom": "^16.7.0", @@ -80,7 +80,7 @@ "webpack-node-externals": "^3.0.0" }, "peerDependencies": { - "firebase": ">=7.0.0 <9", + "firebase": "^9.0.0", "firebase-admin": "^9.0.0", "next": ">=9.5.0 <12", "react": ">=16.8.0 <18", diff --git a/src/__tests__/createAuthUser.test.js b/src/__tests__/createAuthUser.test.js index 2d0970fe..9df9f4da 100644 --- a/src/__tests__/createAuthUser.test.js +++ b/src/__tests__/createAuthUser.test.js @@ -1,4 +1,4 @@ -import firebase from 'firebase/app' +import { signOut } from 'firebase/auth' import { createMockFirebaseUserClientSDK, createMockFirebaseUserAdminSDK, @@ -222,7 +222,7 @@ describe('createAuthUser: firebaseUserClientSDK', () => { firebaseUserClientSDK: createMockFirebaseUserClientSDK(), }) await AuthUser.signOut() - expect(firebase.auth().signOut).toHaveBeenCalled() + expect(signOut).toHaveBeenCalled() }) it("does not call Firebase's signOut method when we call AuthUser.signOut and the user is unauthed", async () => { @@ -232,7 +232,7 @@ describe('createAuthUser: firebaseUserClientSDK', () => { firebaseUserClientSDK: null, }) await AuthUser.signOut() - expect(firebase.auth().signOut).not.toHaveBeenCalled() + expect(signOut).not.toHaveBeenCalled() }) }) @@ -427,7 +427,7 @@ describe('createAuthUser: firebaseUserAdminSDK', () => { token: 'my-id-token-def-456', }) await AuthUser.signOut() - expect(firebase.auth().signOut).not.toHaveBeenCalled() + expect(signOut).not.toHaveBeenCalled() }) }) @@ -518,6 +518,6 @@ describe('createAuthUser: serializedAuthUser', () => { serializedAuthUser: createMockSerializedAuthUser(), }) await AuthUser.signOut() - expect(firebase.auth().signOut).not.toHaveBeenCalled() + expect(signOut).not.toHaveBeenCalled() }) }) diff --git a/src/__tests__/initFirebaseClientSDK.test.js b/src/__tests__/initFirebaseClientSDK.test.js index 19e0ce6f..ff7d1e18 100644 --- a/src/__tests__/initFirebaseClientSDK.test.js +++ b/src/__tests__/initFirebaseClientSDK.test.js @@ -1,4 +1,5 @@ -import firebase from 'firebase/app' +import { getApps, initializeApp } from 'firebase/app' +import { getAuth, connectAuthEmulator } from 'firebase/auth' import { setConfig } from 'src/config' import createMockConfig from 'src/testHelpers/createMockConfig' @@ -10,7 +11,7 @@ beforeEach(() => { const mockConfig = createMockConfig() setConfig(mockConfig) - firebase.apps = [] + getApps.mockReturnValue([]) }) afterEach(() => { @@ -22,7 +23,7 @@ describe('initFirebaseClientSDK', () => { expect.assertions(1) const initFirebaseClientSDK = require('src/initFirebaseClientSDK').default initFirebaseClientSDK() - expect(firebase.initializeApp).toHaveBeenCalledWith({ + expect(initializeApp).toHaveBeenCalledWith({ apiKey: 'fakeAPIKey123', authDomain: 'my-example-app.firebaseapp.com', databaseURL: 'https://my-example-app.firebaseio.com', @@ -32,10 +33,10 @@ describe('initFirebaseClientSDK', () => { it('does not call firebase.initializeApp if Firebase already has an initialized app', () => { expect.assertions(1) - firebase.apps = [{ some: 'app' }] + getApps.mockReturnValue([{ some: 'app' }]) const initFirebaseClientSDK = require('src/initFirebaseClientSDK').default initFirebaseClientSDK() - expect(firebase.initializeApp).not.toHaveBeenCalled() + expect(initializeApp).not.toHaveBeenCalled() }) it('throws if config.firebaseClientInitConfig is not set and no app is initialized', () => { @@ -60,7 +61,7 @@ describe('initFirebaseClientSDK', () => { ...mockConfig, firebaseClientInitConfig: undefined, }) - firebase.apps = [{ some: 'app' }] + getApps.mockReturnValue([{ some: 'app' }]) const initFirebaseClientSDK = require('src/initFirebaseClientSDK').default expect(() => { initFirebaseClientSDK() @@ -74,29 +75,23 @@ describe('initFirebaseClientSDK', () => { ...mockConfig, firebaseAuthEmulatorHost: 'localhost:9099', }) - firebase.apps = [{ some: 'app' }] + getApps.mockReturnValue([{ some: 'app' }]) + getAuth.mockReturnValue('mockAuth') const initFirebaseClientSDK = require('src/initFirebaseClientSDK').default - const useEmulator = jest.fn() - firebase.auth.mockImplementation(() => ({ - useEmulator, - })) - initFirebaseClientSDK() - expect(useEmulator).toHaveBeenCalledWith('http://localhost:9099') + expect(connectAuthEmulator).toHaveBeenCalledWith( + 'mockAuth', + 'http://localhost:9099' + ) }) it('does not initialize the client-side auth emulator if config.firebaseAuthEmulatorHost is not set', () => { expect.assertions(1) - firebase.apps = [{ some: 'app' }] + getApps.mockReturnValue([{ some: 'app' }]) const initFirebaseClientSDK = require('src/initFirebaseClientSDK').default - const useEmulator = jest.fn() - firebase.auth.mockImplementation(() => ({ - useEmulator, - })) - initFirebaseClientSDK() - expect(useEmulator).not.toHaveBeenCalled() + expect(connectAuthEmulator).not.toHaveBeenCalled() }) }) diff --git a/src/__tests__/useFirebaseUser.test.js b/src/__tests__/useFirebaseUser.test.js index ad52ca54..d5c78209 100644 --- a/src/__tests__/useFirebaseUser.test.js +++ b/src/__tests__/useFirebaseUser.test.js @@ -1,4 +1,4 @@ -import firebase from 'firebase/app' +import { getIdTokenResult, onIdTokenChanged } from 'firebase/auth' import { renderHook, act } from '@testing-library/react-hooks' import useFirebaseUser from 'src/useFirebaseUser' import { @@ -11,8 +11,8 @@ import createMockConfig from 'src/testHelpers/createMockConfig' import createAuthUser from 'src/createAuthUser' import logDebug from 'src/logDebug' -jest.mock('firebase/auth') jest.mock('firebase/app') +jest.mock('firebase/auth') jest.mock('src/config') jest.mock('src/logDebug') @@ -52,18 +52,13 @@ describe('useFirebaseUser', () => { let onIdTokenChangedCallback // Capture the onIdTokenChanged callback - const onIdTokenChanged = jest.fn((callback) => { + onIdTokenChanged.mockImplementation((_, callback) => { onIdTokenChangedCallback = callback return () => {} // "unsubscribe" function }) // Intercept the getIdToken call - const getIdTokenResult = jest.fn(async () => mockFirebaseUserWithClaims) - - jest.spyOn(firebase, 'auth').mockImplementation(() => ({ - currentUser: { getIdTokenResult }, - onIdTokenChanged, - })) + getIdTokenResult.mockResolvedValue(mockFirebaseUserWithClaims) const { result } = renderHook(() => useFirebaseUser()) @@ -87,18 +82,13 @@ describe('useFirebaseUser', () => { let onIdTokenChangedCallback // Capture the onIdTokenChanged callback - const onIdTokenChanged = jest.fn((callback) => { + onIdTokenChanged.mockImplementation((_, callback) => { onIdTokenChangedCallback = callback return () => {} // "unsubscribe" function }) // Intercept the getIdToken call - const getIdTokenResult = jest.fn(async () => undefined) - - jest.spyOn(firebase, 'auth').mockImplementation(() => ({ - currentUser: { getIdTokenResult }, - onIdTokenChanged, - })) + getIdTokenResult.mockResolvedValue(undefined) const { result } = renderHook(() => useFirebaseUser()) @@ -130,18 +120,13 @@ describe('useFirebaseUser', () => { let onIdTokenChangedCallback // Capture the onIdTokenChanged callback - const onIdTokenChanged = jest.fn((callback) => { + onIdTokenChanged.mockImplementation((_, callback) => { onIdTokenChangedCallback = callback return () => {} // "unsubscribe" function }) // Intercept the getIdToken call - const getIdTokenResult = jest.fn(async () => mockFirebaseUserWithClaims) - - jest.spyOn(firebase, 'auth').mockImplementation(() => ({ - currentUser: { getIdTokenResult }, - onIdTokenChanged, - })) + getIdTokenResult.mockResolvedValue(mockFirebaseUserWithClaims) const { result } = renderHook(() => useFirebaseUser()) @@ -170,20 +155,16 @@ describe('useFirebaseUser', () => { } let onIdTokenChangedCallback + // Capture the onIdTokenChanged callback - const onIdTokenChanged = jest.fn((callback) => { + onIdTokenChanged.mockImplementation((_, callback) => { onIdTokenChangedCallback = callback return () => {} // "unsubscribe" function }) // Intercept the getIdToken call const idTokenResult = createMockIdTokenResult() - const getIdTokenResult = jest.fn(async () => idTokenResult) - - jest.spyOn(firebase, 'auth').mockImplementation(() => ({ - currentUser: { getIdTokenResult }, - onIdTokenChanged, - })) + getIdTokenResult.mockResolvedValue(idTokenResult) renderHook(() => useFirebaseUser()) @@ -206,22 +187,13 @@ describe('useFirebaseUser', () => { it('calls the logout endpoint as expected when the Firebase JS SDK calls `onIdTokenChanged` without an authed user', async () => { expect.assertions(2) let onIdTokenChangedCallback - const onIdTokenChanged = jest.fn((callback) => { - onIdTokenChangedCallback = callback - return () => {} // "unsubscribe" function - }) - - // Intercept the getIdToken call - const getIdTokenResult = jest.fn() - jest.spyOn(firebase, 'auth').mockImplementation(() => ({ - currentUser: { getIdTokenResult }, - onIdTokenChanged, - })) - firebase.auth().onIdTokenChanged.mockImplementation((callback) => { + // Capture the onIdTokenChanged callback + onIdTokenChanged.mockImplementation((_, callback) => { onIdTokenChangedCallback = callback return () => {} // "unsubscribe" function }) + const mockFirebaseUser = undefined renderHook(() => useFirebaseUser()) @@ -241,17 +213,15 @@ describe('useFirebaseUser', () => { it('throws if `fetch`ing the login endpoint does not return an OK response', async () => { expect.assertions(1) let onIdTokenChangedCallback - const onIdTokenChanged = jest.fn((callback) => { + + // Capture the onIdTokenChanged callback + onIdTokenChanged.mockImplementation((_, callback) => { onIdTokenChangedCallback = callback return () => {} // "unsubscribe" function }) const idTokenResult = createMockIdTokenResult() - const getIdTokenResult = jest.fn(async () => idTokenResult) - jest.spyOn(firebase, 'auth').mockImplementation(() => ({ - currentUser: { getIdTokenResult }, - onIdTokenChanged, - })) + getIdTokenResult.mockResolvedValue(idTokenResult) const mockFirebaseUser = createMockFirebaseUserClientSDK() renderHook(() => useFirebaseUser()) @@ -273,10 +243,13 @@ describe('useFirebaseUser', () => { it('throws if `fetch` throws when calling the login endpoint', async () => { expect.assertions(1) let onIdTokenChangedCallback - firebase.auth().onIdTokenChanged.mockImplementation((callback) => { + + // Capture the onIdTokenChanged callback + onIdTokenChanged.mockImplementation((_, callback) => { onIdTokenChangedCallback = callback return () => {} // "unsubscribe" function }) + const mockFirebaseUser = createMockFirebaseUserClientSDK() renderHook(() => useFirebaseUser()) @@ -293,10 +266,13 @@ describe('useFirebaseUser', () => { it('throws if `fetch`ing the logout endpoint does not return an OK response', async () => { expect.assertions(1) let onIdTokenChangedCallback - firebase.auth().onIdTokenChanged.mockImplementation((callback) => { + + // Capture the onIdTokenChanged callback + onIdTokenChanged.mockImplementation((_, callback) => { onIdTokenChangedCallback = callback return () => {} // "unsubscribe" function }) + const mockFirebaseUser = undefined renderHook(() => useFirebaseUser()) @@ -317,10 +293,13 @@ describe('useFirebaseUser', () => { it('throws if `fetch` throws when calling the logout endpoint', async () => { expect.assertions(1) let onIdTokenChangedCallback - firebase.auth().onIdTokenChanged.mockImplementation((callback) => { + + // Capture the onIdTokenChanged callback + onIdTokenChanged.mockImplementation((_, callback) => { onIdTokenChangedCallback = callback return () => {} // "unsubscribe" function }) + const mockFirebaseUser = undefined renderHook(() => useFirebaseUser()) @@ -337,9 +316,7 @@ describe('useFirebaseUser', () => { it('unsubscribes from the Firebase `onIdTokenChanged` event when it unmounts', () => { expect.assertions(2) const onIdTokenChangedUnsubscribe = jest.fn() - firebase - .auth() - .onIdTokenChanged.mockImplementation(() => onIdTokenChangedUnsubscribe) + onIdTokenChanged.mockImplementation(() => onIdTokenChangedUnsubscribe) const { unmount } = renderHook(() => useFirebaseUser()) expect(onIdTokenChangedUnsubscribe).not.toHaveBeenCalled() unmount() @@ -369,18 +346,13 @@ describe('useFirebaseUser', () => { let onIdTokenChangedCallback // Capture the onIdTokenChanged callback - const onIdTokenChanged = jest.fn((callback) => { + onIdTokenChanged.mockImplementation((_, callback) => { onIdTokenChangedCallback = callback return () => {} // "unsubscribe" function }) // Intercept the getIdToken call - const getIdTokenResult = jest.fn(async () => mockFirebaseUserWithClaims) - - jest.spyOn(firebase, 'auth').mockImplementation(() => ({ - currentUser: { getIdTokenResult }, - onIdTokenChanged, - })) + getIdTokenResult.mockResolvedValue(mockFirebaseUserWithClaims) const { unmount } = renderHook(() => useFirebaseUser()) await act(async () => { @@ -409,18 +381,15 @@ describe('useFirebaseUser', () => { // Intercept the getIdToken call const idTokenResult = createMockIdTokenResult() - const getIdTokenResult = jest.fn(async () => idTokenResult) + getIdTokenResult.mockResolvedValue(idTokenResult) let onIdTokenChangedCallback + // Capture the onIdTokenChanged callback - const onIdTokenChanged = jest.fn((callback) => { + onIdTokenChanged.mockImplementation((_, callback) => { onIdTokenChangedCallback = callback return () => {} // "unsubscribe" function }) - jest.spyOn(firebase, 'auth').mockImplementation(() => ({ - currentUser: { getIdTokenResult }, - onIdTokenChanged, - })) const mockAuthUser = createAuthUser({ firebaseUserClientSDK: mockFirebaseUser, @@ -462,18 +431,13 @@ describe('useFirebaseUser', () => { let onIdTokenChangedCallback // Capture the onIdTokenChanged callback - const onIdTokenChanged = jest.fn((callback) => { + onIdTokenChanged.mockImplementation((_, callback) => { onIdTokenChangedCallback = callback return () => {} // "unsubscribe" function }) // Intercept the getIdToken call - const getIdTokenResult = jest.fn(async () => mockFirebaseUserWithClaims) - - jest.spyOn(firebase, 'auth').mockImplementation(() => ({ - currentUser: { getIdTokenResult }, - onIdTokenChanged, - })) + getIdTokenResult.mockResolvedValue(mockFirebaseUserWithClaims) const { result } = renderHook(() => useFirebaseUser()) @@ -523,18 +487,15 @@ describe('useFirebaseUser', () => { // Intercept the getIdToken call const idTokenResult = createMockIdTokenResult() - const getIdTokenResult = jest.fn(async () => idTokenResult) + getIdTokenResult.mockResolvedValue(idTokenResult) let onIdTokenChangedCallback + // Capture the onIdTokenChanged callback - const onIdTokenChanged = jest.fn((callback) => { + onIdTokenChanged.mockImplementation((_, callback) => { onIdTokenChangedCallback = callback return () => {} // "unsubscribe" function }) - jest.spyOn(firebase, 'auth').mockImplementation(() => ({ - currentUser: { getIdTokenResult }, - onIdTokenChanged, - })) const { result } = renderHook(() => useFirebaseUser()) @@ -572,18 +533,13 @@ describe('useFirebaseUser', () => { let onIdTokenChangedCallback // Capture the onIdTokenChanged callback - const onIdTokenChanged = jest.fn((callback) => { + onIdTokenChanged.mockImplementation((_, callback) => { onIdTokenChangedCallback = callback return () => {} // "unsubscribe" function }) // Intercept the getIdToken call - const getIdTokenResult = jest.fn(async () => mockFirebaseUserWithClaims) - - jest.spyOn(firebase, 'auth').mockImplementation(() => ({ - currentUser: { getIdTokenResult }, - onIdTokenChanged, - })) + getIdTokenResult.mockResolvedValue(mockFirebaseUserWithClaims) const { result } = renderHook(() => useFirebaseUser()) @@ -645,16 +601,14 @@ describe('useFirebaseUser', () => { }) const mockFirebaseUser = createMockFirebaseUserClientSDK() const idTokenResult = createMockIdTokenResult() - const getIdTokenResult = jest.fn(async () => idTokenResult) + getIdTokenResult.mockResolvedValue(idTokenResult) + let onIdTokenChangedCallback - const onIdTokenChanged = jest.fn((callback) => { + // Capture the onIdTokenChanged callback + onIdTokenChanged.mockImplementation((_, callback) => { onIdTokenChangedCallback = callback - return () => {} + return () => {} // "unsubscribe" function }) - jest.spyOn(firebase, 'auth').mockImplementation(() => ({ - currentUser: { getIdTokenResult }, - onIdTokenChanged, - })) renderHook(() => useFirebaseUser()) diff --git a/src/createAuthUser.js b/src/createAuthUser.js index 5f5df300..be37408d 100644 --- a/src/createAuthUser.js +++ b/src/createAuthUser.js @@ -96,17 +96,19 @@ const createAuthUser = ({ let getIdTokenFunc = async () => null // When not on the client side, the "signOut" method is a noop. - let firebase - if (isClientSide()) { - // eslint-disable-next-line global-require - require('firebase/auth') - // eslint-disable-next-line global-require - firebase = require('firebase/app').default - } - let signOut = async () => {} + let signOutFunc = async () => {} let tokenString = null // used for serialization if (firebaseUserClientSDK) { + if (isClientSide()) { + // eslint-disable-next-line global-require + const { getApp } = require('firebase/app') + // eslint-disable-next-line global-require + const { getAuth, signOut } = require('firebase/auth') + + signOutFunc = async () => signOut(getAuth(getApp())) + } + /** * Claims are injected client side through the onTokenChange Callback */ @@ -118,7 +120,6 @@ const createAuthUser = ({ displayName = firebaseUserClientSDK.displayName photoURL = firebaseUserClientSDK.photoURL getIdTokenFunc = async () => firebaseUserClientSDK.getIdToken() - signOut = async () => firebase.auth().signOut() tokenString = null } else if (firebaseUserAdminSDK) { /** @@ -173,7 +174,7 @@ const createAuthUser = ({ // The "signOut" method is a noop when the Firebase JS SDK has not // initialized. Otherwise, it is the SDK's "signOut" method: // https://firebase.google.com/docs/reference/js/firebase.auth.Auth#signout - signOut, + signOut: signOutFunc, serialize: ({ includeToken = true } = {}) => JSON.stringify({ id: userId, diff --git a/src/initFirebaseClientSDK.js b/src/initFirebaseClientSDK.js index 69a11dcd..5773fc06 100644 --- a/src/initFirebaseClientSDK.js +++ b/src/initFirebaseClientSDK.js @@ -1,19 +1,19 @@ -import firebase from 'firebase/app' -import 'firebase/auth' +import { getApp, getApps, initializeApp } from 'firebase/app' +import { getAuth, connectAuthEmulator } from 'firebase/auth' import { getConfig } from 'src/config' export default function initFirebaseClientSDK() { const { firebaseClientInitConfig, firebaseAuthEmulatorHost } = getConfig() - if (!firebase.apps.length) { + if (!getApps().length) { if (!firebaseClientInitConfig) { throw new Error( 'If not initializing the Firebase JS SDK elsewhere, you must provide "firebaseClientInitConfig" to next-firebase-auth.' ) } - firebase.initializeApp(firebaseClientInitConfig) + initializeApp(firebaseClientInitConfig) } // If the user has provided the firebaseAuthEmulatorHost address, set the emulator if (firebaseAuthEmulatorHost) { - firebase.auth().useEmulator(`http://${firebaseAuthEmulatorHost}`) + connectAuthEmulator(getAuth(getApp()), `http://${firebaseAuthEmulatorHost}`) } } diff --git a/src/useFirebaseUser.js b/src/useFirebaseUser.js index a583055f..d49fdbc4 100644 --- a/src/useFirebaseUser.js +++ b/src/useFirebaseUser.js @@ -1,6 +1,6 @@ import { useEffect, useState } from 'react' -import firebase from 'firebase/app' -import 'firebase/auth' +import { getApp } from 'firebase/app' +import { getAuth, getIdTokenResult, onIdTokenChanged } from 'firebase/auth' import { getConfig } from 'src/config' import createAuthUser from 'src/createAuthUser' import { filterStandardClaims } from 'src/claims' @@ -80,9 +80,7 @@ const useFirebaseUser = () => { if (firebaseUser) { // Get the user's claims: // https://firebase.google.com/docs/reference/js/firebase.auth.IDTokenResult - const idTokenResult = await firebase - .auth() - .currentUser.getIdTokenResult() + const idTokenResult = await getIdTokenResult(firebaseUser) customClaims = filterStandardClaims(idTokenResult.claims) } @@ -113,7 +111,7 @@ const useFirebaseUser = () => { } // https://firebase.google.com/docs/reference/js/firebase.auth.Auth#onidtokenchanged - const unsubscribe = firebase.auth().onIdTokenChanged(onIdTokenChange) + const unsubscribe = onIdTokenChanged(getAuth(getApp()), onIdTokenChange) return () => { unsubscribe() isCancelled = true diff --git a/yarn.lock b/yarn.lock index 56039ece..0f9e03af 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1277,21 +1277,42 @@ minimatch "^3.0.4" strip-json-comments "^3.1.1" -"@firebase/analytics-types@0.5.0": - version "0.5.0" - resolved "https://registry.yarnpkg.com/@firebase/analytics-types/-/analytics-types-0.5.0.tgz#cfa1dc34034fc478eca360f5faa4b4d0466892ce" - integrity sha512-VTV5Xtq5gVabbL/4n6pBtMJWcQBgOUDE2XbEHl8EOuwRaU9weyGUS7ofbisDkpl1RlFU1aewnc33pbLcYbi0iQ== +"@firebase/analytics-compat@0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@firebase/analytics-compat/-/analytics-compat-0.1.0.tgz#48f0c3b5557541dd0f1a463ffd1d807454ae1b8e" + integrity sha512-oaf1FEF7cKci5tO7f52dH63/ZwkBqbdSLLpgo6kyoYoYDuY+on4yAc1CIHh3sNj/L8T4Ni81IQvVs9lE/9oOpg== + dependencies: + "@firebase/analytics" "0.7.0" + "@firebase/analytics-types" "0.7.0" + "@firebase/component" "0.5.6" + "@firebase/util" "1.3.0" + tslib "^2.1.0" + +"@firebase/analytics-types@0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@firebase/analytics-types/-/analytics-types-0.7.0.tgz#91960e7c87ce8bf18cf8dd9e55ccbf5dc3989b5d" + integrity sha512-DNE2Waiwy5+zZnCfintkDtBfaW6MjIG883474v6Z0K1XZIvl76cLND4iv0YUb48leyF+PJK1KO2XrgHb/KpmhQ== -"@firebase/analytics@0.6.16": - version "0.6.16" - resolved "https://registry.yarnpkg.com/@firebase/analytics/-/analytics-0.6.16.tgz#27bb3220ae70f83bb5c2ebde1e78087abfbf17f5" - integrity sha512-eBYWKf7S7xmDFi3cWLs7Z6x4Hn1AG1oy2Xp/RvfyamhqI2X8GbgyCif/+q7orh+MWnNwipblVT93YajhhXpQcQ== +"@firebase/analytics@0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@firebase/analytics/-/analytics-0.7.0.tgz#7f4450936a2cac3227cc6439130c09b9a0a7d83e" + integrity sha512-YEPyeW6CV8xbIvWaJMvfRdWUPKe/xchJ1bjV6GpLfkYRX+ZE1/YSNU14pX292M4bZ6Qg+bbu2DuWp8fEpa/YQg== dependencies: - "@firebase/analytics-types" "0.5.0" - "@firebase/component" "0.5.5" - "@firebase/installations" "0.4.31" + "@firebase/component" "0.5.6" + "@firebase/installations" "0.5.0" "@firebase/logger" "0.2.6" - "@firebase/util" "1.2.0" + "@firebase/util" "1.3.0" + tslib "^2.1.0" + +"@firebase/app-check-compat@0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@firebase/app-check-compat/-/app-check-compat-0.1.0.tgz#5bf12e5cd82f76cac2eabe51345d1fed9664ed48" + integrity sha512-T1M2d1oroaHUa448fgx3BdfWg4WXP64yybIWxvmVBuh7YnyMuegJK1sS9zipKBKLkstcQK8vivXYh3+/AnbGFw== + dependencies: + "@firebase/app-check" "0.4.0" + "@firebase/component" "0.5.6" + "@firebase/logger" "0.2.6" + "@firebase/util" "1.3.0" tslib "^2.1.0" "@firebase/app-check-interop-types@0.1.0": @@ -1299,21 +1320,25 @@ resolved "https://registry.yarnpkg.com/@firebase/app-check-interop-types/-/app-check-interop-types-0.1.0.tgz#83afd9d41f99166c2bdb2d824e5032e9edd8fe53" integrity sha512-uZfn9s4uuRsaX5Lwx+gFP3B6YsyOKUE+Rqa6z9ojT4VSRAsZFko9FRn6OxQUA1z5t5d08fY4pf+/+Dkd5wbdbA== -"@firebase/app-check-types@0.2.0": - version "0.2.0" - resolved "https://registry.yarnpkg.com/@firebase/app-check-types/-/app-check-types-0.2.0.tgz#b938e03914b8139796a8923bb20a9004114d5409" - integrity sha512-CfZhWtChLK9uNmrxbJyTg1BPtROiwc/VJGu3f39KjS0F5ZvZjHmyRFMrDiSoXDoybM4B6X0pQhJYi9rifT2wpQ== +"@firebase/app-check@0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@firebase/app-check/-/app-check-0.4.0.tgz#a048fc396b2a97ef8eba77fe909efbff07a5c75c" + integrity sha512-KQ/k8cukzZbH/LC9Iu5/Dbhr7w6byu8bYjfCA38B6v8aISgASYfP/nirxRD+hSuDoxXtAnPGEuv+v0YU3D1R2w== + dependencies: + "@firebase/component" "0.5.6" + "@firebase/logger" "0.2.6" + "@firebase/util" "1.3.0" + tslib "^2.1.0" -"@firebase/app-check@0.2.1": - version "0.2.1" - resolved "https://registry.yarnpkg.com/@firebase/app-check/-/app-check-0.2.1.tgz#3dd87dfa1832ee9a662489cce28261eaff23ef5d" - integrity sha512-Qswn+qHiAyi3P0O/W9BffDFX4MmptSod49zhWQt8vV42JyKSZexaXQpeNlfKgdE5jX8wUw8Vkk8My4PfIrPkww== +"@firebase/app-compat@0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@firebase/app-compat/-/app-compat-0.1.0.tgz#101070141198304a50ec546b7626870c7759166b" + integrity sha512-jnAeFM1ihY5klqg2dvdA4EOk7co8ffSHUj/efqaSwTrMkKTcG/WZKF9WAuXdl+5jEu1BhsGGHveWzGliTFH5Hg== dependencies: - "@firebase/app-check-interop-types" "0.1.0" - "@firebase/app-check-types" "0.2.0" - "@firebase/component" "0.5.5" + "@firebase/app" "0.7.0" + "@firebase/component" "0.5.6" "@firebase/logger" "0.2.6" - "@firebase/util" "1.2.0" + "@firebase/util" "1.3.0" tslib "^2.1.0" "@firebase/app-types@0.6.3": @@ -1321,35 +1346,55 @@ resolved "https://registry.yarnpkg.com/@firebase/app-types/-/app-types-0.6.3.tgz#3f10514786aad846d74cd63cb693556309918f4b" integrity sha512-/M13DPPati7FQHEQ9Minjk1HGLm/4K4gs9bR4rzLCWJg64yGtVC0zNg9gDpkw9yc2cvol/mNFxqTtd4geGrwdw== -"@firebase/app@0.6.29": - version "0.6.29" - resolved "https://registry.yarnpkg.com/@firebase/app/-/app-0.6.29.tgz#e2f88274b39917ab766f9fe73da48c353eaed557" - integrity sha512-duCzk9/BSVVsb5Y9b0rnvGSuD5zQA/JghiQsccRl+lA4xiUYjFudTU4cVFftkw+0zzeYBHn4KiVxchsva1O9dA== +"@firebase/app-types@0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@firebase/app-types/-/app-types-0.7.0.tgz#c9e16d1b8bed1a991840b8d2a725fb58d0b5899f" + integrity sha512-6fbHQwDv2jp/v6bXhBw2eSRbNBpxHcd1NBF864UksSMVIqIyri9qpJB1Mn6sGZE+bnDsSQBC5j2TbMxYsJQkQg== + +"@firebase/app@0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@firebase/app/-/app-0.7.0.tgz#989e9f354951de2a8ac806f6e3fa0afd9f80b470" + integrity sha512-l4Pd69re6JyjumQrl719dnY5JSKROSYda/0N2wzOhSzqg8DsZOIErr8+xj6QAE6BtNsoIEk7ma9WMS/2r02MhA== dependencies: - "@firebase/app-types" "0.6.3" - "@firebase/component" "0.5.5" + "@firebase/component" "0.5.6" "@firebase/logger" "0.2.6" - "@firebase/util" "1.2.0" - dom-storage "2.1.0" + "@firebase/util" "1.3.0" + tslib "^2.1.0" + +"@firebase/auth-compat@0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@firebase/auth-compat/-/auth-compat-0.1.0.tgz#e5dc6bb6ac89ea21f85c4153eb1cf8a7d69deaa8" + integrity sha512-OfAt3c5ham07xvmYyJp02v8mUa+HaSEwilvgD2M1JaWqLAtqH66bdBhLBE9N0pq8xtRdXZIF1vSd20a0ulQfQg== + dependencies: + "@firebase/auth" "0.17.0" + "@firebase/auth-types" "0.11.0" + "@firebase/component" "0.5.6" + "@firebase/util" "1.3.0" + node-fetch "2.6.1" + selenium-webdriver "^4.0.0-beta.2" tslib "^2.1.0" - xmlhttprequest "1.8.0" "@firebase/auth-interop-types@0.1.6": version "0.1.6" resolved "https://registry.yarnpkg.com/@firebase/auth-interop-types/-/auth-interop-types-0.1.6.tgz#5ce13fc1c527ad36f1bb1322c4492680a6cf4964" integrity sha512-etIi92fW3CctsmR9e3sYM3Uqnoq861M0Id9mdOPF6PWIg38BXL5k4upCNBggGUpLIS0H1grMOvy/wn1xymwe2g== -"@firebase/auth-types@0.10.3": - version "0.10.3" - resolved "https://registry.yarnpkg.com/@firebase/auth-types/-/auth-types-0.10.3.tgz#2be7dd93959c8f5304c63e09e98718e103464d8c" - integrity sha512-zExrThRqyqGUbXOFrH/sowuh2rRtfKHp9SBVY2vOqKWdCX1Ztn682n9WLtlUDsiYVIbBcwautYWk2HyCGFv0OA== +"@firebase/auth-types@0.11.0": + version "0.11.0" + resolved "https://registry.yarnpkg.com/@firebase/auth-types/-/auth-types-0.11.0.tgz#b9c73c60ca07945b3bbd7a097633e5f78fa9e886" + integrity sha512-q7Bt6cx+ySj9elQHTsKulwk3+qDezhzRBFC9zlQ1BjgMueUOnGMcvqmU0zuKlQ4RhLSH7MNAdBV2znVaoN3Vxw== -"@firebase/auth@0.16.8": - version "0.16.8" - resolved "https://registry.yarnpkg.com/@firebase/auth/-/auth-0.16.8.tgz#4edd44673d3711e94cfa1e6b03883214ae1f2255" - integrity sha512-mR0UXG4LirWIfOiCWxVmvz1o23BuKGxeItQ2cCUgXLTjNtWJXdcky/356iTUsd7ZV5A78s2NHeN5tIDDG6H4rg== +"@firebase/auth@0.17.0": + version "0.17.0" + resolved "https://registry.yarnpkg.com/@firebase/auth/-/auth-0.17.0.tgz#e1395779293e1869fabefd07e078242c773b5fcb" + integrity sha512-4zOGTLGzMjBX96KEyBNYpjOD87c2efCZvUjaJ53QslleW9Xp8kSsSHLRhr8hOkcRXO17CmBKSRx/LnG2vTZWQQ== dependencies: - "@firebase/auth-types" "0.10.3" + "@firebase/component" "0.5.6" + "@firebase/logger" "0.2.6" + "@firebase/util" "1.3.0" + node-fetch "2.6.1" + selenium-webdriver "4.0.0-beta.1" + tslib "^2.1.0" "@firebase/component@0.5.5": version "0.5.5" @@ -1359,6 +1404,26 @@ "@firebase/util" "1.2.0" tslib "^2.1.0" +"@firebase/component@0.5.6": + version "0.5.6" + resolved "https://registry.yarnpkg.com/@firebase/component/-/component-0.5.6.tgz#6b7c7aff69866e0925721543a2ef5f47b0f97cbe" + integrity sha512-GyQJ+2lrhsDqeGgd1VdS7W+Y6gNYyI0B51ovNTxeZVG/W8I7t9MwEiCWsCvfm5wQgfsKp9dkzOcJrL5k8oVO/Q== + dependencies: + "@firebase/util" "1.3.0" + tslib "^2.1.0" + +"@firebase/database-compat@0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@firebase/database-compat/-/database-compat-0.1.0.tgz#f02abaa9f493fd14aaae6e2b34262bafc5d033c7" + integrity sha512-jLN0JMYnYijg8f3QFtSuPGNuKAt3yYVRsHHlR8sADgx8MptByRRwVmMOk7QPc/DY7qscZIJow3hXFwvbeApFLA== + dependencies: + "@firebase/component" "0.5.6" + "@firebase/database" "0.12.0" + "@firebase/database-types" "0.9.0" + "@firebase/logger" "0.2.6" + "@firebase/util" "1.3.0" + tslib "^2.1.0" + "@firebase/database-types@0.7.3", "@firebase/database-types@^0.7.2": version "0.7.3" resolved "https://registry.yarnpkg.com/@firebase/database-types/-/database-types-0.7.3.tgz#819f16dd4c767c864b460004458620f265a3f735" @@ -1366,7 +1431,27 @@ dependencies: "@firebase/app-types" "0.6.3" -"@firebase/database@0.10.9", "@firebase/database@^0.10.0": +"@firebase/database-types@0.9.0": + version "0.9.0" + resolved "https://registry.yarnpkg.com/@firebase/database-types/-/database-types-0.9.0.tgz#dad3db745531f40b60f7726a76b2bf6bbf6c6471" + integrity sha512-x2TeTVnMZGPvT3y4Nayio4WprQA/zGwqMrPMQwSdF+PFnaFJAhA/eLgUB6cmWFzFYO9VvmuRkFzDzo6ezTo1Zw== + dependencies: + "@firebase/app-types" "0.7.0" + "@firebase/util" "1.3.0" + +"@firebase/database@0.12.0": + version "0.12.0" + resolved "https://registry.yarnpkg.com/@firebase/database/-/database-0.12.0.tgz#2aa33138128cfcaf74388efe13e0eda10825d564" + integrity sha512-/gl6z6fAxAAFAdDllzidzweGpuXJu0b9AusSLrdW4LpP6KCuxJbhonMJuSGpHLzAHzx6Q9uitbvqHqBb17sttQ== + dependencies: + "@firebase/auth-interop-types" "0.1.6" + "@firebase/component" "0.5.6" + "@firebase/logger" "0.2.6" + "@firebase/util" "1.3.0" + faye-websocket "0.11.3" + tslib "^2.1.0" + +"@firebase/database@^0.10.0": version "0.10.9" resolved "https://registry.yarnpkg.com/@firebase/database/-/database-0.10.9.tgz#79f7b03cbe8a127dddfb7ea7748a3e923990f046" integrity sha512-Jxi9SiE4cNOftO9YKlG71ccyWFw4kSM9AG/xYu6vWXUGBr39Uw1TvYougANOcU21Q0TP4J08VPGnOnpXk/FGbQ== @@ -1379,55 +1464,72 @@ faye-websocket "0.11.3" tslib "^2.1.0" -"@firebase/firestore-types@2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@firebase/firestore-types/-/firestore-types-2.3.0.tgz#baf5c9470ba8be96bf0d76b83b413f03104cf565" - integrity sha512-QTW7NP7nDL0pgT/X53lyj+mIMh4nRQBBTBlRNQBt7eSyeqBf3ag3bxdQhCg358+5KbjYTC2/O6QtX9DlJZmh1A== +"@firebase/firestore-compat@0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@firebase/firestore-compat/-/firestore-compat-0.1.0.tgz#9faa1c10a76d67f812dd48469693e8f6bafca3ab" + integrity sha512-25r1jGpnnx7vXSPVLmHNkuz+EGpZDU5Luro5/MFCMmoV4a+Rmg2n9FRlxRyPn4XOCkc5nrBpT6ESAKAPSNHcpw== + dependencies: + "@firebase/component" "0.5.6" + "@firebase/firestore" "3.0.0" + "@firebase/firestore-types" "2.5.0" + "@firebase/util" "1.3.0" + tslib "^2.1.0" -"@firebase/firestore@2.3.10": - version "2.3.10" - resolved "https://registry.yarnpkg.com/@firebase/firestore/-/firestore-2.3.10.tgz#76d5137e5c37d33ccf3c5d77a9261c73493494b2" - integrity sha512-O+XpaZVhDIBK2fMwBUBR2BuhaXF6zTmz+afAuXAx18DK+2rFfLefbALZLaUYw0Aabe9pryy0c7OenzRbHA8n4Q== +"@firebase/firestore-types@2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@firebase/firestore-types/-/firestore-types-2.5.0.tgz#16fca40b6980fdb000de86042d7a96635f2bcdd7" + integrity sha512-I6c2m1zUhZ5SH0cWPmINabDyH5w0PPFHk2UHsjBpKdZllzJZ2TwTkXbDtpHUZNmnc/zAa0WNMNMvcvbb/xJLKA== + +"@firebase/firestore@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@firebase/firestore/-/firestore-3.0.0.tgz#f7b8cc3d8d28b85a901fd66df13f4d61dcc33190" + integrity sha512-rbs5EbU/01f7NKHDtedBowpBlqnkVnQlpIuSX5wwGMiPgH8f9pMhh59JMk0cTaSqsJXsq3KvafWAD9SqWIqe2w== dependencies: - "@firebase/component" "0.5.5" - "@firebase/firestore-types" "2.3.0" + "@firebase/component" "0.5.6" "@firebase/logger" "0.2.6" - "@firebase/util" "1.2.0" + "@firebase/util" "1.3.0" "@firebase/webchannel-wrapper" "0.5.1" "@grpc/grpc-js" "^1.3.2" "@grpc/proto-loader" "^0.6.0" node-fetch "2.6.1" tslib "^2.1.0" -"@firebase/functions-types@0.4.0": - version "0.4.0" - resolved "https://registry.yarnpkg.com/@firebase/functions-types/-/functions-types-0.4.0.tgz#0b789f4fe9a9c0b987606c4da10139345b40f6b9" - integrity sha512-3KElyO3887HNxtxNF1ytGFrNmqD+hheqjwmT3sI09FaDCuaxGbOnsXAXH2eQ049XRXw9YQpHMgYws/aUNgXVyQ== +"@firebase/functions-compat@0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@firebase/functions-compat/-/functions-compat-0.1.0.tgz#53e2b3b9590b04628e9537806196d91deb3e6f3f" + integrity sha512-uNwHdGYqgIXzF7aTZBeUe00K/sadRg5EeSDuJ6VNo3Gh3ZceX4eRnL5p7l2bEJBh8hBl0brb82+TRYjGHtjtFQ== + dependencies: + "@firebase/component" "0.5.6" + "@firebase/functions" "0.7.0" + "@firebase/functions-types" "0.5.0" + "@firebase/util" "1.3.0" + tslib "^2.1.0" -"@firebase/functions@0.6.14": - version "0.6.14" - resolved "https://registry.yarnpkg.com/@firebase/functions/-/functions-0.6.14.tgz#f6b452a53dc15299595bd079dd6ed4afb59e1a8c" - integrity sha512-Gthru/wHPQqkn651MenVM+qKVFFqIyFcNT3qfJUacibqrKlvDtYtaCMjFGAkChuGnYzNVnXJIaNrIHkEIII4Hg== +"@firebase/functions-types@0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@firebase/functions-types/-/functions-types-0.5.0.tgz#b50ba95ccce9e96f7cda453228ffe1684645625b" + integrity sha512-qza0M5EwX+Ocrl1cYI14zoipUX4gI/Shwqv0C1nB864INAD42Dgv4v94BCyxGHBg2kzlWy8PNafdP7zPO8aJQA== + +"@firebase/functions@0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@firebase/functions/-/functions-0.7.0.tgz#d052d01aa6871f5cd518748963792bae94b2081d" + integrity sha512-H0krTllYh5eK7utKoUoNoVvoSdZqaPdqGSdIK7ltr1yWX9UhbRWYZv5B/tWTjQFfDfRQwpn9Q6svoJzYZQiusA== dependencies: - "@firebase/component" "0.5.5" - "@firebase/functions-types" "0.4.0" - "@firebase/messaging-types" "0.5.0" + "@firebase/app-check-interop-types" "0.1.0" + "@firebase/auth-interop-types" "0.1.6" + "@firebase/component" "0.5.6" + "@firebase/messaging-interop-types" "0.1.0" + "@firebase/util" "1.3.0" node-fetch "2.6.1" tslib "^2.1.0" -"@firebase/installations-types@0.3.4": - version "0.3.4" - resolved "https://registry.yarnpkg.com/@firebase/installations-types/-/installations-types-0.3.4.tgz#589a941d713f4f64bf9f4feb7f463505bab1afa2" - integrity sha512-RfePJFovmdIXb6rYwtngyxuEcWnOrzdZd9m7xAW0gRxDIjBT20n3BOhjpmgRWXo/DAxRmS7bRjWAyTHY9cqN7Q== - -"@firebase/installations@0.4.31": - version "0.4.31" - resolved "https://registry.yarnpkg.com/@firebase/installations/-/installations-0.4.31.tgz#dbde30c0542fb4343b075f0574d4e0d0f4b49aa7" - integrity sha512-qWolhAgMHvD3avsNCl+K8+untzoDDFQIRR8At8kyWMKKosy0vttdWTWzjvDoZbyKU6r0RNlxDUWAgV88Q8EudQ== +"@firebase/installations@0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@firebase/installations/-/installations-0.5.0.tgz#4a21e1c7467795802b031af413df2555b17cf1b1" + integrity sha512-wF1CKIx+SoiEbtNdutulxW4z80B5lGXW+8JdAtcKQwgKxF0VtlCaDFsd9AEB3aTtzIve5UkGak8hQOMvvOpydg== dependencies: - "@firebase/component" "0.5.5" - "@firebase/installations-types" "0.3.4" - "@firebase/util" "1.2.0" + "@firebase/component" "0.5.6" + "@firebase/util" "1.3.0" idb "3.0.2" tslib "^2.1.0" @@ -1436,38 +1538,59 @@ resolved "https://registry.yarnpkg.com/@firebase/logger/-/logger-0.2.6.tgz#3aa2ca4fe10327cabf7808bd3994e88db26d7989" integrity sha512-KIxcUvW/cRGWlzK9Vd2KB864HlUnCfdTH0taHE0sXW5Xl7+W68suaeau1oKNEqmc3l45azkd4NzXTCWZRZdXrw== -"@firebase/messaging-types@0.5.0": - version "0.5.0" - resolved "https://registry.yarnpkg.com/@firebase/messaging-types/-/messaging-types-0.5.0.tgz#c5d0ef309ced1758fda93ef3ac70a786de2e73c4" - integrity sha512-QaaBswrU6umJYb/ZYvjR5JDSslCGOH6D9P136PhabFAHLTR4TWjsaACvbBXuvwrfCXu10DtcjMxqfhdNIB1Xfg== - -"@firebase/messaging@0.7.15": - version "0.7.15" - resolved "https://registry.yarnpkg.com/@firebase/messaging/-/messaging-0.7.15.tgz#d3b9a053331238480860c71385819babda2076f3" - integrity sha512-81t6iJtqMBJF5LHTjDhlHUpbPZOV6dKhW0TueAoON4omc0SaDXgf4nnk6JkvZRfdcuOaP8848Cv53tvZPFFAYQ== +"@firebase/messaging-compat@0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@firebase/messaging-compat/-/messaging-compat-0.1.0.tgz#ab164540f6ba954c8d150b2e96dc6bf8c1536eb4" + integrity sha512-58qQmKwOiXhxZwrRwwjQDbjlRx1uMVVuV/DNbDzqilDJDdoYXMdK6RBTF9Bs51qy/Z1BI2Q9B1JX01QYlgZpxQ== dependencies: - "@firebase/component" "0.5.5" - "@firebase/installations" "0.4.31" - "@firebase/messaging-types" "0.5.0" - "@firebase/util" "1.2.0" + "@firebase/component" "0.5.6" + "@firebase/messaging" "0.9.0" + "@firebase/util" "1.3.0" + tslib "^2.1.0" + +"@firebase/messaging-interop-types@0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@firebase/messaging-interop-types/-/messaging-interop-types-0.1.0.tgz#bdac02dd31edd5cb9eec37b1db698ea5e2c1a631" + integrity sha512-DbvUl/rXAZpQeKBnwz0NYY5OCqr2nFA0Bj28Fmr3NXGqR4PAkfTOHuQlVtLO1Nudo3q0HxAYLa68ZDAcuv2uKQ== + +"@firebase/messaging@0.9.0": + version "0.9.0" + resolved "https://registry.yarnpkg.com/@firebase/messaging/-/messaging-0.9.0.tgz#a868bea75d0c26210903178cf22d31c47bc84584" + integrity sha512-NTUB+gVJsgL/f6wqwUlgadaNuLZvyk1IlTcRvR3391t8jDSWOT2efwzNqcI7Xv4nhzaiPhzAQ4ncH/m8kfUUXQ== + dependencies: + "@firebase/component" "0.5.6" + "@firebase/installations" "0.5.0" + "@firebase/messaging-interop-types" "0.1.0" + "@firebase/util" "1.3.0" idb "3.0.2" tslib "^2.1.0" -"@firebase/performance-types@0.0.13": - version "0.0.13" - resolved "https://registry.yarnpkg.com/@firebase/performance-types/-/performance-types-0.0.13.tgz#58ce5453f57e34b18186f74ef11550dfc558ede6" - integrity sha512-6fZfIGjQpwo9S5OzMpPyqgYAUZcFzZxHFqOyNtorDIgNXq33nlldTL/vtaUZA8iT9TT5cJlCrF/jthKU7X21EA== +"@firebase/performance-compat@0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@firebase/performance-compat/-/performance-compat-0.1.0.tgz#c1edeccd9b60d83de26d8e645e0d2ddd64e9a2d7" + integrity sha512-H+/A5+y/15hFn5FHRP8lcogDzO6qm9YoACNEXn71UN4PiGQ+/BbHkQafDEXxD6wLfqfqR8u8oclHPFIYxMBF7Q== + dependencies: + "@firebase/component" "0.5.6" + "@firebase/logger" "0.2.6" + "@firebase/performance" "0.5.0" + "@firebase/performance-types" "0.1.0" + "@firebase/util" "1.3.0" + tslib "^2.1.0" + +"@firebase/performance-types@0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@firebase/performance-types/-/performance-types-0.1.0.tgz#5e6efa9dc81860aee2cb7121b39ae8fa137e69fc" + integrity sha512-6p1HxrH0mpx+622Ql6fcxFxfkYSBpE3LSuwM7iTtYU2nw91Hj6THC8Bc8z4nboIq7WvgsT/kOTYVVZzCSlXl8w== -"@firebase/performance@0.4.17": - version "0.4.17" - resolved "https://registry.yarnpkg.com/@firebase/performance/-/performance-0.4.17.tgz#b160a4352f682c1039b49ec9d24d6c473a31b3c3" - integrity sha512-uhDs9rhdMrGraYHcd3CTRkGtcNap4hp6rAHTwJNIX56Z3RzQ1VW2ea9vvesl7EjFtEIPU0jfdrS32wV+qer5DQ== +"@firebase/performance@0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@firebase/performance/-/performance-0.5.0.tgz#cc237e65791c75dba856ace8971b94d7adcbc60b" + integrity sha512-E+L18eJKshr/ijnWZMexEEddwkp2T4Ye2dJSK4TcOKRYfrmfZJ95RRZ+MPNp1ES7RH2JYiyym1NIQKPcNNvhug== dependencies: - "@firebase/component" "0.5.5" - "@firebase/installations" "0.4.31" + "@firebase/component" "0.5.6" + "@firebase/installations" "0.5.0" "@firebase/logger" "0.2.6" - "@firebase/performance-types" "0.0.13" - "@firebase/util" "1.2.0" + "@firebase/util" "1.3.0" tslib "^2.1.0" "@firebase/polyfill@0.3.36": @@ -1479,36 +1602,57 @@ promise-polyfill "8.1.3" whatwg-fetch "2.0.4" -"@firebase/remote-config-types@0.1.9": - version "0.1.9" - resolved "https://registry.yarnpkg.com/@firebase/remote-config-types/-/remote-config-types-0.1.9.tgz#fe6bbe4d08f3b6e92fce30e4b7a9f4d6a96d6965" - integrity sha512-G96qnF3RYGbZsTRut7NBX0sxyczxt1uyCgXQuH/eAfUCngxjEGcZQnBdy6mvSdqdJh5mC31rWPO4v9/s7HwtzA== +"@firebase/remote-config-compat@0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@firebase/remote-config-compat/-/remote-config-compat-0.1.0.tgz#8eb2582d1909dd4d5023383e43d73ad605d56daa" + integrity sha512-PpCh5f5hUUaDCmiJsuu/u9a0g0G5WH3YSbfH1jPejVOaJ1lS82615E7WOzco4zMllLYfX62VaUYD2vvcLyXE/w== + dependencies: + "@firebase/component" "0.5.6" + "@firebase/logger" "0.2.6" + "@firebase/remote-config" "0.2.0" + "@firebase/remote-config-types" "0.2.0" + "@firebase/util" "1.3.0" + tslib "^2.1.0" + +"@firebase/remote-config-types@0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@firebase/remote-config-types/-/remote-config-types-0.2.0.tgz#1e2759fc01f20b58c564db42196f075844c3d1fd" + integrity sha512-hqK5sCPeZvcHQ1D6VjJZdW6EexLTXNMJfPdTwbD8NrXUw6UjWC4KWhLK/TSlL0QPsQtcKRkaaoP+9QCgKfMFPw== -"@firebase/remote-config@0.1.42": - version "0.1.42" - resolved "https://registry.yarnpkg.com/@firebase/remote-config/-/remote-config-0.1.42.tgz#84573ac2f1ee49cb9d4327a25c5625f2e274695d" - integrity sha512-hWwtAZmYLB274bxjV2cdMYhyBCUUqbYErihGx3rMyab76D+VbIxOuKJb2z0DS67jQG+SA3pr9/MtWsTPHV/l9g== +"@firebase/remote-config@0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@firebase/remote-config/-/remote-config-0.2.0.tgz#aa2bd7b34e0e40a259c3f0409a5084864f234f0f" + integrity sha512-hNZ+BqsTmfe8ogpeow95NSwQmKIeetKdPxKpyC6RZBeFUae782+2HrUx4/Quep6OZjOHQF6xZ5d3VOxu2ZKEfg== dependencies: - "@firebase/component" "0.5.5" - "@firebase/installations" "0.4.31" + "@firebase/component" "0.5.6" + "@firebase/installations" "0.5.0" "@firebase/logger" "0.2.6" - "@firebase/remote-config-types" "0.1.9" - "@firebase/util" "1.2.0" + "@firebase/util" "1.3.0" tslib "^2.1.0" -"@firebase/storage-types@0.4.1": - version "0.4.1" - resolved "https://registry.yarnpkg.com/@firebase/storage-types/-/storage-types-0.4.1.tgz#da6582ae217e3db485c90075dc71100ca5064cc6" - integrity sha512-IM4cRzAnQ6QZoaxVZ5MatBzqXVcp47hOlE28jd9xXw1M9V7gfjhmW0PALGFQx58tPVmuUwIKyoEbHZjV4qRJwQ== +"@firebase/storage-compat@0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@firebase/storage-compat/-/storage-compat-0.1.0.tgz#b8080e3250b19ad6d98a5ade65f1a03aab73f2b8" + integrity sha512-DJstR2vidnyNSRp14LQhd9QO0PxhMm/xsXrPQ2IEmQ7EWDT4rxGd+pkqXTG6IO+k9ZKMc0BnWIYwlMqkGEJoDg== + dependencies: + "@firebase/component" "0.5.6" + "@firebase/storage" "0.8.0" + "@firebase/storage-types" "0.6.0" + "@firebase/util" "1.3.0" + tslib "^2.1.0" -"@firebase/storage@0.6.1": - version "0.6.1" - resolved "https://registry.yarnpkg.com/@firebase/storage/-/storage-0.6.1.tgz#29d1568e78c9234af72a609409a36403346a60b8" - integrity sha512-00WEdmmKoKUHBsufUIUDgBS5ghAe8tCp1QbHQnnlf3aekAgFf8UKjfR6QMaHoEIzuZPhWPStQ5KrrIcWA/MMQg== +"@firebase/storage-types@0.6.0": + version "0.6.0" + resolved "https://registry.yarnpkg.com/@firebase/storage-types/-/storage-types-0.6.0.tgz#0b1af64a2965af46fca138e5b70700e9b7e6312a" + integrity sha512-1LpWhcCb1ftpkP/akhzjzeFxgVefs6eMD2QeKiJJUGH1qOiows2w5o0sKCUSQrvrRQS1lz3SFGvNR1Ck/gqxeA== + +"@firebase/storage@0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@firebase/storage/-/storage-0.8.0.tgz#2766a18a8a9684082d745ab1a93a3c88061169b1" + integrity sha512-D0HH+y3DLH0+8eOt6h19RffFMpdzPNr7Yv7XpeeM3+VLE4TbQnDie/OAQWOuWLrYoW7MsPQnLkx+zDb3DxOXxw== dependencies: - "@firebase/component" "0.5.5" - "@firebase/storage-types" "0.4.1" - "@firebase/util" "1.2.0" + "@firebase/component" "0.5.6" + "@firebase/util" "1.3.0" node-fetch "2.6.1" tslib "^2.1.0" @@ -1519,6 +1663,13 @@ dependencies: tslib "^2.1.0" +"@firebase/util@1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@firebase/util/-/util-1.3.0.tgz#e71113bdd5073e9736ceca665b54d9f6df232b20" + integrity sha512-SESvmYwuKOVCZ1ZxLbberbx+9cnbxpCa4CG2FUSQYqN6Ab8KyltegMDIsqMw5KyIBZ4n1phfHoOa22xo5NzAlQ== + dependencies: + tslib "^2.1.0" + "@firebase/webchannel-wrapper@0.5.1": version "0.5.1" resolved "https://registry.yarnpkg.com/@firebase/webchannel-wrapper/-/webchannel-wrapper-0.5.1.tgz#a64d1af3c62e3bb89576ec58af880980a562bf4e" @@ -3853,11 +4004,6 @@ dom-accessibility-api@^0.5.6: resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.6.tgz#3f5d43b52c7a3bd68b5fb63fa47b4e4c1fdf65a9" integrity sha512-DplGLZd8L1lN64jlT27N9TVSESFR5STaEJvX+thCby7fuCHonfPpAlodYc3vuUYbDuDec5w8AMP7oCM5TWFsqw== -dom-storage@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/dom-storage/-/dom-storage-2.1.0.tgz#00fb868bc9201357ea243c7bcfd3304c1e34ea39" - integrity sha512-g6RpyWXzl0RR6OTElHKBl7nwnK87GUyZMYC7JWsB/IA73vpqK2K6LT39x4VepLxlSsWBFrPVLnsSR5Jyty0+2Q== - domain-browser@4.19.0: version "4.19.0" resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-4.19.0.tgz#1093e17c0a17dbd521182fe90d49ac1370054af1" @@ -4564,10 +4710,10 @@ find-up@^4.0.0, find-up@^4.1.0: locate-path "^5.0.0" path-exists "^4.0.0" -firebase-admin@^9.11.0: - version "9.11.0" - resolved "https://registry.yarnpkg.com/firebase-admin/-/firebase-admin-9.11.0.tgz#c0c72e4480b836fb4cd15e6d834ddfbfb9cc54ba" - integrity sha512-68fXdwcKF99LkWBE33M5hnLwjvGpbCRznIOtZVsiBqZdM9iwxlTfNEpAckh++o3GdJcSLRUWmIN+MKqPUsxoCA== +firebase-admin@^9.11.1: + version "9.11.1" + resolved "https://registry.yarnpkg.com/firebase-admin/-/firebase-admin-9.11.1.tgz#b4f472ed51951937f333a4d88a0693ad37ffc90a" + integrity sha512-Y9fjelljy6MKqwsSbM/UN1k8gBQh5zfm5fCTe0Z6Gch2T3nDUIPsTcf+jfe4o40/MPYuybili9XJjTMmM2e5MQ== dependencies: "@firebase/database" "^0.10.0" "@firebase/database-types" "^0.7.2" @@ -4580,26 +4726,37 @@ firebase-admin@^9.11.0: "@google-cloud/firestore" "^4.5.0" "@google-cloud/storage" "^5.3.0" -firebase@^8.8.1: - version "8.8.1" - resolved "https://registry.yarnpkg.com/firebase/-/firebase-8.8.1.tgz#b18dbb7283a9d50d3f3ef5b9deb9c1e15c9466b1" - integrity sha512-dzqQn3wwHhsStsD2gDs3XfSJ/SIqv5IA9Ht+MySnvrIsljk0V8bI/+EMPsh0h2VlYPSk51bmyNQZ4LvuSKNvlA== - dependencies: - "@firebase/analytics" "0.6.16" - "@firebase/app" "0.6.29" - "@firebase/app-check" "0.2.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@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/firebase/-/firebase-9.0.0.tgz#00bfa03a3eb99bde43a472a8861aa808068153bb" + integrity sha512-atgnuvELhU9D5w9moChnyCb6GRbOCqk54/kHN0J4kdLJBncpcb2culIJ7nlSHILMcW9MNMiNKDJ07RwXVyqFFA== + dependencies: + "@firebase/analytics" "0.7.0" + "@firebase/analytics-compat" "0.1.0" + "@firebase/app" "0.7.0" + "@firebase/app-check" "0.4.0" + "@firebase/app-check-compat" "0.1.0" + "@firebase/app-compat" "0.1.0" + "@firebase/app-types" "0.7.0" + "@firebase/auth" "0.17.0" + "@firebase/auth-compat" "0.1.0" + "@firebase/database" "0.12.0" + "@firebase/database-compat" "0.1.0" + "@firebase/firestore" "3.0.0" + "@firebase/firestore-compat" "0.1.0" + "@firebase/functions" "0.7.0" + "@firebase/functions-compat" "0.1.0" + "@firebase/installations" "0.5.0" + "@firebase/messaging" "0.9.0" + "@firebase/messaging-compat" "0.1.0" + "@firebase/performance" "0.5.0" + "@firebase/performance-compat" "0.1.0" "@firebase/polyfill" "0.3.36" - "@firebase/remote-config" "0.1.42" - "@firebase/storage" "0.6.1" - "@firebase/util" "1.2.0" + "@firebase/remote-config" "0.2.0" + "@firebase/remote-config-compat" "0.1.0" + "@firebase/storage" "0.8.0" + "@firebase/storage-compat" "0.1.0" + "@firebase/util" "1.3.0" flat-cache@^3.0.4: version "3.0.4" @@ -5070,6 +5227,11 @@ image-size@1.0.0: dependencies: queue "6.0.2" +immediate@~3.0.5: + version "3.0.6" + resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" + integrity sha1-nbHb0Pr43m++D13V5Wu2BigN5ps= + import-fresh@^3.0.0, import-fresh@^3.2.1: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" @@ -6053,6 +6215,16 @@ jsonwebtoken@^8.5.1: array-includes "^3.1.2" object.assign "^4.1.2" +jszip@^3.5.0, jszip@^3.6.0: + version "3.7.1" + resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.7.1.tgz#bd63401221c15625a1228c556ca8a68da6fda3d9" + integrity sha512-ghL0tz1XG9ZEmRMcEN2vt7xabrDdqHHeykgARpmZ0BiIctWxM47Vt63ZO2dnp4QYt/xJVLLy5Zv1l/xRdh2byg== + dependencies: + lie "~3.3.0" + pako "~1.0.2" + readable-stream "~2.3.6" + set-immediate-shim "~1.0.1" + jwa@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a" @@ -6167,6 +6339,13 @@ levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" +lie@~3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/lie/-/lie-3.3.0.tgz#dcf82dee545f46074daf200c7c1c5a08e0f40f6a" + integrity sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ== + dependencies: + immediate "~3.0.5" + limiter@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/limiter/-/limiter-1.1.5.tgz#8f92a25b3b16c6131293a0cc834b4a838a2aa7c2" @@ -6946,7 +7125,7 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== -pako@~1.0.5: +pako@~1.0.2, pako@~1.0.5: version "1.0.11" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== @@ -7399,7 +7578,7 @@ read-pkg@^3.0.0: normalize-package-data "^2.3.2" path-type "^3.0.0" -readable-stream@^2.0.2, readable-stream@^2.3.3, readable-stream@^2.3.6: +readable-stream@^2.0.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -7608,6 +7787,13 @@ reusify@^1.0.4: resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== +rimraf@^2.7.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" @@ -7694,6 +7880,26 @@ schema-utils@^3.1.0: ajv "^6.12.5" ajv-keywords "^3.5.2" +selenium-webdriver@4.0.0-beta.1: + version "4.0.0-beta.1" + resolved "https://registry.yarnpkg.com/selenium-webdriver/-/selenium-webdriver-4.0.0-beta.1.tgz#db645b0d775f26e4e12235db05796a1bc1e7efda" + integrity sha512-DJ10z6Yk+ZBaLrt1CLElytQ/FOayx29ANKDtmtyW1A6kCJx3+dsc5fFMOZxwzukDniyYsC3OObT5pUAsgkjpxQ== + dependencies: + jszip "^3.5.0" + rimraf "^2.7.1" + tmp "^0.2.1" + ws "^7.3.1" + +selenium-webdriver@^4.0.0-beta.2: + version "4.0.0-beta.4" + resolved "https://registry.yarnpkg.com/selenium-webdriver/-/selenium-webdriver-4.0.0-beta.4.tgz#db4fc7505a515ea3b4a95ded031b738a1544eddd" + integrity sha512-+s/CIYkWzmnC9WASBxxVj7Lm0dcyl6OaFxwIJaFCT5WCuACiimEEr4lUnOOFP/QlKfkDQ56m+aRczaq2EvJEJg== + dependencies: + jszip "^3.6.0" + rimraf "^3.0.2" + tmp "^0.2.1" + ws ">=7.4.6" + "semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" @@ -7728,6 +7934,11 @@ set-cookie-parser@^2.4.6: resolved "https://registry.yarnpkg.com/set-cookie-parser/-/set-cookie-parser-2.4.8.tgz#d0da0ed388bc8f24e706a391f9c9e252a13c58b2" integrity sha512-edRH8mBKEWNVIVMKejNnuJxleqYE/ZSdcT8/Nem9/mmosx12pctd80s2Oy00KNZzrogMZS5mauK2/ymL1bvlvg== +set-immediate-shim@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" + integrity sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E= + set-value@^2.0.0, set-value@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" @@ -8310,6 +8521,13 @@ timers-browserify@2.0.12, timers-browserify@^2.0.4: dependencies: setimmediate "^1.0.4" +tmp@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" + integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== + dependencies: + rimraf "^3.0.0" + tmpl@1.0.x: version "1.0.4" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" @@ -8918,6 +9136,11 @@ write-file-atomic@^3.0.0: signal-exit "^3.0.2" typedarray-to-buffer "^3.1.5" +ws@>=7.4.6: + version "8.2.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.2.1.tgz#bdd92b3c56fdb47d2379b5ae534281922cc5bd12" + integrity sha512-XkgWpJU3sHU7gX8f13NqTn6KQ85bd1WU7noBHTT8fSohx7OS1TPY8k+cyRPCzFkia7C4mM229yeHr1qK9sM4JQ== + ws@^7.3.1: version "7.4.5" resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.5.tgz#a484dd851e9beb6fdb420027e3885e8ce48986c1" @@ -8943,11 +9166,6 @@ xmlchars@^2.2.0: resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== -xmlhttprequest@1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz#67fe075c5c24fef39f9d65f5f7b7fe75171968fc" - integrity sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw= - xtend@^4.0.0, xtend@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"