Skip to content

Commit 88fd2ad

Browse files
committed
Expose additionalUserInfo in auth-exp and auth-compat-exp
1 parent 3ff1898 commit 88fd2ad

File tree

5 files changed

+42
-44
lines changed

5 files changed

+42
-44
lines changed

packages-exp/auth-compat-exp/src/user_credential.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ import * as compat from '@firebase/auth-types';
2020
import * as externs from '@firebase/auth-types-exp';
2121
import '@firebase/installations';
2222
import { User } from './user';
23-
import { FirebaseError } from '@firebase/util';
2423

2524
function credentialFromResponse(
2625
userCredential: impl.UserCredential
@@ -107,6 +106,7 @@ export async function convertCredential(
107106
return {
108107
operationType,
109108
credential: credentialFromResponse(credential as impl.UserCredential),
109+
additionalUserInfo: impl.getAdditionalUserInfo(credential as impl.UserCredential),
110110
user: user as User
111111
};
112112
}

packages-exp/auth-exp/src/core/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@ export {
107107
} from './user/account_info';
108108
export { getIdToken, getIdTokenResult } from './user/id_token_result';
109109
export { unlink } from './user/link_unlink';
110+
export { getAdditionalUserInfo } from './user/additional_user_info';
110111

111112
// Non-optional user methods.
112113
export { reload } from './user/reload';

packages-exp/auth-exp/src/core/user/additional_user_info.ts

Lines changed: 38 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -14,20 +14,21 @@
1414
* See the License for the specific language governing permissions and
1515
* limitations under the License.
1616
*/
17-
import {
18-
AdditionalUserInfo,
19-
UserProfile,
20-
ProviderId
21-
} from '@firebase/auth-types-exp';
17+
18+
import * as externs from '@firebase/auth-types-exp';
2219
import { IdTokenResponse, IdTokenResponseKind } from '../../model/id_token';
2320
import { _parseToken } from './id_token_result';
21+
import { UserCredential } from '../../model/user';
2422

2523
/**
2624
* Parse the `AdditionalUserInfo` from the ID token response.
2725
*/
2826
export function _fromIdTokenResponse(
29-
idTokenResponse: IdTokenResponse
30-
): AdditionalUserInfo | null {
27+
idTokenResponse?: IdTokenResponse
28+
): externs.AdditionalUserInfo | null {
29+
if (!idTokenResponse) {
30+
return null;
31+
}
3132
const { providerId } = idTokenResponse;
3233
const profile = idTokenResponse.rawUserInfo
3334
? JSON.parse(idTokenResponse.rawUserInfo)
@@ -41,8 +42,8 @@ export function _fromIdTokenResponse(
4142
];
4243
if (signInProvider) {
4344
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)
4647
: null;
4748
// Uses generic class in accordance with the legacy SDK.
4849
return new GenericAdditionalUserInfo(isNewUser, filteredProviderId);
@@ -52,83 +53,79 @@ export function _fromIdTokenResponse(
5253
return null;
5354
}
5455
switch (providerId) {
55-
case ProviderId.FACEBOOK:
56+
case externs.ProviderId.FACEBOOK:
5657
return new FacebookAdditionalUserInfo(isNewUser, profile);
57-
case ProviderId.GITHUB:
58+
case externs.ProviderId.GITHUB:
5859
return new GithubAdditionalUserInfo(isNewUser, profile);
59-
case ProviderId.GOOGLE:
60+
case externs.ProviderId.GOOGLE:
6061
return new GoogleAdditionalUserInfo(isNewUser, profile);
61-
case ProviderId.TWITTER:
62+
case externs.ProviderId.TWITTER:
6263
return new TwitterAdditionalUserInfo(
6364
isNewUser,
6465
profile,
6566
idTokenResponse.screenName || null
6667
);
67-
case ProviderId.CUSTOM:
68-
case ProviderId.ANONYMOUS:
68+
case externs.ProviderId.CUSTOM:
69+
case externs.ProviderId.ANONYMOUS:
6970
return new GenericAdditionalUserInfo(isNewUser, null);
7071
default:
71-
return new FederatedAdditionalUserInfo(isNewUser, providerId, profile);
72+
return new GenericAdditionalUserInfo(isNewUser, providerId, profile);
7273
}
7374
}
7475

75-
class GenericAdditionalUserInfo implements AdditionalUserInfo {
76+
class GenericAdditionalUserInfo implements externs.AdditionalUserInfo {
7677
constructor(
7778
readonly isNewUser: boolean,
78-
readonly providerId: ProviderId | null
79+
readonly providerId: externs.ProviderId | null,
80+
readonly profile: externs.UserProfile = {}
7981
) {}
8082
}
8183

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 {
9385
constructor(
9486
isNewUser: boolean,
95-
providerId: ProviderId,
96-
profile: UserProfile,
87+
providerId: externs.ProviderId,
88+
profile: externs.UserProfile,
9789
readonly username: string | null
9890
) {
9991
super(isNewUser, providerId, profile);
10092
}
10193
}
10294

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);
10698
}
10799
}
108100

109101
class GithubAdditionalUserInfo extends FederatedAdditionalUserInfoWithUsername {
110-
constructor(isNewUser: boolean, profile: UserProfile) {
102+
constructor(isNewUser: boolean, profile: externs.UserProfile) {
111103
super(
112104
isNewUser,
113-
ProviderId.GITHUB,
105+
externs.ProviderId.GITHUB,
114106
profile,
115107
typeof profile?.login === 'string' ? profile?.login : null
116108
);
117109
}
118110
}
119111

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);
123115
}
124116
}
125117

126118
class TwitterAdditionalUserInfo extends FederatedAdditionalUserInfoWithUsername {
127119
constructor(
128120
isNewUser: boolean,
129-
profile: UserProfile,
121+
profile: externs.UserProfile,
130122
screenName: string | null
131123
) {
132-
super(isNewUser, ProviderId.TWITTER, profile, screenName);
124+
super(isNewUser, externs.ProviderId.TWITTER, profile, screenName);
133125
}
134126
}
127+
128+
export function getAdditionalUserInfo(
129+
userCredential: externs.UserCredential): externs.AdditionalUserInfo | null {
130+
return _fromIdTokenResponse((userCredential as UserCredential)._tokenResponse);
131+
}

packages-exp/auth-types-exp/index.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -474,7 +474,7 @@ export interface UserMetadata {
474474
*/
475475
export interface AdditionalUserInfo {
476476
readonly isNewUser: boolean;
477-
readonly profile?: UserProfile;
477+
readonly profile: UserProfile | null;
478478
readonly providerId: ProviderId | null;
479479
readonly username?: string | null;
480480
}

packages/auth-types/index.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ export type ActionCodeSettings = {
135135
export type AdditionalUserInfo = {
136136
isNewUser: boolean;
137137
profile: Object | null;
138-
providerId: string;
138+
providerId: string | null;
139139
username?: string | null;
140140
};
141141

0 commit comments

Comments
 (0)