Skip to content

Commit

Permalink
feat(claim): issue VC when approving role request
Browse files Browse the repository at this point in the history
  • Loading branch information
Harasz committed Apr 11, 2022
1 parent 7733743 commit a3eefbc
Show file tree
Hide file tree
Showing 6 changed files with 84 additions and 14 deletions.
6 changes: 4 additions & 2 deletions docs/api/classes/ClaimsService.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@

### constructor

**new ClaimsService**(`_signerService`, `_domainsService`, `_cacheClient`, `_didRegistry`)
**new ClaimsService**(`_signerService`, `_domainsService`, `_cacheClient`, `_didRegistry`, `_verifiableCredentialService`)

#### Parameters

Expand All @@ -43,6 +43,7 @@
| `_domainsService` | [`DomainsService`](DomainsService.md) |
| `_cacheClient` | [`CacheClient`](CacheClient.md) |
| `_didRegistry` | [`DidRegistry`](DidRegistry.md) |
| `_verifiableCredentialService` | [`VerifiableCredentialsServiceBase`](VerifiableCredentialsServiceBase.md) |

## Methods

Expand Down Expand Up @@ -432,7 +433,7 @@ ___

### create

`Static` **create**(`signerService`, `domainsService`, `cacheClient`, `didRegistry`): `Promise`<[`ClaimsService`](ClaimsService.md)\>
`Static` **create**(`signerService`, `domainsService`, `cacheClient`, `didRegistry`, `verifiableCredentialService`): `Promise`<[`ClaimsService`](ClaimsService.md)\>

#### Parameters

Expand All @@ -442,6 +443,7 @@ ___
| `domainsService` | [`DomainsService`](DomainsService.md) |
| `cacheClient` | [`CacheClient`](CacheClient.md) |
| `didRegistry` | [`DidRegistry`](DidRegistry.md) |
| `verifiableCredentialService` | [`VerifiableCredentialsServiceBase`](VerifiableCredentialsServiceBase.md) |

#### Returns

