From 6e0e329f2d7497ae378783b4f3fb6b2249b71fae Mon Sep 17 00:00:00 2001 From: Jakub Sydor Date: Thu, 30 Jun 2022 13:00:13 +0200 Subject: [PATCH] feat: extract claim expiration timestamp to separate function --- ...ims.VerifyEnrolmentPrerequisitesOptions.md | 2 +- docs/api/modules/modules_claims.md | 10 ++-- src/modules/claims/claims.service.ts | 51 ++++++++++++------- src/modules/claims/claims.types.ts | 2 +- 4 files changed, 40 insertions(+), 25 deletions(-) diff --git a/docs/api/interfaces/modules_claims.VerifyEnrolmentPrerequisitesOptions.md b/docs/api/interfaces/modules_claims.VerifyEnrolmentPrerequisitesOptions.md index dbb01675c..a80f0279e 100644 --- a/docs/api/interfaces/modules_claims.VerifyEnrolmentPrerequisitesOptions.md +++ b/docs/api/interfaces/modules_claims.VerifyEnrolmentPrerequisitesOptions.md @@ -22,7 +22,7 @@ ___ ### roleDefinition -• `Optional` **roleDefinition**: `IRoleDefinition` \| `IRoleDefinitionV2` \| `IOrganizationDefinition` \| `IAppDefinition` +• `Optional` **roleDefinition**: `IRoleDefinition` \| `IOrganizationDefinition` \| `IAppDefinition` \| `IRoleDefinitionV2` Role definition diff --git a/docs/api/modules/modules_claims.md b/docs/api/modules/modules_claims.md index f1679365d..33444d2d2 100644 --- a/docs/api/modules/modules_claims.md +++ b/docs/api/modules/modules_claims.md @@ -50,8 +50,8 @@ ### Variables - [agreement\_type\_hash](modules_claims.md#agreement_type_hash) -- [defaultClaimExpiry](modules_claims.md#defaultclaimexpiry) - [erc712\_type\_hash](modules_claims.md#erc712_type_hash) +- [eternityTimestamp](modules_claims.md#eternitytimestamp) - [proof\_type\_hash](modules_claims.md#proof_type_hash) - [typedMsgPrefix](modules_claims.md#typedmsgprefix) @@ -106,15 +106,15 @@ ___ ___ -### defaultClaimExpiry +### erc712\_type\_hash -• `Const` **defaultClaimExpiry**: `number` +• `Const` **erc712\_type\_hash**: `string` ___ -### erc712\_type\_hash +### eternityTimestamp -• `Const` **erc712\_type\_hash**: `string` +• `Const` **eternityTimestamp**: `number` ___ diff --git a/src/modules/claims/claims.service.ts b/src/modules/claims/claims.service.ts index b018b29ed..ce46cc3e8 100644 --- a/src/modules/claims/claims.service.ts +++ b/src/modules/claims/claims.service.ts @@ -4,6 +4,7 @@ import jsonwebtoken from 'jsonwebtoken'; import { v4 } from 'uuid'; import { IRoleDefinition, + IRoleDefinitionV2, PreconditionType, } from '@energyweb/credential-governance'; import { @@ -36,7 +37,7 @@ import { IClaimRejection, IClaimRequest, RegistrationTypes, - defaultClaimExpiry, + eternityTimestamp, erc712_type_hash, proof_type_hash, typedMsgPrefix, @@ -426,16 +427,13 @@ export class ClaimsService { const strippedClaimData = this.stripClaimData(claimData); const { claimType: role, claimTypeVersion: version } = claimData; - const defaultValidityPeriod = roleDefinition?.['defaultValidityPeriod']; - const roleDefinitionExpirationTimestamp = defaultValidityPeriod - ? Date.now() + defaultValidityPeriod - : undefined; - - const claimExpirationTimestamp = - expirationTimestamp || roleDefinitionExpirationTimestamp; + const claimExpirationTimestamp = this.getClaimExpirationTimestamp( + roleDefinition as IRoleDefinitionV2, + expirationTimestamp + ); if (registrationTypes.includes(RegistrationTypes.OnChain)) { - const expiry = claimExpirationTimestamp || defaultClaimExpiry; + const expiry = claimExpirationTimestamp || eternityTimestamp; const onChainProof = await this.createOnChainProof( role, version, @@ -538,7 +536,7 @@ export class ClaimsService { onChainProof, expirationTimestamp, } = claim; - const expiry = expirationTimestamp || defaultClaimExpiry; + const expiry = expirationTimestamp || eternityTimestamp; const data = this._claimManagerInterface.encodeFunctionData('register', [ addressOf(subject), namehash(claimType), @@ -643,13 +641,10 @@ export class ClaimsService { acceptedBy: this._signerService.did, }; - const defaultValidityPeriod = roleDefinition?.['defaultValidityPeriod']; - const roleDefinitionExpirationTimestamp = defaultValidityPeriod - ? Date.now() + defaultValidityPeriod - : undefined; - - const claimExpirationTimestamp = - expirationTimestamp || roleDefinitionExpirationTimestamp; + const claimExpirationTimestamp = this.getClaimExpirationTimestamp( + roleDefinition as IRoleDefinitionV2, + expirationTimestamp + ); if (registrationTypes.includes(RegistrationTypes.OffChain)) { const publicClaim: IPublicClaim = { @@ -678,7 +673,7 @@ export class ClaimsService { if (registrationTypes.includes(RegistrationTypes.OnChain)) { const { claimType: role, claimTypeVersion: version } = claim; - const expiry = claimExpirationTimestamp || defaultClaimExpiry; + const expiry = claimExpirationTimestamp || eternityTimestamp; const onChainProof = await this.createOnChainProof( role, version, @@ -1434,4 +1429,24 @@ export class ClaimsService { issuerResolver ); } + + /** + * Get claim expiration timestamp based on issuer value and role definition. + * + * @param {IRoleDefinitionV2} roleDefinition role definition + * @param {Number} [expirationTimestamp] issuer-defined expiration timestamp + * + * @return claim expiration timestamp + */ + private getClaimExpirationTimestamp( + roleDefinition: IRoleDefinitionV2, + expirationTimestamp?: number + ) { + const defaultValidityPeriod = roleDefinition?.defaultValidityPeriod; + const roleDefinitionExpirationTimestamp = defaultValidityPeriod + ? Date.now() + defaultValidityPeriod + : undefined; + + return expirationTimestamp || roleDefinitionExpirationTimestamp; + } } diff --git a/src/modules/claims/claims.types.ts b/src/modules/claims/claims.types.ts index eac45dd77..bc35c6403 100644 --- a/src/modules/claims/claims.types.ts +++ b/src/modules/claims/claims.types.ts @@ -106,7 +106,7 @@ export const agreement_type_hash = utils.id( export const proof_type_hash = utils.id( 'Proof(address subject,bytes32 role,uint256 version,uint256 expiry,address issuer)' ); -export const defaultClaimExpiry = Number.MAX_SAFE_INTEGER - 1; // constraint of ethers.BigNumber +export const eternityTimestamp = Number.MAX_SAFE_INTEGER - 1; // constraint of ethers.BigNumber export type RequestClaim = { requester: string; message: IClaimRequest }; export type IssueClaim = { issuer: string; message: IClaimIssuance };