@@ -24,6 +24,10 @@ import {
2424} from '@firebase/messaging-types' ;
2525
2626import { Provider } from '@firebase/component' ;
27+ import {
28+ AppCheckInternalComponentName ,
29+ FirebaseAppCheckInternal
30+ } from '@firebase/app-check-interop-types' ;
2731
2832/**
2933 * The metadata that should be supplied with function calls.
@@ -32,6 +36,7 @@ import { Provider } from '@firebase/component';
3236export interface Context {
3337 authToken ?: string ;
3438 messagingToken ?: string ;
39+ appCheckToken : string | null ;
3540}
3641
3742/**
@@ -41,9 +46,11 @@ export interface Context {
4146export class ContextProvider {
4247 private auth : FirebaseAuthInternal | null = null ;
4348 private messaging : FirebaseMessaging | null = null ;
49+ private appCheck : FirebaseAppCheckInternal | null = null ;
4450 constructor (
4551 authProvider : Provider < FirebaseAuthInternalName > ,
46- messagingProvider : Provider < FirebaseMessagingName >
52+ messagingProvider : Provider < FirebaseMessagingName > ,
53+ appCheckProvider : Provider < AppCheckInternalComponentName >
4754 ) {
4855 this . auth = authProvider . getImmediate ( { optional : true } ) ;
4956 this . messaging = messagingProvider . getImmediate ( {
@@ -67,6 +74,15 @@ export class ContextProvider {
6774 }
6875 ) ;
6976 }
77+
78+ if ( ! this . appCheck ) {
79+ appCheckProvider . get ( ) . then (
80+ appCheck => ( this . appCheck = appCheck ) ,
81+ ( ) => {
82+ /* get() never rejects */
83+ }
84+ ) ;
85+ }
7086 }
7187
7288 async getAuthToken ( ) : Promise < string | undefined > {
@@ -103,9 +119,22 @@ export class ContextProvider {
103119 }
104120 }
105121
122+ async getAppCheckToken ( ) : Promise < string | null > {
123+ if ( this . appCheck ) {
124+ const result = await this . appCheck . getToken ( ) ;
125+ // If getToken() fails, it will still return a dummy token that also has
126+ // an error field containing the error message. We will send any token
127+ // provided here and show an error if/when it is rejected by the functions
128+ // endpoint.
129+ return result . token ;
130+ }
131+ return null ;
132+ }
133+
106134 async getContext ( ) : Promise < Context > {
107135 const authToken = await this . getAuthToken ( ) ;
108136 const messagingToken = await this . getMessagingToken ( ) ;
109- return { authToken, messagingToken } ;
137+ const appCheckToken = await this . getAppCheckToken ( ) ;
138+ return { authToken, messagingToken, appCheckToken } ;
110139 }
111140}
0 commit comments