14
14
* See the License for the specific language governing permissions and
15
15
* limitations under the License.
16
16
*/
17
- import {
18
- AdditionalUserInfo ,
19
- UserProfile ,
20
- ProviderId
21
- } from '@firebase/auth-types-exp' ;
17
+
18
+ import * as externs from '@firebase/auth-types-exp' ;
22
19
import { IdTokenResponse , IdTokenResponseKind } from '../../model/id_token' ;
23
20
import { _parseToken } from './id_token_result' ;
21
+ import { UserCredential } from '../../model/user' ;
24
22
25
23
/**
26
24
* Parse the `AdditionalUserInfo` from the ID token response.
27
25
*/
28
26
export function _fromIdTokenResponse (
29
- idTokenResponse : IdTokenResponse
30
- ) : AdditionalUserInfo | null {
27
+ idTokenResponse ?: IdTokenResponse
28
+ ) : externs . AdditionalUserInfo | null {
29
+ if ( ! idTokenResponse ) {
30
+ return null ;
31
+ }
31
32
const { providerId } = idTokenResponse ;
32
33
const profile = idTokenResponse . rawUserInfo
33
34
? JSON . parse ( idTokenResponse . rawUserInfo )
@@ -41,8 +42,8 @@ export function _fromIdTokenResponse(
41
42
] ;
42
43
if ( signInProvider ) {
43
44
const filteredProviderId =
44
- providerId !== ProviderId . ANONYMOUS && providerId !== ProviderId . CUSTOM
45
- ? ( signInProvider as ProviderId )
45
+ providerId !== externs . ProviderId . ANONYMOUS && providerId !== externs . ProviderId . CUSTOM
46
+ ? ( signInProvider as externs . ProviderId )
46
47
: null ;
47
48
// Uses generic class in accordance with the legacy SDK.
48
49
return new GenericAdditionalUserInfo ( isNewUser , filteredProviderId ) ;
@@ -52,83 +53,79 @@ export function _fromIdTokenResponse(
52
53
return null ;
53
54
}
54
55
switch ( providerId ) {
55
- case ProviderId . FACEBOOK :
56
+ case externs . ProviderId . FACEBOOK :
56
57
return new FacebookAdditionalUserInfo ( isNewUser , profile ) ;
57
- case ProviderId . GITHUB :
58
+ case externs . ProviderId . GITHUB :
58
59
return new GithubAdditionalUserInfo ( isNewUser , profile ) ;
59
- case ProviderId . GOOGLE :
60
+ case externs . ProviderId . GOOGLE :
60
61
return new GoogleAdditionalUserInfo ( isNewUser , profile ) ;
61
- case ProviderId . TWITTER :
62
+ case externs . ProviderId . TWITTER :
62
63
return new TwitterAdditionalUserInfo (
63
64
isNewUser ,
64
65
profile ,
65
66
idTokenResponse . screenName || null
66
67
) ;
67
- case ProviderId . CUSTOM :
68
- case ProviderId . ANONYMOUS :
68
+ case externs . ProviderId . CUSTOM :
69
+ case externs . ProviderId . ANONYMOUS :
69
70
return new GenericAdditionalUserInfo ( isNewUser , null ) ;
70
71
default :
71
- return new FederatedAdditionalUserInfo ( isNewUser , providerId , profile ) ;
72
+ return new GenericAdditionalUserInfo ( isNewUser , providerId , profile ) ;
72
73
}
73
74
}
74
75
75
- class GenericAdditionalUserInfo implements AdditionalUserInfo {
76
+ class GenericAdditionalUserInfo implements externs . AdditionalUserInfo {
76
77
constructor (
77
78
readonly isNewUser : boolean ,
78
- readonly providerId : ProviderId | null
79
+ readonly providerId : externs . ProviderId | null ,
80
+ readonly profile : externs . UserProfile = { }
79
81
) { }
80
82
}
81
83
82
- class FederatedAdditionalUserInfo extends GenericAdditionalUserInfo {
83
- constructor (
84
- isNewUser : boolean ,
85
- providerId : ProviderId ,
86
- readonly profile : UserProfile
87
- ) {
88
- super ( isNewUser , providerId ) ;
89
- }
90
- }
91
-
92
- class FederatedAdditionalUserInfoWithUsername extends FederatedAdditionalUserInfo {
84
+ class FederatedAdditionalUserInfoWithUsername extends GenericAdditionalUserInfo {
93
85
constructor (
94
86
isNewUser : boolean ,
95
- providerId : ProviderId ,
96
- profile : UserProfile ,
87
+ providerId : externs . ProviderId ,
88
+ profile : externs . UserProfile ,
97
89
readonly username : string | null
98
90
) {
99
91
super ( isNewUser , providerId , profile ) ;
100
92
}
101
93
}
102
94
103
- class FacebookAdditionalUserInfo extends FederatedAdditionalUserInfo {
104
- constructor ( isNewUser : boolean , profile : UserProfile ) {
105
- super ( isNewUser , ProviderId . FACEBOOK , profile ) ;
95
+ class FacebookAdditionalUserInfo extends GenericAdditionalUserInfo {
96
+ constructor ( isNewUser : boolean , profile : externs . UserProfile ) {
97
+ super ( isNewUser , externs . ProviderId . FACEBOOK , profile ) ;
106
98
}
107
99
}
108
100
109
101
class GithubAdditionalUserInfo extends FederatedAdditionalUserInfoWithUsername {
110
- constructor ( isNewUser : boolean , profile : UserProfile ) {
102
+ constructor ( isNewUser : boolean , profile : externs . UserProfile ) {
111
103
super (
112
104
isNewUser ,
113
- ProviderId . GITHUB ,
105
+ externs . ProviderId . GITHUB ,
114
106
profile ,
115
107
typeof profile ?. login === 'string' ? profile ?. login : null
116
108
) ;
117
109
}
118
110
}
119
111
120
- class GoogleAdditionalUserInfo extends FederatedAdditionalUserInfo {
121
- constructor ( isNewUser : boolean , profile : UserProfile ) {
122
- super ( isNewUser , ProviderId . GOOGLE , profile ) ;
112
+ class GoogleAdditionalUserInfo extends GenericAdditionalUserInfo {
113
+ constructor ( isNewUser : boolean , profile : externs . UserProfile ) {
114
+ super ( isNewUser , externs . ProviderId . GOOGLE , profile ) ;
123
115
}
124
116
}
125
117
126
118
class TwitterAdditionalUserInfo extends FederatedAdditionalUserInfoWithUsername {
127
119
constructor (
128
120
isNewUser : boolean ,
129
- profile : UserProfile ,
121
+ profile : externs . UserProfile ,
130
122
screenName : string | null
131
123
) {
132
- super ( isNewUser , ProviderId . TWITTER , profile , screenName ) ;
124
+ super ( isNewUser , externs . ProviderId . TWITTER , profile , screenName ) ;
133
125
}
134
126
}
127
+
128
+ export function getAdditionalUserInfo (
129
+ userCredential : externs . UserCredential ) : externs . AdditionalUserInfo | null {
130
+ return _fromIdTokenResponse ( ( userCredential as UserCredential ) . _tokenResponse ) ;
131
+ }
0 commit comments