From 420788f022b4932937b7b4fec501956d52a1c53d Mon Sep 17 00:00:00 2001 From: Gianluca Spada Date: Mon, 17 Feb 2025 17:54:07 +0100 Subject: [PATCH 1/4] chore: increase getCredentialStatus expiring days to 30 --- .../itwCredentialStatusUtils.test.ts | 44 ++++++++++++------- .../common/utils/itwCredentialStatusUtils.ts | 2 +- 2 files changed, 30 insertions(+), 16 deletions(-) diff --git a/ts/features/itwallet/common/utils/__tests__/itwCredentialStatusUtils.test.ts b/ts/features/itwallet/common/utils/__tests__/itwCredentialStatusUtils.test.ts index b0a81d07903..7032148e2f1 100644 --- a/ts/features/itwallet/common/utils/__tests__/itwCredentialStatusUtils.test.ts +++ b/ts/features/itwallet/common/utils/__tests__/itwCredentialStatusUtils.test.ts @@ -3,6 +3,10 @@ import { getCredentialStatus } from "../itwCredentialStatusUtils"; import { ItwStoredCredentialsMocks } from "../itwMocksUtils"; import { StoredCredential } from "../itwTypesUtils"; +const options: Parameters[1] = { + expiringDays: 14 +}; + describe("getCredentialStatus", () => { afterEach(() => { MockDate.reset(); @@ -26,7 +30,7 @@ describe("getCredentialStatus", () => { storedStatusAttestation: { credentialStatus: "invalid" } }; - expect(getCredentialStatus(mockCredential)).toEqual("expired"); + expect(getCredentialStatus(mockCredential, options)).toEqual("expired"); }); it("should return the digital document expired status", () => { @@ -47,7 +51,9 @@ describe("getCredentialStatus", () => { storedStatusAttestation: { credentialStatus: "valid" } }; - expect(getCredentialStatus(mockCredential)).toEqual("jwtExpired"); + expect(getCredentialStatus(mockCredential, options)).toEqual( + "jwtExpired" + ); }); // Physical document wins @@ -68,7 +74,7 @@ describe("getCredentialStatus", () => { storedStatusAttestation: { credentialStatus: "invalid" } }; - expect(getCredentialStatus(mockCredential)).toEqual("expired"); + expect(getCredentialStatus(mockCredential, options)).toEqual("expired"); }); it("should return jwtExpired when only JWT data are available", () => { @@ -81,7 +87,9 @@ describe("getCredentialStatus", () => { } }; - expect(getCredentialStatus(mockCredential)).toEqual("jwtExpired"); + expect(getCredentialStatus(mockCredential, options)).toEqual( + "jwtExpired" + ); }); }); @@ -104,7 +112,7 @@ describe("getCredentialStatus", () => { storedStatusAttestation: { credentialStatus: "valid" } }; - expect(getCredentialStatus(mockCredential)).toEqual("expiring"); + expect(getCredentialStatus(mockCredential, options)).toEqual("expiring"); }); it("should return the digital document expiring status", () => { @@ -125,7 +133,9 @@ describe("getCredentialStatus", () => { storedStatusAttestation: { credentialStatus: "valid" } }; - expect(getCredentialStatus(mockCredential)).toEqual("jwtExpiring"); + expect(getCredentialStatus(mockCredential, options)).toEqual( + "jwtExpiring" + ); }); // Digital document wins @@ -147,7 +157,9 @@ describe("getCredentialStatus", () => { storedStatusAttestation: { credentialStatus: "valid" } }; - expect(getCredentialStatus(mockCredential)).toEqual("jwtExpiring"); + expect(getCredentialStatus(mockCredential, options)).toEqual( + "jwtExpiring" + ); }); // Physical document wins @@ -169,7 +181,7 @@ describe("getCredentialStatus", () => { storedStatusAttestation: { credentialStatus: "valid" } }; - expect(getCredentialStatus(mockCredential)).toEqual("expiring"); + expect(getCredentialStatus(mockCredential, options)).toEqual("expiring"); }); it("should return jwtExpiring when only JWT data are available", () => { @@ -182,7 +194,9 @@ describe("getCredentialStatus", () => { } }; - expect(getCredentialStatus(mockCredential)).toEqual("jwtExpiring"); + expect(getCredentialStatus(mockCredential, options)).toEqual( + "jwtExpiring" + ); }); }); @@ -204,7 +218,7 @@ describe("getCredentialStatus", () => { storedStatusAttestation: { credentialStatus: "invalid" } }; - expect(getCredentialStatus(mockCredential)).toEqual("invalid"); + expect(getCredentialStatus(mockCredential, options)).toEqual("invalid"); }); it("should return the physical document invalid status over any digital document status", () => { @@ -224,7 +238,7 @@ describe("getCredentialStatus", () => { storedStatusAttestation: { credentialStatus: "invalid" } }; - expect(getCredentialStatus(mockCredential)).toEqual("invalid"); + expect(getCredentialStatus(mockCredential, options)).toEqual("invalid"); }); }); @@ -247,7 +261,7 @@ describe("getCredentialStatus", () => { storedStatusAttestation: { credentialStatus: "valid" } }; - expect(getCredentialStatus(mockCredential)).toEqual("valid"); + expect(getCredentialStatus(mockCredential, options)).toEqual("valid"); }); it("should return valid when the credential does not have an expiration date and it is not invalid for other reasons", () => { @@ -268,7 +282,7 @@ describe("getCredentialStatus", () => { storedStatusAttestation: { credentialStatus: "valid" } }; - expect(getCredentialStatus(mockCredential)).toEqual("valid"); + expect(getCredentialStatus(mockCredential, options)).toEqual("valid"); }); it("should return valid when only JWT data are available", () => { @@ -281,7 +295,7 @@ describe("getCredentialStatus", () => { } }; - expect(getCredentialStatus(mockCredential)).toEqual("valid"); + expect(getCredentialStatus(mockCredential, options)).toEqual("valid"); }); }); @@ -293,7 +307,7 @@ describe("getCredentialStatus", () => { credentialStatus: "unknown" } }; - expect(getCredentialStatus(mockCredential)).toEqual("unknown"); + expect(getCredentialStatus(mockCredential, options)).toEqual("unknown"); }); }); }); diff --git a/ts/features/itwallet/common/utils/itwCredentialStatusUtils.ts b/ts/features/itwallet/common/utils/itwCredentialStatusUtils.ts index 9aff0b4fc1d..0c12057ec20 100644 --- a/ts/features/itwallet/common/utils/itwCredentialStatusUtils.ts +++ b/ts/features/itwallet/common/utils/itwCredentialStatusUtils.ts @@ -25,7 +25,7 @@ export const getCredentialStatus = ( credential: StoredCredential, options: GetCredentialStatusOptions = {} ): ItwCredentialStatus => { - const { expiringDays = 14 } = options; + const { expiringDays = 30 } = options; const { jwt, parsedCredential, From c3405610ba252ba09c257730178b5613d84c5780 Mon Sep 17 00:00:00 2001 From: Gianluca Spada Date: Tue, 18 Feb 2025 09:03:43 +0100 Subject: [PATCH 2/4] chore: keep eID expiring days to 14 --- .../itwallet/common/utils/itwCredentialStatusUtils.ts | 5 ++++- ts/features/itwallet/credentials/store/selectors/index.ts | 8 +++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/ts/features/itwallet/common/utils/itwCredentialStatusUtils.ts b/ts/features/itwallet/common/utils/itwCredentialStatusUtils.ts index 0c12057ec20..748a4e11ad6 100644 --- a/ts/features/itwallet/common/utils/itwCredentialStatusUtils.ts +++ b/ts/features/itwallet/common/utils/itwCredentialStatusUtils.ts @@ -5,9 +5,12 @@ import * as O from "fp-ts/lib/Option"; import { getCredentialExpireDate } from "./itwClaimsUtils"; import { ItwCredentialStatus, StoredCredential } from "./itwTypesUtils"; +const DEFAULT_EXPIRING_DAYS = 30; + type GetCredentialStatusOptions = { /** * Number of days before expiration required to mark a credential as "EXPIRING". + * @default 30 */ expiringDays?: number; }; @@ -25,7 +28,7 @@ export const getCredentialStatus = ( credential: StoredCredential, options: GetCredentialStatusOptions = {} ): ItwCredentialStatus => { - const { expiringDays = 30 } = options; + const { expiringDays = DEFAULT_EXPIRING_DAYS } = options; const { jwt, parsedCredential, diff --git a/ts/features/itwallet/credentials/store/selectors/index.ts b/ts/features/itwallet/credentials/store/selectors/index.ts index fa3c1e403ca..754a029eba4 100644 --- a/ts/features/itwallet/credentials/store/selectors/index.ts +++ b/ts/features/itwallet/credentials/store/selectors/index.ts @@ -14,6 +14,7 @@ import { } from "../../../common/utils/itwCredentialStatusUtils"; import { CredentialType } from "../../../common/utils/itwMocksUtils"; import { + ItwCredentialStatus, ItwJwtCredentialStatus, StoredCredential } from "../../../common/utils/itwTypesUtils"; @@ -126,7 +127,12 @@ export const itwCredentialsEidStatusSelector = createSelector( pipe( eidOption, // eID does not have status attestation nor expiry date, so it safe to assume its status is based on the JWT only - O.map(eid => getCredentialStatus(eid) as ItwJwtCredentialStatus), + O.map( + eid => + getCredentialStatus(eid, { + expiringDays: 14 + }) as ItwJwtCredentialStatus + ), O.toUndefined ) ); From d9c6fa34b4b1a06014ad1fe852c580d8bfc0d886 Mon Sep 17 00:00:00 2001 From: Gianluca Spada Date: Tue, 18 Feb 2025 09:05:08 +0100 Subject: [PATCH 3/4] chore: remove unused import --- ts/features/itwallet/credentials/store/selectors/index.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/ts/features/itwallet/credentials/store/selectors/index.ts b/ts/features/itwallet/credentials/store/selectors/index.ts index 754a029eba4..35ae78516cc 100644 --- a/ts/features/itwallet/credentials/store/selectors/index.ts +++ b/ts/features/itwallet/credentials/store/selectors/index.ts @@ -14,7 +14,6 @@ import { } from "../../../common/utils/itwCredentialStatusUtils"; import { CredentialType } from "../../../common/utils/itwMocksUtils"; import { - ItwCredentialStatus, ItwJwtCredentialStatus, StoredCredential } from "../../../common/utils/itwTypesUtils"; From 9545ab25f738e3f3d3c0cdf81ca72357e321a145 Mon Sep 17 00:00:00 2001 From: Gianluca Spada Date: Tue, 18 Feb 2025 10:16:46 +0100 Subject: [PATCH 4/4] chore: set eID expiring notification to 30 days --- ts/features/itwallet/credentials/store/selectors/index.ts | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/ts/features/itwallet/credentials/store/selectors/index.ts b/ts/features/itwallet/credentials/store/selectors/index.ts index 35ae78516cc..fa3c1e403ca 100644 --- a/ts/features/itwallet/credentials/store/selectors/index.ts +++ b/ts/features/itwallet/credentials/store/selectors/index.ts @@ -126,12 +126,7 @@ export const itwCredentialsEidStatusSelector = createSelector( pipe( eidOption, // eID does not have status attestation nor expiry date, so it safe to assume its status is based on the JWT only - O.map( - eid => - getCredentialStatus(eid, { - expiringDays: 14 - }) as ItwJwtCredentialStatus - ), + O.map(eid => getCredentialStatus(eid) as ItwJwtCredentialStatus), O.toUndefined ) );