# vc-vp-validator

`vc-vp-validator` is a library designed to provide validation functionality for JSON Web Tokens (JWTs) and JSON objects representing verifiable credentials and presentations. It exposes four validation functions tailored to validate both JSON and JWT credentials and presentations. This library supports various DID methods including `did:key`, `did:ebsi`, and `did:web`. 

> [!NOTE]  
> For `@validatedid` internal use.

## Features

- Validate JSON Web Tokens (JWTs) and JSON objects representing verifiable credentials (VCs) and presentations (VPs).
- Support for multiple DID methods: `did:key`, `did:ebsi`, and `did:web`.
- Special handling for EBSI issued credentials and DID:key presentations containing EBSI issued credentials.
- Validate DID-based authentication tokens using `validateDidAuthToken`

## Installation

You can install `vc-vp-validator` via npm:

```bash
npm install vc-vp-validator
```

## Usage

### Importing the library

```typescript
import {
  validateJwtVC,
  validateJsonVC,
  validateDcqlVp,
  validateDidAuthToken,
} from 'vc-vp-validator';
```

### Validating JSON Web Token (JWT) Verifiable Credentials (VCs)

```typescript
const validationResult = await validateJwtVC(jwtCredential, options);
```

### Validating JSON Verifiable Credentials (VCs)

```typescript
const validationResult = await validateJsonVC(jsonCredential, options);
```

### Validating DCQL Verifiable Presentations (VPs)

```typescript
const validationResult = await validateDcqlVp(dcqlPresentation, audience, options);
```

### Validating DID-based Authentication Token
To validate a DID-based authentication token (e.g., id_token), you can use the validateDidAuthIdToken function. This function checks the validity of the token, ensures it contains the correct issuer (iss) and algorithm (alg), and validates the token's signature.

```typescript
const validationResult = await validateDidAuthToken(id_token);
```

### Optional option parameters

Both credential validation functions (`validateJwtVC` and `validateJsonVC`) and presentation validation functions (`validateDcqlVP`) support optional options parameters.

```typescript
export interface CredentialValidationOptions {
didRegistry?: string;
ebsiAuthority?: string;
}
```

```typescript
export interface PresentationValidationOptions {
  dcqlQuery?: DCQLQuery;
  didRegistry?: string;
  ebsiAuthority?: string;
}
```

## Validation Response
The response object will follow the interface:

```typescript
export interface ValidationResult {
valid: boolean;
messages?: string[];
}
```
If the valid property is false, the messages array will include reasons why the credential is not valid.
