From 0e1fafa417addaa3aba725224772f38e8212a063 Mon Sep 17 00:00:00 2001 From: JGiter Date: Mon, 12 Sep 2022 12:15:41 +0300 Subject: [PATCH] refactor(claims): merge ClaimData with vc-verification --- .../classes/modules_claims.ClaimsService.md | 6 +- ...odules_claims.CreateClaimRequestOptions.md | 14 +---- ...les_claims.CreateSelfSignedClaimOptions.md | 2 +- .../modules_did_registry.ClaimData.md | 14 ----- ...s_did_registry.CreatePublicClaimOptions.md | 2 +- docs/api/modules/modules_did_registry.md | 20 +++++++ e2e/cache-client.e2e.ts | 7 ++- e2e/claims.service.e2e.ts | 11 ++-- package-lock.json | 58 +++++++++---------- package.json | 6 +- src/modules/claims/claims.service.ts | 19 +++--- src/modules/claims/claims.types.ts | 11 +--- src/modules/did-registry/did.types.ts | 22 +++++-- 13 files changed, 98 insertions(+), 94 deletions(-) diff --git a/docs/api/classes/modules_claims.ClaimsService.md b/docs/api/classes/modules_claims.ClaimsService.md index 59f29f48..20160209 100644 --- a/docs/api/classes/modules_claims.ClaimsService.md +++ b/docs/api/classes/modules_claims.ClaimsService.md @@ -299,7 +299,7 @@ Generates claim id or returns id of existing claim with same data | Name | Type | | :------ | :------ | | `__namedParameters` | `Object` | -| `__namedParameters.claimData` | [`ClaimData`](../interfaces/modules_did_registry.ClaimData.md) | +| `__namedParameters.claimData` | `ClaimData` | #### Returns @@ -472,7 +472,7 @@ ___ ### getUserClaims -▸ **getUserClaims**(`options`): `Promise`<`IServiceEndpoint` & [`ClaimData`](../interfaces/modules_did_registry.ClaimData.md)[]\> +▸ **getUserClaims**(`options`): `Promise`<`IServiceEndpoint` & `Pick`<`ClaimData`, ``"claimType"`` \| ``"claimTypeVersion"``\>[]\> Get published off-chain claims of the given subject. @@ -490,7 +490,7 @@ claimsService.getUserClaims({ #### Returns -`Promise`<`IServiceEndpoint` & [`ClaimData`](../interfaces/modules_did_registry.ClaimData.md)[]\> +`Promise`<`IServiceEndpoint` & `Pick`<`ClaimData`, ``"claimType"`` \| ``"claimTypeVersion"``\>[]\> Claims containing DID document service endpoints diff --git a/docs/api/interfaces/modules_claims.CreateClaimRequestOptions.md b/docs/api/interfaces/modules_claims.CreateClaimRequestOptions.md index fe1533fa..c8c9d003 100644 --- a/docs/api/interfaces/modules_claims.CreateClaimRequestOptions.md +++ b/docs/api/interfaces/modules_claims.CreateClaimRequestOptions.md @@ -6,26 +6,18 @@ ### Properties -- [claim](modules_claims.CreateClaimRequestOptions.md#claim) +- [claimData](modules_claims.CreateClaimRequestOptions.md#claimdata) - [registrationTypes](modules_claims.CreateClaimRequestOptions.md#registrationtypes) - [subject](modules_claims.CreateClaimRequestOptions.md#subject) ## Properties -### claim +### claimData -• **claim**: `Object` +• **claimData**: `ClaimData` Claim request params -#### Type declaration - -| Name | Type | Description | -| :------ | :------ | :------ | -| `claimType` | `string` | Role namespace | -| `claimTypeVersion` | `number` | Version of the role | -| `requestorFields?` | { `key`: `string` ; `value`: `string` \| `number` }[] | Requestor fields that role is requiring | - ___ ### registrationTypes diff --git a/docs/api/interfaces/modules_claims.CreateSelfSignedClaimOptions.md b/docs/api/interfaces/modules_claims.CreateSelfSignedClaimOptions.md index abc35a11..62fe64f0 100644 --- a/docs/api/interfaces/modules_claims.CreateSelfSignedClaimOptions.md +++ b/docs/api/interfaces/modules_claims.CreateSelfSignedClaimOptions.md @@ -13,7 +13,7 @@ ### data -• **data**: [`ClaimData`](modules_did_registry.ClaimData.md) +• **data**: `ClaimData` Claim data diff --git a/docs/api/interfaces/modules_did_registry.ClaimData.md b/docs/api/interfaces/modules_did_registry.ClaimData.md index 94081742..5e71718f 100644 --- a/docs/api/interfaces/modules_did_registry.ClaimData.md +++ b/docs/api/interfaces/modules_did_registry.ClaimData.md @@ -12,25 +12,11 @@ ### Properties -- [claimType](modules_did_registry.ClaimData.md#claimtype) -- [claimTypeVersion](modules_did_registry.ClaimData.md#claimtypeversion) - [issuerFields](modules_did_registry.ClaimData.md#issuerfields) - [profile](modules_did_registry.ClaimData.md#profile) ## Properties -### claimType - -• `Optional` **claimType**: `string` - -___ - -### claimTypeVersion - -• `Optional` **claimTypeVersion**: `number` - -___ - ### issuerFields • `Optional` **issuerFields**: { `key`: `string` ; `value`: `string` \| `number` }[] diff --git a/docs/api/interfaces/modules_did_registry.CreatePublicClaimOptions.md b/docs/api/interfaces/modules_did_registry.CreatePublicClaimOptions.md index 6d042e90..05fa2d3e 100644 --- a/docs/api/interfaces/modules_did_registry.CreatePublicClaimOptions.md +++ b/docs/api/interfaces/modules_did_registry.CreatePublicClaimOptions.md @@ -13,7 +13,7 @@ ### data -• **data**: [`ClaimData`](modules_did_registry.ClaimData.md) +• **data**: `Record`<`string`, `unknown`\> ___ diff --git a/docs/api/modules/modules_did_registry.md b/docs/api/modules/modules_did_registry.md index 80e057e5..966c9252 100644 --- a/docs/api/modules/modules_did_registry.md +++ b/docs/api/modules/modules_did_registry.md @@ -25,3 +25,23 @@ - [UpdateSignedDidDelegateOptions](../interfaces/modules_did_registry.UpdateSignedDidDelegateOptions.md) - [UpdateSignedDidPublicKeyOptions](../interfaces/modules_did_registry.UpdateSignedDidPublicKeyOptions.md) - [ValidDateUpdateDocumentRequestOptions](../interfaces/modules_did_registry.ValidDateUpdateDocumentRequestOptions.md) + +### Functions + +- [isClaimService](modules_did_registry.md#isclaimservice) + +## Functions + +### isClaimService + +▸ **isClaimService**(`service`): service is IServiceEndpoint & Pick + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `service` | `IServiceEndpoint` | + +#### Returns + +service is IServiceEndpoint & Pick diff --git a/e2e/cache-client.e2e.ts b/e2e/cache-client.e2e.ts index e3231ef5..aba4a33e 100644 --- a/e2e/cache-client.e2e.ts +++ b/e2e/cache-client.e2e.ts @@ -1,4 +1,4 @@ -import { initWithPrivateKeySigner, setCacheConfig } from '../src'; +import { ClaimData, initWithPrivateKeySigner, setCacheConfig } from '../src'; import { shutDownIpfsDaemon, spawnIpfsDaemon } from './utils/setup-ipfs'; const rpcUrl = 'https://volta-rpc.energyweb.org'; @@ -11,7 +11,10 @@ describe.skip('Cache client', () => { cacheServerSupportsAuth: true, }); - const metadata = { meterId: 'SolarM' }; + const metadata: ClaimData = { + claimType: 'SolarM', + claimTypeVersion: 1, + }; const { connectToCacheServer } = await initWithPrivateKeySigner( privateKey, diff --git a/e2e/claims.service.e2e.ts b/e2e/claims.service.e2e.ts index 4ed0ad3c..1cc48e4e 100644 --- a/e2e/claims.service.e2e.ts +++ b/e2e/claims.service.e2e.ts @@ -495,7 +495,8 @@ describe('Сlaim tests', () => { requestorFields, }); - expirationTimestamp && expect(exp).toEqual(Math.floor(expirationTimestamp / 1000)); + expirationTimestamp && + expect(exp).toEqual(Math.floor(expirationTimestamp / 1000)); expect(claimData).not.toContain({ fields: [{ key: 'temperature', value: 36 }], @@ -1048,7 +1049,6 @@ describe('Сlaim tests', () => { claim: { claimType: `${roleName1}.${root}`, claimTypeVersion: version, - requestorFields: [], }, registrationTypes, }); @@ -1281,7 +1281,10 @@ describe('Сlaim tests', () => { describe('Selfsigned claim tests', () => { test('Selfsigned claim should be verified', async () => { const claimUrl = await claimsService.createSelfSignedClaim({ - data: { claimType: roleName1 }, + data: { + claimType: roleName1, + claimTypeVersion: 1, + }, subject: rootOwnerDID, }); const claim = await didRegistry.ipfsStore.get(claimUrl); @@ -1304,7 +1307,7 @@ describe('Сlaim tests', () => { ]); const claimType = 'test claim'; const claimUrl = await claimsService.createSelfSignedClaim({ - data: { claimType }, + data: { claimType, claimTypeVersion: 1 }, subject: assetDID, }); const claim = await didRegistry.ipfsStore.get(claimUrl); diff --git a/package-lock.json b/package-lock.json index 3db8530a..3d4331af 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,19 +1,19 @@ { "name": "iam-client-lib", - "version": "6.1.0", + "version": "6.2.1-alpha.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "iam-client-lib", - "version": "6.1.0", + "version": "6.2.1-alpha.1", "license": "GPL-3.0-or-later", "dependencies": { - "@energyweb/credential-governance": "^2.2.1-alpha.293.0", + "@energyweb/credential-governance": "^2.2.1-alpha.295.0", "@energyweb/ekc": "^0.6.7", - "@energyweb/onchain-claims": "^2.2.1-alpha.293.0", + "@energyweb/onchain-claims": "^2.2.1-alpha.295.0", "@energyweb/staking-pool": "^1.0.0-rc.14", - "@energyweb/vc-verification": "^2.2.1-alpha.293.0", + "@energyweb/vc-verification": "^2.2.1-alpha.295.0", "@ensdomains/ens": "^0.6.2", "@ew-did-registry/claims": "0.7.1-alpha.816.0", "@ew-did-registry/credentials-interface": "0.7.1-alpha.816.0", @@ -1942,9 +1942,9 @@ } }, "node_modules/@energyweb/credential-governance": { - "version": "2.2.1-alpha.293.0", - "resolved": "https://registry.npmjs.org/@energyweb/credential-governance/-/credential-governance-2.2.1-alpha.293.0.tgz", - "integrity": "sha512-ABOyQkZ3FOyhdiNLnaXhjop3POonYbrODWeQDIrgtWDfelc2eCp1eTY37QFOakPlwhqD4kp4th6GvNR5eUKppA==", + "version": "2.2.1-alpha.295.0", + "resolved": "https://registry.npmjs.org/@energyweb/credential-governance/-/credential-governance-2.2.1-alpha.295.0.tgz", + "integrity": "sha512-4jhiEVoOkbQLZ2D6Wl5L6SCEurz8BX14Ljy48a7wj6O66/0ozAOpkwRX2HD/nrZ/GUTOkR1Mus8GuKivwMjXaw==", "dependencies": { "@ew-did-registry/credentials-interface": "^0.7.1-alpha.795.0", "@ew-did-registry/did": "^0.7.1-alpha.795.0", @@ -1973,11 +1973,11 @@ } }, "node_modules/@energyweb/onchain-claims": { - "version": "2.2.1-alpha.293.0", - "resolved": "https://registry.npmjs.org/@energyweb/onchain-claims/-/onchain-claims-2.2.1-alpha.293.0.tgz", - "integrity": "sha512-XjNCbtBA9Iu1XFkQCJn6+61Y3opJT7mNITSgLzDXMNoA8tPstg08z/i2BLZgTsXlgYgurO9S58auHeEOUM0PkQ==", + "version": "2.2.1-alpha.295.0", + "resolved": "https://registry.npmjs.org/@energyweb/onchain-claims/-/onchain-claims-2.2.1-alpha.295.0.tgz", + "integrity": "sha512-ivTRGVniMuOjiVSjsMhmJNJJeafrNqnRjVqDCcAOhRTg6pIOLxHWTdST93YX+KnhKzruWTeha0gHAXsCsQG9oQ==", "dependencies": { - "@energyweb/credential-governance": "2.2.1-alpha.293.0", + "@energyweb/credential-governance": "2.2.1-alpha.295.0", "@ew-did-registry/did": "^0.7.1-alpha.795.0", "@ew-did-registry/did-ethr-resolver": "^0.7.1-alpha.795.0", "@poanet/solidity-flattener": "^3.0.7", @@ -2015,12 +2015,12 @@ "integrity": "sha512-+cNYvQwTKFMbKVqvVHGzcZbW+z1/pKTyQIYDDC3PaX5L0NAOshI/ZXAsrZRqp/6xEdWsm9f6u549ZLvCEUgNLw==" }, "node_modules/@energyweb/vc-verification": { - "version": "2.2.1-alpha.293.0", - "resolved": "https://registry.npmjs.org/@energyweb/vc-verification/-/vc-verification-2.2.1-alpha.293.0.tgz", - "integrity": "sha512-0ZmeFmrdncLTysX4w7VDQK7dnK/ctqWUK6rHiLJR/Qzw7sFtH52TX3O4o7hm9zFSSb41ETRVsdMhBi7+Yvfgdw==", + "version": "2.2.1-alpha.295.0", + "resolved": "https://registry.npmjs.org/@energyweb/vc-verification/-/vc-verification-2.2.1-alpha.295.0.tgz", + "integrity": "sha512-WLmFEYTCraGfT9jjAalLT+NBXHUAkCCvXmWFCTxGMmw9zQSNS9vVFOv8NOEfYEzm91Tf0EG1QNcaUZQXAH6TKg==", "dependencies": { - "@energyweb/credential-governance": "2.2.1-alpha.293.0", - "@energyweb/onchain-claims": "2.2.1-alpha.293.0", + "@energyweb/credential-governance": "2.2.1-alpha.295.0", + "@energyweb/onchain-claims": "2.2.1-alpha.295.0", "@ew-did-registry/claims": "^0.7.1-alpha.795.0", "@ew-did-registry/credentials-interface": "^0.7.1-alpha.795.0", "@ew-did-registry/did-ethr-resolver": "^0.7.1-alpha.795.0", @@ -38276,9 +38276,9 @@ } }, "@energyweb/credential-governance": { - "version": "2.2.1-alpha.293.0", - "resolved": "https://registry.npmjs.org/@energyweb/credential-governance/-/credential-governance-2.2.1-alpha.293.0.tgz", - "integrity": "sha512-ABOyQkZ3FOyhdiNLnaXhjop3POonYbrODWeQDIrgtWDfelc2eCp1eTY37QFOakPlwhqD4kp4th6GvNR5eUKppA==", + "version": "2.2.1-alpha.295.0", + "resolved": "https://registry.npmjs.org/@energyweb/credential-governance/-/credential-governance-2.2.1-alpha.295.0.tgz", + "integrity": "sha512-4jhiEVoOkbQLZ2D6Wl5L6SCEurz8BX14Ljy48a7wj6O66/0ozAOpkwRX2HD/nrZ/GUTOkR1Mus8GuKivwMjXaw==", "requires": { "@ew-did-registry/credentials-interface": "^0.7.1-alpha.795.0", "@ew-did-registry/did": "^0.7.1-alpha.795.0", @@ -38302,11 +38302,11 @@ "requires": {} }, "@energyweb/onchain-claims": { - "version": "2.2.1-alpha.293.0", - "resolved": "https://registry.npmjs.org/@energyweb/onchain-claims/-/onchain-claims-2.2.1-alpha.293.0.tgz", - "integrity": "sha512-XjNCbtBA9Iu1XFkQCJn6+61Y3opJT7mNITSgLzDXMNoA8tPstg08z/i2BLZgTsXlgYgurO9S58auHeEOUM0PkQ==", + "version": "2.2.1-alpha.295.0", + "resolved": "https://registry.npmjs.org/@energyweb/onchain-claims/-/onchain-claims-2.2.1-alpha.295.0.tgz", + "integrity": "sha512-ivTRGVniMuOjiVSjsMhmJNJJeafrNqnRjVqDCcAOhRTg6pIOLxHWTdST93YX+KnhKzruWTeha0gHAXsCsQG9oQ==", "requires": { - "@energyweb/credential-governance": "2.2.1-alpha.293.0", + "@energyweb/credential-governance": "2.2.1-alpha.295.0", "@ew-did-registry/did": "^0.7.1-alpha.795.0", "@ew-did-registry/did-ethr-resolver": "^0.7.1-alpha.795.0", "@poanet/solidity-flattener": "^3.0.7", @@ -38333,12 +38333,12 @@ "integrity": "sha512-+cNYvQwTKFMbKVqvVHGzcZbW+z1/pKTyQIYDDC3PaX5L0NAOshI/ZXAsrZRqp/6xEdWsm9f6u549ZLvCEUgNLw==" }, "@energyweb/vc-verification": { - "version": "2.2.1-alpha.293.0", - "resolved": "https://registry.npmjs.org/@energyweb/vc-verification/-/vc-verification-2.2.1-alpha.293.0.tgz", - "integrity": "sha512-0ZmeFmrdncLTysX4w7VDQK7dnK/ctqWUK6rHiLJR/Qzw7sFtH52TX3O4o7hm9zFSSb41ETRVsdMhBi7+Yvfgdw==", + "version": "2.2.1-alpha.295.0", + "resolved": "https://registry.npmjs.org/@energyweb/vc-verification/-/vc-verification-2.2.1-alpha.295.0.tgz", + "integrity": "sha512-WLmFEYTCraGfT9jjAalLT+NBXHUAkCCvXmWFCTxGMmw9zQSNS9vVFOv8NOEfYEzm91Tf0EG1QNcaUZQXAH6TKg==", "requires": { - "@energyweb/credential-governance": "2.2.1-alpha.293.0", - "@energyweb/onchain-claims": "2.2.1-alpha.293.0", + "@energyweb/credential-governance": "2.2.1-alpha.295.0", + "@energyweb/onchain-claims": "2.2.1-alpha.295.0", "@ew-did-registry/claims": "^0.7.1-alpha.795.0", "@ew-did-registry/credentials-interface": "^0.7.1-alpha.795.0", "@ew-did-registry/did-ethr-resolver": "^0.7.1-alpha.795.0", diff --git a/package.json b/package.json index 1ad7552e..37c2041e 100644 --- a/package.json +++ b/package.json @@ -64,11 +64,11 @@ "npm": ">= 6.0.0" }, "dependencies": { - "@energyweb/credential-governance": "^2.2.1-alpha.293.0", + "@energyweb/credential-governance": "^2.2.1-alpha.295.0", "@energyweb/ekc": "^0.6.7", - "@energyweb/onchain-claims": "^2.2.1-alpha.293.0", + "@energyweb/onchain-claims": "^2.2.1-alpha.295.0", "@energyweb/staking-pool": "^1.0.0-rc.14", - "@energyweb/vc-verification": "^2.2.1-alpha.293.0", + "@energyweb/vc-verification": "^2.2.1-alpha.295.0", "@ensdomains/ens": "^0.6.2", "@ew-did-registry/claims": "0.7.1-alpha.816.0", "@ew-did-registry/credentials-interface": "0.7.1-alpha.816.0", diff --git a/src/modules/claims/claims.service.ts b/src/modules/claims/claims.service.ts index 9c9176ce..5bced296 100644 --- a/src/modules/claims/claims.service.ts +++ b/src/modules/claims/claims.service.ts @@ -77,7 +77,7 @@ import { isEIP191Jwt, } from '@energyweb/vc-verification'; import { DidRegistry } from '../did-registry/did-registry.service'; -import { ClaimData } from '../did-registry/did.types'; +import { ClaimData, isClaimService } from '../did-registry/did.types'; import { compareDID, isValidDID } from '../../utils/did'; import { readyToBeRegisteredOnchain } from './claims.types'; import { VerifiableCredentialsServiceBase } from '../verifiable-credentials'; @@ -417,7 +417,7 @@ export class ClaimsService { expirationTimestamp, }: IssueClaimRequestOptions): Promise { const { claimData, sub } = this._didRegistry.jwt.decode(token) as { - claimData: { claimType: string; claimTypeVersion: number }; + claimData: ClaimData; sub: string; }; @@ -886,7 +886,9 @@ export class ClaimsService { */ async getUserClaims({ did = this._signerService.did, - }: GetUserClaimsOptions): Promise<(IServiceEndpoint & ClaimData)[]> { + }: GetUserClaimsOptions): Promise< + (IServiceEndpoint & Pick)[] + > { const [services, issuedClaims] = await Promise.all([ this._didRegistry.getServices({ did }), this.getClaimsBySubject({ @@ -901,12 +903,9 @@ export class ClaimsService { .filter((c) => c.registrationTypes.includes(RegistrationTypes.OffChain)) .map(({ claimType }) => claimType); - return services.filter( - ({ claimType }) => - claimType && - typeof claimType === 'string' && - issuedClaimsTypes.includes(claimType) - ); + return services + .filter(isClaimService) + .filter(({ claimType }) => issuedClaimsTypes.includes(claimType)); } /** @@ -1201,7 +1200,7 @@ export class ClaimsService { * @param {ClaimData} data Claim data to remove fields from * @return Claim data without fields */ - private stripClaimData(data: ClaimData): ClaimData { + private stripClaimData(data: ClaimData): Omit { // eslint-disable-next-line @typescript-eslint/no-unused-vars const { fields, ...claimData } = data; diff --git a/src/modules/claims/claims.types.ts b/src/modules/claims/claims.types.ts index 36148ab4..2ddd44b9 100644 --- a/src/modules/claims/claims.types.ts +++ b/src/modules/claims/claims.types.ts @@ -153,16 +153,7 @@ export interface GetClaimsByRevokerOptions { export interface CreateClaimRequestOptions { /** Claim request params */ - claim: { - /** Role namespace */ - claimType: string; - - /** Version of the role */ - claimTypeVersion: number; - - /** Requestor fields that role is requiring */ - requestorFields?: { key: string; value: string | number }[]; - }; + claim: ClaimData; /** DID of the subject */ subject?: string; diff --git a/src/modules/did-registry/did.types.ts b/src/modules/did-registry/did.types.ts index 50a9c119..621bf154 100644 --- a/src/modules/did-registry/did.types.ts +++ b/src/modules/did-registry/did.types.ts @@ -6,6 +6,8 @@ import { PubKeyType, } from '@ew-did-registry/did-resolver-interface'; import { KeyType } from '@ew-did-registry/keys'; +import { type ClaimData } from '@energyweb/vc-verification'; +import { has } from 'lodash'; export interface AssetProfile { name?: string; @@ -31,12 +33,13 @@ export interface Profile { assetProfiles?: AssetProfiles; } -export interface ClaimData extends Record { - profile?: Profile; - claimType?: string; - claimTypeVersion?: number; - issuerFields?: { key: string; value: string | number }[]; +declare module '@energyweb/vc-verification' { + export interface ClaimData extends Record { + profile?: Profile; + issuerFields?: { key: string; value: string | number }[]; + } } +export { ClaimData }; export interface GetDIDDocumentOptions { /* DID of the user */ @@ -63,7 +66,7 @@ export interface GetDidDelegatesOptions { export interface CreatePublicClaimOptions { /* Claim data */ - data: ClaimData; + data: Record; /* Subject of the claim */ subject?: string; @@ -151,3 +154,10 @@ export interface ValidDateUpdateDocumentRequestOptions { /* DID of the document to be updated */ did: string; } + +export const isClaimService = ( + service: IServiceEndpoint +): service is IServiceEndpoint & + Pick => { + return has(service, 'claimType') && has(service, 'claimTypeVersion'); +};