From d0aaba7e0c080a5c7cfe81d89ce62ff2679e29e9 Mon Sep 17 00:00:00 2001 From: jhuleatt <3759507+jhuleatt@users.noreply.github.com> Date: Thu, 26 Aug 2021 09:04:55 -0400 Subject: [PATCH 1/5] add app check --- docs/use.md | 33 +++++++++++++++++++++++++++++++++ src/sdk.tsx | 6 +++++- 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/docs/use.md b/docs/use.md index b4948db2..8b3b8848 100644 --- a/docs/use.md +++ b/docs/use.md @@ -119,6 +119,39 @@ function FirebaseComponents({ children }) { Learn more about the Local Emulator Suite in the [Firebase docs](https://firebase.google.com/docs/emulator-suite/connect_and_prototype). +### Set up App Check + +[App Check](https://firebase.google.com/docs/app-check) helps protect your backend resources from abuse, such as billing fraud and phishing. + +```jsx +import { initializeAppCheck, ReCaptchaV3Provider } from "firebase/app-check"; +import { useFirebaseApp, AppCheckProvider } from 'reactfire'; + +// Create your reCAPTCHA v3 site key in the +// "Project Settings > App Check" section of the Firebase console +const APP_CHECK_TOKEN = 'abcdefghijklmnopqrstuvwxy-1234567890abcd'; + +function FirebaseComponents({ children }) { + const app = useFirebaseApp(); // a parent component contains a `FirebaseAppProvider` + + const appCheck = initializeAppCheck(app, { + provider: new ReCaptchaV3Provider(APP_CHECK_TOKEN), + isTokenAutoRefreshEnabled: true + }); + + // Activate App Check at the top level before any component talks to an App-Check-compatible Firebase service + return ( + + + + + + ); +} +``` + +See the [App Check setup guide in the Firebase docs](https://firebase.google.com/docs/app-check/web/recaptcha-provider#project-setup) for more detailed instructions. + ## Auth The following samples assume that `FirebaseAppProvider` and `AuthProvider` components exist higher up the component tree. diff --git a/src/sdk.tsx b/src/sdk.tsx index d8faef39..f3c21f7a 100644 --- a/src/sdk.tsx +++ b/src/sdk.tsx @@ -1,5 +1,6 @@ import * as React from 'react'; +import type { AppCheck } from 'firebase/app-check'; import type { Auth } from 'firebase/auth'; import type { Database } from 'firebase/database'; import type { Firestore } from 'firebase/firestore'; @@ -12,6 +13,7 @@ import { ObservableStatus, useObservable } from './useObservable'; import { from } from 'rxjs'; import { ReactFireOptions } from '.'; +const AppCheckSdkContext = React.createContext(undefined); const AuthSdkContext = React.createContext(undefined); const DatabaseSdkContext = React.createContext(undefined); const FirestoreSdkContext = React.createContext(undefined); @@ -19,7 +21,7 @@ const StorageSdkContext = React.createContext(undef const PerformanceSdkContext = React.createContext(undefined); const RemoteConfigSdkContext = React.createContext(undefined); -type FirebaseSdks = Auth | Database | Firestore | FirebasePerformance | FirebaseStorage | RemoteConfig; +type FirebaseSdks = AppCheck | Auth | Database | Firestore | FirebasePerformance | FirebaseStorage | RemoteConfig; function getSdkProvider(SdkContext: React.Context) { return function SdkProvider(props: React.PropsWithChildren<{ sdk: Sdk }>) { @@ -79,6 +81,7 @@ function useInitSdk( return useObservable(`firebase-sdk:${sdkName}:${firebaseApp.name}`, from(initializeSdk), options); } +export const AppCheckProvider = getSdkProvider(AppCheckSdkContext); export const AuthProvider = getSdkProvider(AuthSdkContext); export const DatabaseProvider = getSdkProvider(DatabaseSdkContext); export const FirestoreProvider = getSdkProvider(FirestoreSdkContext); @@ -86,6 +89,7 @@ export const PerformanceProvider = getSdkProvider(Performan export const StorageProvider = getSdkProvider(StorageSdkContext); export const RemoteConfigProvider = getSdkProvider(RemoteConfigSdkContext); +export const useAppCheck = () => useSdk(AppCheckSdkContext); export const useAuth = () => useSdk(AuthSdkContext); export const useDatabase = () => useSdk(DatabaseSdkContext); export const useFirestore = () => useSdk(FirestoreSdkContext); From df9c7b9212699f5d1f97e182fab489a8175731a2 Mon Sep 17 00:00:00 2001 From: jhuleatt <3759507+jhuleatt@users.noreply.github.com> Date: Thu, 26 Aug 2021 14:41:08 -0400 Subject: [PATCH 2/5] docgen --- docs/reference/modules/index.md | 14 ++++++ docs/reference/modules/sdk.md | 78 ++++++++++++++++++++++++--------- docs/use.md | 1 + 3 files changed, 72 insertions(+), 21 deletions(-) diff --git a/docs/reference/modules/index.md b/docs/reference/modules/index.md index d525184a..da1f8eb2 100644 --- a/docs/reference/modules/index.md +++ b/docs/reference/modules/index.md @@ -7,6 +7,7 @@ ### References - [AnalyticsProvider](index.md#analyticsprovider) +- [AppCheckProvider](index.md#appcheckprovider) - [AuthCheck](index.md#authcheck) - [AuthCheckProps](index.md#authcheckprops) - [AuthProvider](index.md#authprovider) @@ -32,6 +33,7 @@ - [preloadObservable](index.md#preloadobservable) - [preloadUser](index.md#preloaduser) - [useAnalytics](index.md#useanalytics) +- [useAppCheck](index.md#useappcheck) - [useAuth](index.md#useauth) - [useDatabase](index.md#usedatabase) - [useDatabaseList](index.md#usedatabaselist) @@ -97,6 +99,12 @@ Re-exports: [AnalyticsProvider](sdk.md#analyticsprovider) ___ +### AppCheckProvider + +Re-exports: [AppCheckProvider](sdk.md#appcheckprovider) + +___ + ### AuthCheck Re-exports: [AuthCheck](auth.md#authcheck) @@ -247,6 +255,12 @@ Re-exports: [useAnalytics](sdk.md#useanalytics) ___ +### useAppCheck + +Re-exports: [useAppCheck](sdk.md#useappcheck) + +___ + ### useAuth Re-exports: [useAuth](sdk.md#useauth) diff --git a/docs/reference/modules/sdk.md b/docs/reference/modules/sdk.md index 6a368686..39d6af03 100644 --- a/docs/reference/modules/sdk.md +++ b/docs/reference/modules/sdk.md @@ -7,6 +7,7 @@ ### Functions - [AnalyticsProvider](sdk.md#analyticsprovider) +- [AppCheckProvider](sdk.md#appcheckprovider) - [AuthProvider](sdk.md#authprovider) - [DatabaseProvider](sdk.md#databaseprovider) - [FirestoreProvider](sdk.md#firestoreprovider) @@ -14,6 +15,7 @@ - [RemoteConfigProvider](sdk.md#remoteconfigprovider) - [StorageProvider](sdk.md#storageprovider) - [useAnalytics](sdk.md#useanalytics) +- [useAppCheck](sdk.md#useappcheck) - [useAuth](sdk.md#useauth) - [useDatabase](sdk.md#usedatabase) - [useFirestore](sdk.md#usefirestore) @@ -46,7 +48,27 @@ #### Defined in -[src/sdk.tsx:85](https://github.com/FirebaseExtended/reactfire/blob/main/src/sdk.tsx#L85) +[src/sdk.tsx:88](https://github.com/FirebaseExtended/reactfire/blob/main/src/sdk.tsx#L88) + +___ + +### AppCheckProvider + +▸ `Const` **AppCheckProvider**(`props`): `Element` + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `props` | `PropsWithChildren`<`Object`\> | + +#### Returns + +`Element` + +#### Defined in + +[src/sdk.tsx:86](https://github.com/FirebaseExtended/reactfire/blob/main/src/sdk.tsx#L86) ___ @@ -66,7 +88,7 @@ ___ #### Defined in -[src/sdk.tsx:84](https://github.com/FirebaseExtended/reactfire/blob/main/src/sdk.tsx#L84) +[src/sdk.tsx:87](https://github.com/FirebaseExtended/reactfire/blob/main/src/sdk.tsx#L87) ___ @@ -86,7 +108,7 @@ ___ #### Defined in -[src/sdk.tsx:86](https://github.com/FirebaseExtended/reactfire/blob/main/src/sdk.tsx#L86) +[src/sdk.tsx:89](https://github.com/FirebaseExtended/reactfire/blob/main/src/sdk.tsx#L89) ___ @@ -106,7 +128,7 @@ ___ #### Defined in -[src/sdk.tsx:87](https://github.com/FirebaseExtended/reactfire/blob/main/src/sdk.tsx#L87) +[src/sdk.tsx:90](https://github.com/FirebaseExtended/reactfire/blob/main/src/sdk.tsx#L90) ___ @@ -126,7 +148,7 @@ ___ #### Defined in -[src/sdk.tsx:88](https://github.com/FirebaseExtended/reactfire/blob/main/src/sdk.tsx#L88) +[src/sdk.tsx:91](https://github.com/FirebaseExtended/reactfire/blob/main/src/sdk.tsx#L91) ___ @@ -146,7 +168,7 @@ ___ #### Defined in -[src/sdk.tsx:90](https://github.com/FirebaseExtended/reactfire/blob/main/src/sdk.tsx#L90) +[src/sdk.tsx:93](https://github.com/FirebaseExtended/reactfire/blob/main/src/sdk.tsx#L93) ___ @@ -166,7 +188,7 @@ ___ #### Defined in -[src/sdk.tsx:89](https://github.com/FirebaseExtended/reactfire/blob/main/src/sdk.tsx#L89) +[src/sdk.tsx:92](https://github.com/FirebaseExtended/reactfire/blob/main/src/sdk.tsx#L92) ___ @@ -180,7 +202,21 @@ ___ #### Defined in -[src/sdk.tsx:93](https://github.com/FirebaseExtended/reactfire/blob/main/src/sdk.tsx#L93) +[src/sdk.tsx:97](https://github.com/FirebaseExtended/reactfire/blob/main/src/sdk.tsx#L97) + +___ + +### useAppCheck + +▸ `Const` **useAppCheck**(): `AppCheck` + +#### Returns + +`AppCheck` + +#### Defined in + +[src/sdk.tsx:95](https://github.com/FirebaseExtended/reactfire/blob/main/src/sdk.tsx#L95) ___ @@ -194,7 +230,7 @@ ___ #### Defined in -[src/sdk.tsx:92](https://github.com/FirebaseExtended/reactfire/blob/main/src/sdk.tsx#L92) +[src/sdk.tsx:96](https://github.com/FirebaseExtended/reactfire/blob/main/src/sdk.tsx#L96) ___ @@ -208,7 +244,7 @@ ___ #### Defined in -[src/sdk.tsx:94](https://github.com/FirebaseExtended/reactfire/blob/main/src/sdk.tsx#L94) +[src/sdk.tsx:98](https://github.com/FirebaseExtended/reactfire/blob/main/src/sdk.tsx#L98) ___ @@ -222,7 +258,7 @@ ___ #### Defined in -[src/sdk.tsx:95](https://github.com/FirebaseExtended/reactfire/blob/main/src/sdk.tsx#L95) +[src/sdk.tsx:99](https://github.com/FirebaseExtended/reactfire/blob/main/src/sdk.tsx#L99) ___ @@ -243,7 +279,7 @@ ___ #### Defined in -[src/sdk.tsx:106](https://github.com/FirebaseExtended/reactfire/blob/main/src/sdk.tsx#L106) +[src/sdk.tsx:110](https://github.com/FirebaseExtended/reactfire/blob/main/src/sdk.tsx#L110) ___ @@ -264,7 +300,7 @@ ___ #### Defined in -[src/sdk.tsx:105](https://github.com/FirebaseExtended/reactfire/blob/main/src/sdk.tsx#L105) +[src/sdk.tsx:109](https://github.com/FirebaseExtended/reactfire/blob/main/src/sdk.tsx#L109) ___ @@ -285,7 +321,7 @@ ___ #### Defined in -[src/sdk.tsx:107](https://github.com/FirebaseExtended/reactfire/blob/main/src/sdk.tsx#L107) +[src/sdk.tsx:111](https://github.com/FirebaseExtended/reactfire/blob/main/src/sdk.tsx#L111) ___ @@ -306,7 +342,7 @@ ___ #### Defined in -[src/sdk.tsx:108](https://github.com/FirebaseExtended/reactfire/blob/main/src/sdk.tsx#L108) +[src/sdk.tsx:112](https://github.com/FirebaseExtended/reactfire/blob/main/src/sdk.tsx#L112) ___ @@ -327,7 +363,7 @@ ___ #### Defined in -[src/sdk.tsx:109](https://github.com/FirebaseExtended/reactfire/blob/main/src/sdk.tsx#L109) +[src/sdk.tsx:113](https://github.com/FirebaseExtended/reactfire/blob/main/src/sdk.tsx#L113) ___ @@ -348,7 +384,7 @@ ___ #### Defined in -[src/sdk.tsx:111](https://github.com/FirebaseExtended/reactfire/blob/main/src/sdk.tsx#L111) +[src/sdk.tsx:115](https://github.com/FirebaseExtended/reactfire/blob/main/src/sdk.tsx#L115) ___ @@ -369,7 +405,7 @@ ___ #### Defined in -[src/sdk.tsx:113](https://github.com/FirebaseExtended/reactfire/blob/main/src/sdk.tsx#L113) +[src/sdk.tsx:117](https://github.com/FirebaseExtended/reactfire/blob/main/src/sdk.tsx#L117) ___ @@ -383,7 +419,7 @@ ___ #### Defined in -[src/sdk.tsx:96](https://github.com/FirebaseExtended/reactfire/blob/main/src/sdk.tsx#L96) +[src/sdk.tsx:100](https://github.com/FirebaseExtended/reactfire/blob/main/src/sdk.tsx#L100) ___ @@ -397,7 +433,7 @@ ___ #### Defined in -[src/sdk.tsx:98](https://github.com/FirebaseExtended/reactfire/blob/main/src/sdk.tsx#L98) +[src/sdk.tsx:102](https://github.com/FirebaseExtended/reactfire/blob/main/src/sdk.tsx#L102) ___ @@ -411,4 +447,4 @@ ___ #### Defined in -[src/sdk.tsx:97](https://github.com/FirebaseExtended/reactfire/blob/main/src/sdk.tsx#L97) +[src/sdk.tsx:101](https://github.com/FirebaseExtended/reactfire/blob/main/src/sdk.tsx#L101) diff --git a/docs/use.md b/docs/use.md index 6a4961a9..758fe085 100644 --- a/docs/use.md +++ b/docs/use.md @@ -5,6 +5,7 @@ - [Setup](#setup) * [Initialize product SDKs and register them with ReactFire](#initialize-product-sdks-and-register-them-with-reactfire) * [Connect to the Firebase Local Emulator Suite](#connect-to-the-firebase-local-emulator-suite) + * [Set up App Check](#set-up-app-check) - [Auth](#auth) * [Display the current signed-in user](#display-the-current-signed-in-user) * [Only render a component if a user is signed in](#only-render-a-component-if-a-user-is-signed-in) From 951befed4bbdeca5cfa5a5e458af737b0d4196f5 Mon Sep 17 00:00:00 2001 From: jhuleatt <3759507+jhuleatt@users.noreply.github.com> Date: Wed, 1 Sep 2021 14:47:13 -0400 Subject: [PATCH 3/5] add useInitAppCheck --- src/sdk.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/sdk.tsx b/src/sdk.tsx index 26432c02..9e21826b 100644 --- a/src/sdk.tsx +++ b/src/sdk.tsx @@ -90,6 +90,7 @@ type InitSdkHook = ( options?: ReactFireOptions ) => ObservableStatus; +export const useInitAppCheck: InitSdkHook = (initializer, options) => useInitSdk('appcheck', AppCheckSdkContext, initializer, options); export const useInitAuth: InitSdkHook = (initializer, options) => useInitSdk('auth', AuthSdkContext, initializer, options); export const useInitAnalytics: InitSdkHook = (initializer, options) => useInitSdk('analytics', AnalyticsSdkContext, initializer, options); export const useInitDatabase: InitSdkHook = (initializer, options) => useInitSdk('database', DatabaseSdkContext, initializer, options); From 6df0995eaff6f1bcc6b1ac81bc88f742fd8bf9b3 Mon Sep 17 00:00:00 2001 From: jhuleatt <3759507+jhuleatt@users.noreply.github.com> Date: Wed, 1 Sep 2021 14:48:51 -0400 Subject: [PATCH 4/5] fix example --- docs/use.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/use.md b/docs/use.md index 758fe085..a30823fa 100644 --- a/docs/use.md +++ b/docs/use.md @@ -142,7 +142,7 @@ function FirebaseComponents({ children }) { // Activate App Check at the top level before any component talks to an App-Check-compatible Firebase service return ( - + From 70a1fab0f2c454752e9bb43da6c0b4c1023716f9 Mon Sep 17 00:00:00 2001 From: jhuleatt <3759507+jhuleatt@users.noreply.github.com> Date: Wed, 1 Sep 2021 14:49:00 -0400 Subject: [PATCH 5/5] regenerate reference --- docs/reference/modules/index.md | 7 +++++++ docs/reference/modules/sdk.md | 36 ++++++++++++++++++++++++++------- 2 files changed, 36 insertions(+), 7 deletions(-) diff --git a/docs/reference/modules/index.md b/docs/reference/modules/index.md index da1f8eb2..ca382d4b 100644 --- a/docs/reference/modules/index.md +++ b/docs/reference/modules/index.md @@ -50,6 +50,7 @@ - [useFirestoreDocOnce](index.md#usefirestoredoconce) - [useIdTokenResult](index.md#useidtokenresult) - [useInitAnalytics](index.md#useinitanalytics) +- [useInitAppCheck](index.md#useinitappcheck) - [useInitAuth](index.md#useinitauth) - [useInitDatabase](index.md#useinitdatabase) - [useInitFirestore](index.md#useinitfirestore) @@ -357,6 +358,12 @@ Re-exports: [useInitAnalytics](sdk.md#useinitanalytics) ___ +### useInitAppCheck + +Re-exports: [useInitAppCheck](sdk.md#useinitappcheck) + +___ + ### useInitAuth Re-exports: [useInitAuth](sdk.md#useinitauth) diff --git a/docs/reference/modules/sdk.md b/docs/reference/modules/sdk.md index 60a37cc0..2cdf487c 100644 --- a/docs/reference/modules/sdk.md +++ b/docs/reference/modules/sdk.md @@ -20,6 +20,7 @@ - [useDatabase](sdk.md#usedatabase) - [useFirestore](sdk.md#usefirestore) - [useInitAnalytics](sdk.md#useinitanalytics) +- [useInitAppCheck](sdk.md#useinitappcheck) - [useInitAuth](sdk.md#useinitauth) - [useInitDatabase](sdk.md#useinitdatabase) - [useInitFirestore](sdk.md#useinitfirestore) @@ -279,7 +280,28 @@ ___ #### Defined in -[src/sdk.tsx:94](https://github.com/FirebaseExtended/reactfire/blob/main/src/sdk.tsx#L94) +[src/sdk.tsx:95](https://github.com/FirebaseExtended/reactfire/blob/main/src/sdk.tsx#L95) + +___ + +### useInitAppCheck + +▸ `Const` **useInitAppCheck**(`initializer`, `options?`): [`ObservableStatus`](../interfaces/useObservable.ObservableStatus.md)<`AppCheck`\> + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `initializer` | (`firebaseApp`: `FirebaseApp`) => `Promise`<`AppCheck`\> | +| `options?` | [`ReactFireOptions`](../interfaces/index.ReactFireOptions.md)<`AppCheck`\> | + +#### Returns + +[`ObservableStatus`](../interfaces/useObservable.ObservableStatus.md)<`AppCheck`\> + +#### Defined in + +[src/sdk.tsx:93](https://github.com/FirebaseExtended/reactfire/blob/main/src/sdk.tsx#L93) ___ @@ -300,7 +322,7 @@ ___ #### Defined in -[src/sdk.tsx:93](https://github.com/FirebaseExtended/reactfire/blob/main/src/sdk.tsx#L93) +[src/sdk.tsx:94](https://github.com/FirebaseExtended/reactfire/blob/main/src/sdk.tsx#L94) ___ @@ -321,7 +343,7 @@ ___ #### Defined in -[src/sdk.tsx:95](https://github.com/FirebaseExtended/reactfire/blob/main/src/sdk.tsx#L95) +[src/sdk.tsx:96](https://github.com/FirebaseExtended/reactfire/blob/main/src/sdk.tsx#L96) ___ @@ -342,7 +364,7 @@ ___ #### Defined in -[src/sdk.tsx:96](https://github.com/FirebaseExtended/reactfire/blob/main/src/sdk.tsx#L96) +[src/sdk.tsx:97](https://github.com/FirebaseExtended/reactfire/blob/main/src/sdk.tsx#L97) ___ @@ -363,7 +385,7 @@ ___ #### Defined in -[src/sdk.tsx:97](https://github.com/FirebaseExtended/reactfire/blob/main/src/sdk.tsx#L97) +[src/sdk.tsx:98](https://github.com/FirebaseExtended/reactfire/blob/main/src/sdk.tsx#L98) ___ @@ -384,7 +406,7 @@ ___ #### Defined in -[src/sdk.tsx:99](https://github.com/FirebaseExtended/reactfire/blob/main/src/sdk.tsx#L99) +[src/sdk.tsx:100](https://github.com/FirebaseExtended/reactfire/blob/main/src/sdk.tsx#L100) ___ @@ -405,7 +427,7 @@ ___ #### Defined in -[src/sdk.tsx:101](https://github.com/FirebaseExtended/reactfire/blob/main/src/sdk.tsx#L101) +[src/sdk.tsx:102](https://github.com/FirebaseExtended/reactfire/blob/main/src/sdk.tsx#L102) ___