iam-client-lib
Version:
Library for Decentralized Identity and Access Management
204 lines (203 loc) • 10.6 kB
TypeScript
import { IPresentationDefinition, SelectResults } from '@sphereon/pex';
import { ICredentialSubject } from '@sphereon/ssi-types';
import { VerifiableCredential, VerifiablePresentation, Credential, Presentation, ExchangeInvitation, VpRequest, ContinueExchangeCredentials, ContinueExchangeSelections } from '@ew-did-registry/credentials-interface';
import { SignerService } from '../signer';
import { ProofOptions, RoleCredentialSubjectParams, RoleCredentialSubject, CreatePresentationParams, StatusList2021Credential, CredentialRevocationDetailsResult } from './types';
import { CacheClient } from '../cache-client';
/**
* Service responsible for managing verifiable credentials and presentations.
* You can read more about verifiable credentials data model [here](https://www.w3.org/TR/vc-data-model/).
*
* ```typescript
* const { verifiableCredentialsService } = await initWithPrivateKeySigner(privateKey, rpcUrl);
* verifiableCredentialsService.createRoleVC(...);
* ```
* */
export declare abstract class VerifiableCredentialsServiceBase {
protected readonly _signerService: SignerService;
protected readonly _cacheClient: CacheClient;
private logger;
/**
* Get prepared data for signing a credential.
*
* @param {String} credential - The credential object in JSON format
* @param {String} linked_data_proof_options - The proof options in JSON format
* @param {String} public_key - Information about public key that credential will be signed in JSON format
* @returns {Promise<String>} JSON stringified prepared data (including EIP712 types and credential with proof ready for signing)
*/
protected abstract prepareIssueCredential(credential: string, linked_data_proof_options: string, public_key: string): Promise<string>;
/**
* Get verifiable credential object.
*
* @param {String} credential - The credential object in JSON format
* @param {String} preparation - Output of `prepareIssueCredential` method
* @param {String} signature - Signature of the credential
* @returns {Promise<String>} verifiable credential object in JSON format
*/
protected abstract completeIssueCredential(credential: string, preparation: string, signature: string): Promise<string>;
/**
* Verify given verifiable credential.
*
* @param {String} vc - The verifiable credential object in JSON format
* @param {String} proof_options - The proof options in JSON format
* @returns {Promise<String>} object with results of verification in JSON format
*/
protected abstract verifyCredential(vc: string, proof_options: string): Promise<string>;
/**
* Get prepared data for signing a presentation.
*
* @param {String} presentation - The presentation object in JSON format
* @param {String} linked_data_proof_options - The proof options in JSON format
* @param {String} public_key - Information about public key that presentation will be signed in JSON format
* @returns {Promise<String>} JSON stringified prepared data (including EIP712 types and presentation with proof ready for signing)
*/
protected abstract prepareIssuePresentation(presentation: string, linked_data_proof_options: string, public_key: string): Promise<string>;
/**
* Get verifiable presentation object.
*
* @param {String} presentation - The presentation object in JSON format
* @param {String} preparation - Output of `prepareIssuePresentation` method
* @param {String} signature - Signature of the presentation
* @returns {Promise<String>} verifiable presentation object in JSON format
*/
protected abstract completeIssuePresentation(presentation: string, preparation: string, signature: string): Promise<string>;
/**
* Verify given verifiable presentation (included verifiable credentials are not verified).
*
* @param {String} vp - The verifiable presentation object in JSON format
* @param {String} proof_options - The proof options in JSON format
* @returns {Promise<String>} object with results of verification in JSON format
*/
protected abstract verifyPresentation(vp: string, proof_options: string): Promise<string>;
constructor(_signerService: SignerService, _cacheClient: CacheClient);
static create(signerService: SignerService, cacheClient: CacheClient): Promise<VerifiableCredentialsServiceBase>;
/**
* Initialize credential exchange. Only vc-api exchanges currently supported.
*
* ```typescript
* verifiableCredentialsService.initiateExchange({
* type: VC_API_EXCHANGE,
* url: 'http://localhost:3000',
* });
* ```
* @param {ExchangeInvitation} options object with options
* @returns credentials query with matching verifiable presentations
*/
initiateExchange({ type, url, }: ExchangeInvitation): Promise<ContinueExchangeSelections>;
/**
* @description Sends credentials requested by issuer and returns either issued credentials or next credentials request
*
* @param params.vpRequest credentials required to continue exchange
* @returns issued credentials or request of additional credentials
*/
continueExchange({ vpRequest: { challenge, interact: { service }, }, credentials, }: ContinueExchangeCredentials<RoleCredentialSubject>): Promise<VerifiablePresentation | VpRequest | undefined>;
createRoleVC(credentialParams: RoleCredentialSubjectParams, proofOptions?: ProofOptions): Promise<VerifiableCredential<RoleCredentialSubject>>;
/**
* Create a presentation with given verifiable credentials. Allow create presentation for a given presentation definition.
*
* ```typescript
* verifiableCredentialsService.createPresentation([...credentials]);
* ```
* @param {VerifiableCredential<RoleCredentialSubject>[]} verifiableCredential role credential parameters
* @param {CreatePresentationParams} options presentation options
* @returns presentation
*/
createPresentation(verifiableCredential: VerifiableCredential<RoleCredentialSubject>[], options?: CreatePresentationParams): Presentation;
/**
* Create a verifiable presentation with given verifiable credentials and EIP712 signature.
*
* ```typescript
* verifiableCredentialsService.createVerifiablePresentation([...credentials]);
* ```
* @param {VerifiableCredential<RoleCredentialSubject>[]} verifiableCredential role credential parameters
* @param {ProofOptions} options proof options
* @returns verifiable presentation
*/
createVerifiablePresentation(verifiableCredential: VerifiableCredential<RoleCredentialSubject>[], options?: ProofOptions): Promise<VerifiablePresentation>;
/**
* Verify a given credential or presentation. Throws an error if the credential or presentation proof is not valid.
*
* ```typescript
* await verifiableCredentialsService.verify(credential);
* await verifiableCredentialsService.verify(presentation);
* ```
* @param {VerifiablePresentation | VerifiableCredential} vcOrVp verifiable presentation or credential
* @param {ProofOptions} options proof options
* @returns true if the proof is valid
*/
verify<T extends ICredentialSubject>(vcOrVp: VerifiablePresentation | VerifiableCredential<T>, options?: ProofOptions): Promise<boolean>;
/**
* Returns issued role verifiable credentials which matches definition.
*
* ```typescript
* await verifiableCredentialsService.getCredentialsByDefinition(presentationDefinition);
* ```
*
* @param presentationDefinition credential requirements
* @returns results of matching each role verifiable credential to definition
*/
getCredentialsByDefinition(presentationDefinition: IPresentationDefinition): Promise<SelectResults>;
/**
* Create a credential with given parameters.
*
* ```typescript
* await verifiableCredentialsService.createCredential({
* id: 'did:ethr:ewc:0x...00',
* namespace: 'root.energyweb.iam.ewc',
* version: '1',
* issuerFields: [],
* expirationDate: new Date(),
* });
* ```
*
* @param {RoleCredentialSubjectParams} params verifiable credential parameters
* @returns Energy Web credential
*/
createCredential(params: RoleCredentialSubjectParams): Credential<RoleCredentialSubject>;
/**
* Revoke given verifiable credential with StatusList2021.
*
* ```typescript
* await verifiableCredentialsService.revokeCredential(credential);
* ```
*
* @param {VerifiableCredential<RoleCredentialSubject>} credential verifiable credential
* @return StatusList2021Credential
*/
revokeCredential(credential: VerifiableCredential<RoleCredentialSubject>): Promise<StatusList2021Credential>;
/**
* Check if given verifiable credential is revoked.
*
* ```typescript
* await verifiableCredentialsService.isRevoked(credential);
* ```
*
* @param {VerifiableCredential<RoleCredentialSubject>} credential verifiable credential
* @return true if credential is revoked
*/
isRevoked(credential: VerifiableCredential<RoleCredentialSubject>): Promise<boolean>;
/**
* Get the credentials revocation details.
*
* ```typescript
* await verifiableCredentialsService.revocationDetails(credential);
* ```
*
* @param {VerifiableCredential<RoleCredentialSubject>} credential verifiable credential
* @return revoker and revocationTimeStamp for the revocation
*/
revocationDetails(credential: VerifiableCredential<RoleCredentialSubject>): Promise<CredentialRevocationDetailsResult | null>;
/**
* We have observed that pex may have bugs when dealing with subject_is_issuer credentials
* and when handling a presentation definition with more than one input descriptor.
* This could be related to these issues:
* - https://github.com/Sphereon-Opensource/pex/issues/96
* - https://github.com/Sphereon-Opensource/pex/issues/91
* We are therefore trying to simplify the input to pex so remove the possibility of it generating incorrect results.
* Once the above issues are fixed, pex can be updated and perhaps this filtering will not needed.
*
* @param {InputDescriptorV1 | InputDescriptorV2} descriptors input descriptors
* @returns filtered input descriptors
*/
private filterSelfSignDescriptors;
}