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)
___