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,9 @@ 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 &&
46
+ providerId !== externs . ProviderId . CUSTOM
47
+ ? ( signInProvider as externs . ProviderId )
46
48
: null ;
47
49
// Uses generic class in accordance with the legacy SDK.
48
50
return new GenericAdditionalUserInfo ( isNewUser , filteredProviderId ) ;
@@ -52,83 +54,82 @@ export function _fromIdTokenResponse(
52
54
return null ;
53
55
}
54
56
switch ( providerId ) {
55
- case ProviderId . FACEBOOK :
57
+ case externs . ProviderId . FACEBOOK :
56
58
return new FacebookAdditionalUserInfo ( isNewUser , profile ) ;
57
- case ProviderId . GITHUB :
59
+ case externs . ProviderId . GITHUB :
58
60
return new GithubAdditionalUserInfo ( isNewUser , profile ) ;
59
- case ProviderId . GOOGLE :
61
+ case externs . ProviderId . GOOGLE :
60
62
return new GoogleAdditionalUserInfo ( isNewUser , profile ) ;
61
- case ProviderId . TWITTER :
63
+ case externs . ProviderId . TWITTER :
62
64
return new TwitterAdditionalUserInfo (
63
65
isNewUser ,
64
66
profile ,
65
67
idTokenResponse . screenName || null
66
68
) ;
67
- case ProviderId . CUSTOM :
68
- case ProviderId . ANONYMOUS :
69
+ case externs . ProviderId . CUSTOM :
70
+ case externs . ProviderId . ANONYMOUS :
69
71
return new GenericAdditionalUserInfo ( isNewUser , null ) ;
70
72
default :
71
- return new FederatedAdditionalUserInfo ( isNewUser , providerId , profile ) ;
73
+ return new GenericAdditionalUserInfo ( isNewUser , providerId , profile ) ;
72
74
}
73
75
}
74
76
75
- class GenericAdditionalUserInfo implements AdditionalUserInfo {
77
+ class GenericAdditionalUserInfo implements externs . AdditionalUserInfo {
76
78
constructor (
77
79
readonly isNewUser : boolean ,
78
- readonly providerId : ProviderId | null
80
+ readonly providerId : externs . ProviderId | null ,
81
+ readonly profile : externs . UserProfile = { }
79
82
) { }
80
83
}
81
84
82
- class FederatedAdditionalUserInfo extends GenericAdditionalUserInfo {
85
+ class FederatedAdditionalUserInfoWithUsername extends GenericAdditionalUserInfo {
83
86
constructor (
84
87
isNewUser : boolean ,
85
- providerId : ProviderId ,
86
- readonly profile : UserProfile
87
- ) {
88
- super ( isNewUser , providerId ) ;
89
- }
90
- }
91
-
92
- class FederatedAdditionalUserInfoWithUsername extends FederatedAdditionalUserInfo {
93
- constructor (
94
- isNewUser : boolean ,
95
- providerId : ProviderId ,
96
- profile : UserProfile ,
88
+ providerId : externs . ProviderId ,
89
+ profile : externs . UserProfile ,
97
90
readonly username : string | null
98
91
) {
99
92
super ( isNewUser , providerId , profile ) ;
100
93
}
101
94
}
102
95
103
- class FacebookAdditionalUserInfo extends FederatedAdditionalUserInfo {
104
- constructor ( isNewUser : boolean , profile : UserProfile ) {
105
- super ( isNewUser , ProviderId . FACEBOOK , profile ) ;
96
+ class FacebookAdditionalUserInfo extends GenericAdditionalUserInfo {
97
+ constructor ( isNewUser : boolean , profile : externs . UserProfile ) {
98
+ super ( isNewUser , externs . ProviderId . FACEBOOK , profile ) ;
106
99
}
107
100
}
108
101
109
102
class GithubAdditionalUserInfo extends FederatedAdditionalUserInfoWithUsername {
110
- constructor ( isNewUser : boolean , profile : UserProfile ) {
103
+ constructor ( isNewUser : boolean , profile : externs . UserProfile ) {
111
104
super (
112
105
isNewUser ,
113
- ProviderId . GITHUB ,
106
+ externs . ProviderId . GITHUB ,
114
107
profile ,
115
108
typeof profile ?. login === 'string' ? profile ?. login : null
116
109
) ;
117
110
}
118
111
}
119
112
120
- class GoogleAdditionalUserInfo extends FederatedAdditionalUserInfo {
121
- constructor ( isNewUser : boolean , profile : UserProfile ) {
122
- super ( isNewUser , ProviderId . GOOGLE , profile ) ;
113
+ class GoogleAdditionalUserInfo extends GenericAdditionalUserInfo {
114
+ constructor ( isNewUser : boolean , profile : externs . UserProfile ) {
115
+ super ( isNewUser , externs . ProviderId . GOOGLE , profile ) ;
123
116
}
124
117
}
125
118
126
119
class TwitterAdditionalUserInfo extends FederatedAdditionalUserInfoWithUsername {
127
120
constructor (
128
121
isNewUser : boolean ,
129
- profile : UserProfile ,
122
+ profile : externs . UserProfile ,
130
123
screenName : string | null
131
124
) {
132
- super ( isNewUser , ProviderId . TWITTER , profile , screenName ) ;
125
+ super ( isNewUser , externs . ProviderId . TWITTER , profile , screenName ) ;
133
126
}
134
127
}
128
+
129
+ export function getAdditionalUserInfo (
130
+ userCredential : externs . UserCredential
131
+ ) : externs . AdditionalUserInfo | null {
132
+ return _fromIdTokenResponse (
133
+ ( userCredential as UserCredential ) . _tokenResponse
134
+ ) ;
135
+ }
0 commit comments