in src/common/providers/identity.ts [57:111]
export function userRecordConstructor(wireData: Object): UserRecord {
// Falsey values from the wire format proto get lost when converted to JSON, this adds them back.
const falseyValues: any = {
email: null,
emailVerified: false,
displayName: null,
photoURL: null,
phoneNumber: null,
disabled: false,
providerData: [],
customClaims: {},
passwordSalt: null,
passwordHash: null,
tokensValidAfterTime: null,
};
const record = _.assign({}, falseyValues, wireData);
const meta = _.get(record, 'metadata');
if (meta) {
_.set(
record,
'metadata',
new UserRecordMetadata(
meta.createdAt || meta.creationTime,
meta.lastSignedInAt || meta.lastSignInTime
)
);
} else {
_.set(record, 'metadata', new UserRecordMetadata(null, null));
}
_.forEach(record.providerData, (entry) => {
_.set(entry, 'toJSON', () => {
return entry;
});
});
_.set(record, 'toJSON', () => {
const json: any = _.pick(record, [
'uid',
'email',
'emailVerified',
'displayName',
'photoURL',
'phoneNumber',
'disabled',
'passwordHash',
'passwordSalt',
'tokensValidAfterTime',
]);
json.metadata = _.get(record, 'metadata').toJSON();
json.customClaims = _.cloneDeep(record.customClaims);
json.providerData = _.map(record.providerData, (entry) => entry.toJSON());
return json;
});
return record as UserRecord;
}