diff --git a/docs/api/classes/modules_claims_claims_service.ClaimsService.md b/docs/api/classes/modules_claims_claims_service.ClaimsService.md index 74a450ef..b310e726 100644 --- a/docs/api/classes/modules_claims_claims_service.ClaimsService.md +++ b/docs/api/classes/modules_claims_claims_service.ClaimsService.md @@ -365,9 +365,9 @@ ___ #### Parameters -| Name | Type | -| :------ | :------ | -| `claimId` | `string` | +| Name | Type | Description | +| :------ | :------ | :------ | +| `claimId` | `string` | id of signed onchain claim | #### Returns diff --git a/docs/api/enums/errors_ErrorMessages.ERROR_MESSAGES.md b/docs/api/enums/errors_ErrorMessages.ERROR_MESSAGES.md index b16509fd..4ef1d570 100644 --- a/docs/api/enums/errors_ErrorMessages.ERROR_MESSAGES.md +++ b/docs/api/enums/errors_ErrorMessages.ERROR_MESSAGES.md @@ -8,6 +8,7 @@ - [APP\_WITH\_ROLES](errors_ErrorMessages.ERROR_MESSAGES.md#app_with_roles) - [CAN\_NOT\_UPDATE\_NOT\_CONTROLLED\_DOCUMENT](errors_ErrorMessages.ERROR_MESSAGES.md#can_not_update_not_controlled_document) +- [CLAIM\_WAS\_NOT\_ISSUED](errors_ErrorMessages.ERROR_MESSAGES.md#claim_was_not_issued) - [ENS\_TYPE\_NOT\_SUPPORTED](errors_ErrorMessages.ERROR_MESSAGES.md#ens_type_not_supported) - [ERROR\_IN\_AZURE\_PROVIDER](errors_ErrorMessages.ERROR_MESSAGES.md#error_in_azure_provider) - [INSUFFICIENT\_BALANCE](errors_ErrorMessages.ERROR_MESSAGES.md#insufficient_balance) @@ -40,6 +41,12 @@ ___ ___ +### CLAIM\_WAS\_NOT\_ISSUED + +• **CLAIM\_WAS\_NOT\_ISSUED** = `"Claim was not issued"` + +___ + ### ENS\_TYPE\_NOT\_SUPPORTED • **ENS\_TYPE\_NOT\_SUPPORTED** = `"ENS type not supported"` diff --git a/docs/api/modules/index.md b/docs/api/modules/index.md index 3a840d7d..dd7a4517 100644 --- a/docs/api/modules/index.md +++ b/docs/api/modules/index.md @@ -89,6 +89,7 @@ - [initWithMetamask](index.md#initwithmetamask) - [initWithPrivateKeySigner](index.md#initwithprivatekeysigner) - [initWithWalletConnect](index.md#initwithwalletconnect) +- [isIssuedOnchain](index.md#isissuedonchain) - [isMetamaskExtensionPresent](index.md#ismetamaskextensionpresent) - [isValidDID](index.md#isvaliddid) - [parseDID](index.md#parsedid) @@ -611,6 +612,12 @@ Re-exports: [initWithWalletConnect](init.md#initwithwalletconnect) ___ +### isIssuedOnchain + +Re-exports: [isIssuedOnchain](modules_claims_claims_types.md#isissuedonchain) + +___ + ### isMetamaskExtensionPresent Re-exports: [isMetamaskExtensionPresent](modules_signer_metamaskSigner.md#ismetamaskextensionpresent) diff --git a/docs/api/modules/modules_claims.md b/docs/api/modules/modules_claims.md index f4d3d5e6..9d98b440 100644 --- a/docs/api/modules/modules_claims.md +++ b/docs/api/modules/modules_claims.md @@ -16,6 +16,7 @@ - [agreement\_type\_hash](modules_claims.md#agreement_type_hash) - [defaultClaimExpiry](modules_claims.md#defaultclaimexpiry) - [erc712\_type\_hash](modules_claims.md#erc712_type_hash) +- [isIssuedOnchain](modules_claims.md#isissuedonchain) - [proof\_type\_hash](modules_claims.md#proof_type_hash) - [typedMsgPrefix](modules_claims.md#typedmsgprefix) @@ -93,6 +94,12 @@ Re-exports: [erc712\_type\_hash](modules_claims_claims_types.md#erc712_type_hash ___ +### isIssuedOnchain + +Re-exports: [isIssuedOnchain](modules_claims_claims_types.md#isissuedonchain) + +___ + ### proof\_type\_hash Re-exports: [proof\_type\_hash](modules_claims_claims_types.md#proof_type_hash) diff --git a/docs/api/modules/modules_claims_claims_types.md b/docs/api/modules/modules_claims_claims_types.md index 16589d08..9aaa2a88 100644 --- a/docs/api/modules/modules_claims_claims_types.md +++ b/docs/api/modules/modules_claims_claims_types.md @@ -27,6 +27,10 @@ - [proof\_type\_hash](modules_claims_claims_types.md#proof_type_hash) - [typedMsgPrefix](modules_claims_claims_types.md#typedmsgprefix) +### Functions + +- [isIssuedOnchain](modules_claims_claims_types.md#isissuedonchain) + ## Type aliases ### IssueClaim @@ -95,3 +99,19 @@ ___ ### typedMsgPrefix • `Const` **typedMsgPrefix**: ``"1901"`` + +## Functions + +### isIssuedOnchain + +▸ `Const` **isIssuedOnchain**(`claim`): claim is Required\> + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `claim` | `any` | + +#### Returns + +claim is Required\> diff --git a/src/errors/ErrorMessages.ts b/src/errors/ErrorMessages.ts index 9b628b55..bf8ce796 100644 --- a/src/errors/ErrorMessages.ts +++ b/src/errors/ErrorMessages.ts @@ -18,4 +18,5 @@ export enum ERROR_MESSAGES { NOT_AUTHORIZED_TO_CHANGE_DOMAIN = "Not authorized to change domain", ERROR_IN_AZURE_PROVIDER = "Error in Azure Provider", JWT_ALGORITHM_NOT_SUPPORTED = "Jwt algorithm not supported", + CLAIM_WAS_NOT_ISSUED = "Claim was not issued", } diff --git a/src/modules/claims/claims.service.ts b/src/modules/claims/claims.service.ts index 45873e0f..914428ff 100644 --- a/src/modules/claims/claims.service.ts +++ b/src/modules/claims/claims.service.ts @@ -32,6 +32,7 @@ import { ClaimData } from "../didRegistry/did.types"; import { isValidDID } from "../../utils/did"; import { JWT } from "@ew-did-registry/jwt"; import { privToPem, KeyType } from "@ew-did-registry/keys"; +import { isIssuedOnchain } from "."; const { id, keccak256, defaultAbiCoder, solidityKeccak256, namehash, arrayify } = utils; @@ -219,15 +220,20 @@ export class ClaimsService { /** * @description Registers issued onchain claim with Claim manager + * + * @param claimId - id of signed onchain claim */ async registerOnchain(claimId: Claim["id"]) { - const claim = (await this.getClaimById(claimId)) as Required; + const claim = await this.getClaimById(claimId); + if (!isIssuedOnchain(claim)) { + throw new Error(ERROR_MESSAGES.CLAIM_WAS_NOT_ISSUED); + } const { token, subjectAgreement, onChainProof } = claim; const { claimData, sub } = this._didRegistry.jwt.decode(token) as { claimData: { claimType: string; claimTypeVersion: number; expiry: number }; sub: string; }; - const expiry = claimData.expiry === undefined ? defaultClaimExpiry : claimData.expiry; + const expiry = defaultClaimExpiry; const { claimType: role, claimTypeVersion: version } = claimData; const data = this._claimManagerInterface.encodeFunctionData("register", [ addressOf(sub), diff --git a/src/modules/claims/claims.types.ts b/src/modules/claims/claims.types.ts index 11c3108d..90acbf1c 100644 --- a/src/modules/claims/claims.types.ts +++ b/src/modules/claims/claims.types.ts @@ -42,6 +42,35 @@ export interface Claim { namespace: string; } +export const isIssuedOnchain = ( + claim: any, +): claim is Required< + Pick< + Claim, + | "id" + | "subject" + | "claimType" + | "claimTypeVersion" + | "token" + | "subjectAgreement" + | "onChainProof" + | "isAccepted" + > +> => { + const requiredProps = [ + "id", + "subject", + "claimType", + "ClaimTypeVersion", + "token", + "subjectAgreement", + "onChainProof", + "isAccepted", + ]; + const claimProps = Object.keys(claim); + return requiredProps.every((p) => claimProps.includes(p)); +}; + export const typedMsgPrefix = "1901"; export const erc712_type_hash = utils.id( "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)",