0.2.20 • Published 7 months ago
dcql v0.2.20
DCQL (Digital Credentials Query Language)
A TypeScript implementation of the Digital Credentials Query Language (DCQL, pronounced ˈdakl̩) - a JSON-encoded query language for requesting and validating Verifiable Presentations.
Overview
DCQL enables Verifiers to request Verifiable Presentations that match specific queries. The library provides functionality to:
- Create and validate DCQL queries
- Match queries against Verifiable Credentials
- Validate presentation results
- Handle various credential formats including mso_mdoc and dc+sd-jwt and w3c vc's.
- Create and parse DCQL queries from OID4VP Draft 22/23 and Draft 24.
Installation
npm install dcql
# or
yarn add dcql
# or
pnpm add dcql
Quick Start
import { DcqlQuery, DcqlPresentationResult } from 'dcql';
// Create a DCQL query
const query = {
credentials: [{
id: 'my_credential',
format: 'mso_mdoc',
meta: { doctype_value: 'org.iso.7367.1.mVRC' },
claims: [
{
path: ['org.iso.7367.1', 'vehicle_holder'],
intent_to_reatin: true
},
{
path: ['org.iso.18013.5.1', 'first_name']
},
],
}]
};
// Parse (structural) and validate (content) the query
const parsedQuery = DcqlQuery.parse(query);
DcqlQuery.validate(parsedQuery);
// Execute the query against credentials
const queryResult = DcqlQuery.query(parsedQuery, credentials);
Features
- Query Construction: Build structured DCQL queries with type safety
- Validation: Comprehensive query validation and parsing
- Credential Matching: Match credentials against query requirements
- Result Processing: Process and validate presentation results
- Type Safety: Full TypeScript support with detailed type definitions
- Format Support: Support for multiple credential formats
- Extensible: Easy to extend for custom credential formats
Query Result Structure
The query result provides detailed information about the match:
const queryResult = DcqlQuery.query(query, credentials);
// Check if query can be satisfied
console.log(queryResult.canBeSatisfied);
// Access matched credentials
console.log(queryResult.credential_matches);
// The result of a specific credential query
const credentialMatch = queryResult.credential_matches['credential_query_id'];
console.log(credentialMatch.success); // True if the query is fulfillable
console.log(credentialMatch.input_credential_index); // The index of the best matching input credential
console.log(credentialMatch.claim_set_index); // The index of the claim_set that matched
console.log(credentialMatch.output); // The credential parse output
Validating Presentations
Validate presentation results against queries:
const presentationQueryResult = DcqlPresentationResult.fromDcqlPresentation(
{
my_credential: {
credential_format: 'mso_mdoc' as const,
doctype: 'org.iso.7367.1.mVRC',
namespaces: {
'org.iso.7367.1': { vehicle_holder: 'Martin Auer' },
'org.iso.18013.5.1': { first_name: 'Martin Auer' },
}
}
},
{ dcqlQuery: query }
);
assert.deepStrictEqual(presentationQueryResult, {
credentials: [
{
id: "my_credential",
format: "mso_mdoc",
claims: [
{ path: ["org.iso.7367.1", "vehicle_holder"] },
{ path: ["org.iso.18013.5.1", "first_name"] },
],
meta: { doctype_value: "org.iso.7367.1.mVRC" },
},
],
canBeSatisfied: true,
valid_matches: {
my_credential: {
typed: true,
success: true,
output: {
credential_format: "mso_mdoc",
doctype: "org.iso.7367.1.mVRC",
namespaces: {
"org.iso.7367.1": { vehicle_holder: "Martin Auer" },
"org.iso.18013.5.1": { first_name: "Martin Auer" }
},
},
claim_set_index: undefined,
presentation_id: "my_credential",
},
},
invalid_matches: undefined,
credential_sets: undefined,
})
0.2.21-alpha-20250217192848
7 months ago
0.2.20-alpha-20250212083101
7 months ago
0.2.20
7 months ago
0.2.20-alpha-20250213132109
7 months ago
0.2.20-alpha-20250213153925
7 months ago
0.2.20-alpha-20250130103020
7 months ago
0.2.20-alpha-20250114153338
8 months ago
0.2.19
8 months ago
0.2.18
9 months ago
0.2.17
9 months ago
0.2.16
9 months ago
0.2.15
9 months ago
0.2.14
9 months ago
0.2.13
9 months ago
0.2.12
9 months ago
0.2.11
9 months ago
0.2.10
10 months ago
0.2.7
10 months ago
0.2.6
10 months ago
0.2.9
10 months ago
0.2.8
10 months ago
0.2.5
10 months ago
0.2.4
10 months ago
0.2.3
10 months ago
0.2.2
10 months ago