Expand Down
7 changes: 7 additions & 0 deletions docs/api/interfaces/IClaimIssuance.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
- [issuedToken](IClaimIssuance.md#issuedtoken)
- [onChainProof](IClaimIssuance.md#onchainproof)
- [requester](IClaimIssuance.md#requester)
- [vp](IClaimIssuance.md#vp)

## Properties

Expand Down Expand Up @@ -78,3 +79,9 @@ ___
#### Inherited from

[IMessage](IMessage.md).[requester](IMessage.md#requester)

___

### vp

`Optional` **vp**: `string`
33 changes: 30 additions & 3 deletions e2e/claims.service.e2e.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
import { IRoleDefinition, PreconditionType } from '@energyweb/credential-governance';
import {
IRoleDefinition,
PreconditionType,
} from '@energyweb/credential-governance';
import { Methods, Chain } from '@ew-did-registry/did';
import { addressOf } from '@ew-did-registry/did-ethr-resolver';
import { KeyTags } from '@ew-did-registry/did-resolver-interface';
Expand All @@ -24,6 +27,7 @@ import { ProofVerifier } from '@ew-did-registry/claims';
import { ClaimManager } from '../ethers/ClaimManager';
import { setLogger } from '../src/config/logger.config';
import { ConsoleLogger, LogLevel } from '../src/utils/logger';
import { VerifiablePresentation } from '@ew-did-registry/credentials-interface';

const { namehash } = utils;

Expand Down Expand Up @@ -201,11 +205,34 @@ describe('Enrollment claim tests', () => {
mockIssueClaim.mock.calls.pop()
);

const { issuedToken, requester, claimIssuer, onChainProof, acceptedBy } =
issuedClaim;
const {
issuedToken,
requester,
claimIssuer,
onChainProof,
acceptedBy,
vp,
} = issuedClaim;

if (registrationTypes.includes(RegistrationTypes.OffChain)) {
expect(issuedToken).toBeDefined();
expect(vp).toBeDefined();

const vpObject = JSON.parse(vp) as VerifiablePresentation;

expect(vpObject.verifiableCredential).toHaveLength(1);
expect(vpObject.verifiableCredential[0].credentialSubject).toEqual({
id: subjectDID,
role: {
namespace: claimType,
version: version.toString(),
},
issuerFields,
});
expect(vpObject.verifiableCredential[0].issuer).toEqual(
signerService.didHex
);
expect(vpObject.holder).toEqual(signerService.didHex);

const { claimData, signer, did } = (await didRegistry.decodeJWTToken({
token: issuedToken,
Expand Down
3 changes: 2 additions & 1 deletion src/init.ts
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,8 @@ export async function init(signerService: SignerService) {
signerService,
domainsService,
cacheClient,
didRegistry
didRegistry,
verifiableCredentialsService
);
return { didRegistry, claimsService };
}
Expand Down
47 changes: 40 additions & 7 deletions src/modules/claims/claims.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ import { compareDID, isValidDID } from '../../utils/did';
import { JWT } from '@ew-did-registry/jwt';
import { privToPem, KeyType } from '@ew-did-registry/keys';
import { readyToBeRegisteredOnchain } from './claims.types';
import { VerifiableCredentialsServiceBase } from '../verifiable-credentials';

const {
id,
Expand All @@ -57,7 +58,8 @@ export class ClaimsService {
private _signerService: SignerService,
private _domainsService: DomainsService,
private _cacheClient: CacheClient,
private _didRegistry: DidRegistry
private _didRegistry: DidRegistry,
private _verifiableCredentialService: VerifiableCredentialsServiceBase
) {
this._signerService.onInit(this.init.bind(this));
}
Expand All @@ -66,13 +68,15 @@ export class ClaimsService {
signerService: SignerService,
domainsService: DomainsService,
cacheClient: CacheClient,
didRegistry: DidRegistry
didRegistry: DidRegistry,
verifiableCredentialService: VerifiableCredentialsServiceBase
) {
const service = new ClaimsService(
signerService,
domainsService,
cacheClient,
didRegistry
didRegistry,
verifiableCredentialService
);
await service.init();
return service;
Expand Down Expand Up @@ -266,9 +270,9 @@ export class ClaimsService {
acceptedBy: this._signerService.did,
};
const strippedClaimData = this.stripClaimData(claimData);
const { claimType: role, claimTypeVersion: version } = claimData;

if (registrationTypes.includes(RegistrationTypes.OnChain)) {
const { claimType: role, claimTypeVersion: version } = claimData;
const expiry = defaultClaimExpiry;
const onChainProof = await this.createOnChainProof(
role,
Expand Down Expand Up @@ -296,14 +300,43 @@ export class ClaimsService {
...(issuerFields && { issuerFields }),
},
};
message.issuedToken = await this._didRegistry.issuePublicClaim({
publicClaim,
});
const [issuedToken, vp] = await Promise.all([
this._didRegistry.issuePublicClaim({
publicClaim,
}),
this.issueVerifiablePresentation({
subject: sub,
namespace: role,
version: version.toString(),
issuerFields,
}),
]);
message.issuedToken = issuedToken;
message.vp = vp;
}

await this._cacheClient.issueClaim(this._signerService.did, message);
}

private async issueVerifiablePresentation(options: {
subject: string;
namespace: string;
version: string;
issuerFields?: { key: string; value: string | number }[];
}) {
const vc = await this._verifiableCredentialService.createRoleVC({
id: options.subject,
namespace: options.namespace,
version: options.version,
issuerFields: options.issuerFields,
});
const vp =
await this._verifiableCredentialService.createVerifiablePresentation([
vc,
]);
return JSON.stringify(vp);
}

/**
*
* @param token optional token containing claimType, version and subject
Expand Down
2 changes: 1 addition & 1 deletion src/modules/claims/claims.types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ export interface IClaimIssuance extends IMessage {
onChainProof?: string;
claimType?: string;
claimTypeVersion?: string;

acceptedBy: string;
vp?: string;
}

export interface IClaimRejection extends IMessage {
Expand Down

0 comments on commit a3eefbc

Please sign in to comment.