From 6f91132d62061c90920e19ed46ebbcd413ef73cf Mon Sep 17 00:00:00 2001 From: Hiranya Jayathilaka Date: Tue, 6 Apr 2021 14:09:11 -0700 Subject: [PATCH 1/2] fix(auth): Making UserMetadata.lastRefreshTime field optional --- etc/firebase-admin.auth.api.md | 2 +- src/auth/user-record.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/etc/firebase-admin.auth.api.md b/etc/firebase-admin.auth.api.md index 768cd26b8a..2c463873dc 100644 --- a/etc/firebase-admin.auth.api.md +++ b/etc/firebase-admin.auth.api.md @@ -394,7 +394,7 @@ export class UserInfo { // @public export class UserMetadata { readonly creationTime: string; - readonly lastRefreshTime: string | null; + readonly lastRefreshTime?: string | null; readonly lastSignInTime: string; toJSON(): object; } diff --git a/src/auth/user-record.ts b/src/auth/user-record.ts index 86dadc07f9..48893c966d 100644 --- a/src/auth/user-record.ts +++ b/src/auth/user-record.ts @@ -304,7 +304,7 @@ export class UserMetadata { * formatted as a UTC Date string (eg 'Sat, 03 Feb 2001 04:05:06 GMT'). * Returns null if the user was never active. */ - public readonly lastRefreshTime: string | null; + public readonly lastRefreshTime?: string | null; /** * @param response The server side response returned from the getAccountInfo From 8fe9502c822dd8fafd92d0fb17effc70cc1e639c Mon Sep 17 00:00:00 2001 From: Hiranya Jayathilaka Date: Tue, 6 Apr 2021 14:37:28 -0700 Subject: [PATCH 2/2] fix(auth): Fixing the toJSON signature on MultiFactorSettings --- etc/firebase-admin.auth.api.md | 2 +- src/auth/user-record.ts | 3 ++- test/unit/auth/user-record.spec.ts | 9 +++++++++ 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/etc/firebase-admin.auth.api.md b/etc/firebase-admin.auth.api.md index 2c463873dc..82ac60b019 100644 --- a/etc/firebase-admin.auth.api.md +++ b/etc/firebase-admin.auth.api.md @@ -195,7 +195,7 @@ export abstract class MultiFactorInfo { // @public export class MultiFactorSettings { enrolledFactors: MultiFactorInfo[]; - toJSON(): any; + toJSON(): object; } // @public diff --git a/src/auth/user-record.ts b/src/auth/user-record.ts index 48893c966d..da55540b56 100644 --- a/src/auth/user-record.ts +++ b/src/auth/user-record.ts @@ -78,6 +78,7 @@ export interface GetAccountInfoUserResponse { mfaInfo?: MultiFactorInfoResponse[]; createdAt?: string; lastLoginAt?: string; + lastRefreshAt?: string; [key: string]: any; } @@ -277,7 +278,7 @@ export class MultiFactorSettings { /** * @return A JSON-serializable representation of this multi-factor object. */ - public toJSON(): any { + public toJSON(): object { return { enrolledFactors: this.enrolledFactors.map((info) => info.toJSON()), }; diff --git a/test/unit/auth/user-record.spec.ts b/test/unit/auth/user-record.spec.ts index 2e1e3286c9..cca0af6185 100644 --- a/test/unit/auth/user-record.spec.ts +++ b/test/unit/auth/user-record.spec.ts @@ -685,6 +685,15 @@ describe('UserMetadata', () => { it('should return expected lastRefreshTime', () => { expect(actualMetadata.lastRefreshTime).to.equal(new Date(expectedLastRefreshAt).toUTCString()) }); + + it('should return null when lastRefreshTime is not available', () => { + const metadata: UserMetadata = new UserMetadata({ + localId: 'uid123', + lastLoginAt: expectedLastLoginAt.toString(), + createdAt: expectedCreatedAt.toString(), + }); + expect(metadata.lastRefreshTime).to.be.null; + }); }); describe('toJSON', () => {