dcql
TypeScript icon, indicating that this package has built-in type declarations

1.0.1 • Public • Published

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, dc+sd-jwt and w3c vc's.
  • Create and parse DCQL queries from OID4VP Draft 22 up to version 1.0.

Installation

npm install dcql
# or
yarn add dcql
# or
pnpm add dcql

Quick Start

import { DcqlQuery, type DcqlCredential } from 'dcql'

const credentials = [
  {
    credential_format: 'mso_mdoc',
    doctype: 'org.iso.7367.1.mVRC',
    cryptographic_holder_binding: true,
    namespaces: {
      'org.iso.7367.1': {
        vehicle_holder: 'John Doe',
      },
      'org.iso.18013.5.1': {
        first_name: 'John',
      },
    },
    authority: {
      type: 'aki',
      values: ['21cbb5a0-9d1e-46dc-b8aa-0e85036af442'],
    },
  },
] satisfies DcqlCredential[]

// 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_retain: true,
        },
        {
          path: ['org.iso.18013.5.1', 'first_name'],
        },
      ],
    },
  ],
} satisfies DcqlQuery.Input

// 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:

// Execute the query against credentials
const queryResult = DcqlQuery.query(parsedQuery, credentials)

// Check if query can be satisfied
console.log(queryResult.can_be_satisfied)

// 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

Validating Presentations

Validate presentation results against queries:

const presentationQueryResult = DcqlPresentationResult.fromDcqlPresentation(
  {
    my_credential: [
      {
        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' },
        },
        cryptographic_holder_binding: true,
      },
    ],
  },
  { dcqlQuery: parsedQuery }
)

Package Sidebar

Install

npm i dcql

Weekly Downloads

4,507

Version

1.0.1

License

MIT

Unpacked Size

2.92 MB

Total Files

9

Last publish

Collaborators

  • timoglastra
  • openwalletfoundation
  • ausweis