dcql 0.2.22 → 0.3.0-alpha-20250527162348

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -102,10 +102,13 @@ var DcqlPresentationResultError = class extends DcqlError {
102
102
  };
103
103
 
104
104
  // src/dcql-presentation/m-dcql-credential-presentation.ts
105
- import * as v4 from "valibot";
105
+ import * as v5 from "valibot";
106
106
 
107
107
  // src/u-dcql-credential.ts
108
- import * as v3 from "valibot";
108
+ import * as v4 from "valibot";
109
+
110
+ // src/dcql-query/m-dcql-trusted-authorities.ts
111
+ import * as v2 from "valibot";
109
112
 
110
113
  // src/u-dcql.ts
111
114
  import * as v from "valibot";
@@ -113,7 +116,17 @@ var idRegex = /^[a-zA-Z0-9_-]+$/;
113
116
  var vNonEmptyArray = () => {
114
117
  return v.custom((input) => input.length > 0);
115
118
  };
119
+ var vIncludesAll = (subset) => {
120
+ return v.custom(
121
+ (value) => {
122
+ if (!Array.isArray(value)) return false;
123
+ return subset.every((item) => value.includes(item));
124
+ },
125
+ `Value must include all of: ${subset.join(", ")}`
126
+ );
127
+ };
116
128
  var vIdString = v.pipe(v.string(), v.regex(idRegex), v.nonEmpty());
129
+ var vBase64url = v.regex(/^(?:[\w-]{4})*(?:[\w-]{2}(?:==)?|[\w-]{3}=?)?$/iu, "must be base64url");
117
130
  function isToJsonable(value) {
118
131
  if (value === null || typeof value !== "object") return false;
119
132
  const toJsonFn = value.toJson;
@@ -174,8 +187,75 @@ var vStringToJson = v.rawTransform(({ dataset, addIssue, NEVER }) => {
174
187
  }
175
188
  });
176
189
 
190
+ // src/dcql-query/m-dcql-trusted-authorities.ts
191
+ var vAuthorityKeyIdentifier = v2.object({
192
+ type: v2.literal("aki"),
193
+ value: v2.pipe(
194
+ v2.string(),
195
+ vBase64url,
196
+ v2.description(
197
+ "Contains the KeyIdentifier of the AuthorityKeyIdentifier as defined in Section 4.2.1.1 of [RFC5280], encoded as base64url. The raw byte representation of this element MUST match with the AuthorityKeyIdentifier element of an X.509 certificate in the certificate chain present in the credential (e.g., in the header of an mdoc or SD-JWT). Note that the chain can consist of a single certificate and the credential can include the entire X.509 chain or parts of it."
198
+ )
199
+ )
200
+ });
201
+ var vEtsiTrustedList = v2.object({
202
+ type: v2.literal("etsi_tl"),
203
+ value: v2.pipe(
204
+ v2.string(),
205
+ v2.url(),
206
+ v2.check(
207
+ (url2) => url2.startsWith("http://") || url2.startsWith("https://"),
208
+ "etsi_tl trusted authority value must be a valid https url"
209
+ ),
210
+ v2.description(
211
+ "The identifier of a Trusted List as specified in ETSI TS 119 612 [ETSI.TL]. An ETSI Trusted List contains references to other Trusted Lists, creating a list of trusted lists, or entries for Trust Service Providers with corresponding service description and X.509 Certificates. The trust chain of a matching Credential MUST contain at least one X.509 Certificate that matches one of the entries of the Trusted List or its cascading Trusted Lists."
212
+ )
213
+ )
214
+ });
215
+ var vOpenidFederation = v2.object({
216
+ type: v2.literal("openid_federation"),
217
+ value: v2.pipe(
218
+ v2.string(),
219
+ v2.url(),
220
+ // TODO: should we have a config similar to oid4vc-ts to support http for development?
221
+ v2.check(
222
+ (url2) => url2.startsWith("http://") || url2.startsWith("https://"),
223
+ "openid_federation trusted authority value must be a valid https url"
224
+ ),
225
+ v2.description(
226
+ "The Entity Identifier as defined in Section 1 of [OpenID.Federation] that is bound to an entity in a federation. While this Entity Identifier could be any entity in that ecosystem, this entity would usually have the Entity Configuration of a Trust Anchor. A valid trust path, including the given Entity Identifier, must be constructible from a matching credential."
227
+ )
228
+ )
229
+ });
230
+ var vTrustedAuthorities = [vAuthorityKeyIdentifier, vEtsiTrustedList, vOpenidFederation];
231
+ var DcqlTrustedAuthoritiesQuery;
232
+ ((DcqlTrustedAuthoritiesQuery2) => {
233
+ const vTrustedAuthoritiesQuery = vTrustedAuthorities.map(
234
+ (authority) => v2.object({
235
+ type: v2.pipe(
236
+ authority.entries.type,
237
+ v2.description(
238
+ "REQUIRED. A string uniquely identifying the type of information about the issuer trust framework."
239
+ )
240
+ ),
241
+ values: v2.pipe(
242
+ v2.array(authority.entries.value),
243
+ vNonEmptyArray(),
244
+ v2.description(
245
+ "REQUIRED. An array of strings, where each string (value) contains information specific to the used Trusted Authorities Query type that allows to identify an issuer, trust framework, or a federation that an issuer belongs to."
246
+ )
247
+ )
248
+ })
249
+ );
250
+ DcqlTrustedAuthoritiesQuery2.vModel = v2.variant("type", vTrustedAuthoritiesQuery);
251
+ })(DcqlTrustedAuthoritiesQuery || (DcqlTrustedAuthoritiesQuery = {}));
252
+ var DcqlCredentialTrustedAuthority;
253
+ ((DcqlCredentialTrustedAuthority2) => {
254
+ DcqlCredentialTrustedAuthority2.vModel = v2.variant("type", vTrustedAuthorities);
255
+ })(DcqlCredentialTrustedAuthority || (DcqlCredentialTrustedAuthority = {}));
256
+
177
257
  // src/u-model.ts
178
- import * as v2 from "valibot";
258
+ import * as v3 from "valibot";
179
259
  var Model = class {
180
260
  constructor(input) {
181
261
  this.input = input;
@@ -194,28 +274,32 @@ var Model = class {
194
274
  });
195
275
  }
196
276
  safeParse(input) {
197
- const res = v2.safeParse(this.input.vModel, input);
277
+ const res = v3.safeParse(this.input.vModel, input);
198
278
  if (res.success) {
199
279
  return { success: true, output: res.output };
200
280
  }
201
281
  return {
202
282
  success: false,
203
- error: new v2.ValiError(res.issues),
204
- flattened: v2.flatten(res.issues)
283
+ error: new v3.ValiError(res.issues),
284
+ flattened: v3.flatten(res.issues)
205
285
  };
206
286
  }
207
287
  is(input) {
208
- return v2.is(this.v, input);
288
+ return v3.is(this.v, input);
209
289
  }
210
290
  };
211
291
 
212
292
  // src/u-dcql-credential.ts
293
+ var vCredentialModelBase = v4.object({
294
+ authority: v4.optional(DcqlCredentialTrustedAuthority.vModel)
295
+ });
213
296
  var DcqlMdocCredential;
214
297
  ((DcqlMdocCredential2) => {
215
- DcqlMdocCredential2.vNamespaces = v3.record(v3.string(), v3.record(v3.string(), v3.unknown()));
216
- DcqlMdocCredential2.vModel = v3.object({
217
- credential_format: v3.literal("mso_mdoc"),
218
- doctype: v3.string(),
298
+ DcqlMdocCredential2.vNamespaces = v4.record(v4.string(), v4.record(v4.string(), v4.unknown()));
299
+ DcqlMdocCredential2.vModel = v4.object({
300
+ ...vCredentialModelBase.entries,
301
+ credential_format: v4.literal("mso_mdoc"),
302
+ doctype: v4.string(),
219
303
  namespaces: DcqlMdocCredential2.vNamespaces
220
304
  });
221
305
  DcqlMdocCredential2.model = new Model({ vModel: DcqlMdocCredential2.vModel });
@@ -223,9 +307,10 @@ var DcqlMdocCredential;
223
307
  var DcqlSdJwtVcCredential;
224
308
  ((DcqlSdJwtVcCredential2) => {
225
309
  DcqlSdJwtVcCredential2.vClaims = vJsonRecord;
226
- DcqlSdJwtVcCredential2.vModel = v3.object({
227
- credential_format: v3.picklist(["vc+sd-jwt", "dc+sd-jwt"]),
228
- vct: v3.string(),
310
+ DcqlSdJwtVcCredential2.vModel = v4.object({
311
+ ...vCredentialModelBase.entries,
312
+ credential_format: v4.picklist(["vc+sd-jwt", "dc+sd-jwt"]),
313
+ vct: v4.string(),
229
314
  claims: DcqlSdJwtVcCredential2.vClaims
230
315
  });
231
316
  DcqlSdJwtVcCredential2.model = new Model({ vModel: DcqlSdJwtVcCredential2.vModel });
@@ -233,34 +318,36 @@ var DcqlSdJwtVcCredential;
233
318
  var DcqlW3cVcCredential;
234
319
  ((DcqlW3cVcCredential2) => {
235
320
  DcqlW3cVcCredential2.vClaims = vJsonRecord;
236
- DcqlW3cVcCredential2.vModel = v3.object({
237
- credential_format: v3.picklist(["jwt_vc_json-ld", "jwt_vc_json"]),
238
- claims: DcqlW3cVcCredential2.vClaims
321
+ DcqlW3cVcCredential2.vModel = v4.object({
322
+ ...vCredentialModelBase.entries,
323
+ credential_format: v4.picklist(["ldp_vc", "jwt_vc_json"]),
324
+ claims: DcqlW3cVcCredential2.vClaims,
325
+ type: v4.array(v4.string())
239
326
  });
240
327
  DcqlW3cVcCredential2.model = new Model({ vModel: DcqlW3cVcCredential2.vModel });
241
328
  })(DcqlW3cVcCredential || (DcqlW3cVcCredential = {}));
242
329
  var DcqlCredential;
243
330
  ((DcqlCredential2) => {
244
- DcqlCredential2.vModel = v3.variant("credential_format", [
331
+ DcqlCredential2.vModel = v4.variant("credential_format", [
245
332
  DcqlMdocCredential.vModel,
246
333
  DcqlSdJwtVcCredential.vModel,
247
334
  DcqlW3cVcCredential.vModel
248
335
  ]);
249
- DcqlCredential2.vParseSuccess = v3.object({
250
- success: v3.literal(true),
251
- typed: v3.literal(true),
252
- issues: v3.optional(v3.undefined()),
253
- input_credential_index: v3.number(),
254
- claim_set_index: v3.union([v3.number(), v3.undefined()]),
336
+ DcqlCredential2.vParseSuccess = v4.object({
337
+ success: v4.literal(true),
338
+ typed: v4.literal(true),
339
+ issues: v4.optional(v4.undefined()),
340
+ input_credential_index: v4.number(),
341
+ claim_set_index: v4.union([v4.number(), v4.undefined()]),
255
342
  output: DcqlCredential2.vModel
256
343
  });
257
- DcqlCredential2.vParseFailure = v3.object({
258
- success: v3.literal(false),
259
- typed: v3.boolean(),
260
- output: v3.unknown(),
261
- issues: v3.pipe(v3.array(v3.unknown()), vNonEmptyArray()),
262
- input_credential_index: v3.number(),
263
- claim_set_index: v3.union([v3.number(), v3.undefined()])
344
+ DcqlCredential2.vParseFailure = v4.object({
345
+ success: v4.literal(false),
346
+ typed: v4.boolean(),
347
+ output: v4.unknown(),
348
+ issues: v4.pipe(v4.array(v4.unknown()), vNonEmptyArray()),
349
+ input_credential_index: v4.number(),
350
+ claim_set_index: v4.union([v4.number(), v4.undefined()])
264
351
  });
265
352
  DcqlCredential2.model = new Model({ vModel: DcqlCredential2.vModel });
266
353
  })(DcqlCredential || (DcqlCredential = {}));
@@ -284,7 +371,7 @@ var DcqlW3cVcPresentation;
284
371
  var DcqlCredentialPresentation;
285
372
  ((DcqlCredentialPresentation2) => {
286
373
  DcqlCredentialPresentation2.model = new Model({
287
- vModel: v4.variant("credential_format", [
374
+ vModel: v5.variant("credential_format", [
288
375
  DcqlMdocPresentation.vModel,
289
376
  DcqlSdJwtVcPresentation.vModel,
290
377
  DcqlW3cVcPresentation.vModel
@@ -293,117 +380,126 @@ var DcqlCredentialPresentation;
293
380
  })(DcqlCredentialPresentation || (DcqlCredentialPresentation = {}));
294
381
 
295
382
  // src/dcql-presentation/m-dcql-presentation-result.ts
296
- import * as v11 from "valibot";
383
+ import * as v12 from "valibot";
297
384
 
298
385
  // src/dcql-parser/dcql-credential-query-result.ts
299
- import * as v7 from "valibot";
386
+ import * as v8 from "valibot";
300
387
 
301
388
  // src/dcql-parser/dcql-claims-query-result.ts
302
- import * as v6 from "valibot";
389
+ import * as v7 from "valibot";
303
390
 
304
391
  // src/dcql-query/m-dcql-claims-query.ts
305
- import * as v5 from "valibot";
392
+ import * as v6 from "valibot";
306
393
  var DcqlClaimsQuery;
307
394
  ((DcqlClaimsQuery2) => {
308
- DcqlClaimsQuery2.vValue = v5.union([v5.string(), v5.pipe(v5.number(), v5.integer()), v5.boolean()]);
309
- DcqlClaimsQuery2.vPath = v5.union([v5.string(), v5.pipe(v5.number(), v5.integer(), v5.minValue(0)), v5.null()]);
310
- DcqlClaimsQuery2.vW3cSdJwtVc = v5.object({
311
- id: v5.pipe(
312
- v5.optional(vIdString),
313
- v5.description(
395
+ DcqlClaimsQuery2.vValue = v6.union([v6.string(), v6.pipe(v6.number(), v6.integer()), v6.boolean()]);
396
+ DcqlClaimsQuery2.vPath = v6.union([v6.string(), v6.pipe(v6.number(), v6.integer(), v6.minValue(0)), v6.null()]);
397
+ DcqlClaimsQuery2.vW3cSdJwtVc = v6.object({
398
+ id: v6.pipe(
399
+ v6.optional(vIdString),
400
+ v6.description(
314
401
  "A string identifying the particular claim. The value MUST be a non-empty string consisting of alphanumeric, underscore (_) or hyphen (-) characters. Within the particular claims array, the same id MUST NOT be present more than once."
315
402
  )
316
403
  ),
317
- path: v5.pipe(
318
- v5.array(DcqlClaimsQuery2.vPath),
404
+ path: v6.pipe(
405
+ v6.array(DcqlClaimsQuery2.vPath),
319
406
  vNonEmptyArray(),
320
- v5.description(
407
+ v6.description(
321
408
  "A non-empty array representing a claims path pointer that specifies the path to a claim within the Verifiable Credential."
322
409
  )
323
410
  ),
324
- values: v5.pipe(
325
- v5.optional(v5.array(DcqlClaimsQuery2.vValue)),
326
- v5.description(
411
+ values: v6.pipe(
412
+ v6.optional(v6.array(DcqlClaimsQuery2.vValue)),
413
+ v6.description(
327
414
  "An array of strings, integers or boolean values that specifies the expected values of the claim. If the values property is present, the Wallet SHOULD return the claim only if the type and value of the claim both match for at least one of the elements in the array."
328
415
  )
329
416
  )
330
417
  });
331
- const vMdocBase = v5.object({
332
- id: v5.pipe(
333
- v5.optional(vIdString),
334
- v5.description(
418
+ const vMdocBase = v6.object({
419
+ id: v6.pipe(
420
+ v6.optional(vIdString),
421
+ v6.description(
335
422
  "A string identifying the particular claim. The value MUST be a non-empty string consisting of alphanumeric, underscore (_) or hyphen (-) characters. Within the particular claims array, the same id MUST NOT be present more than once."
336
423
  )
337
424
  ),
338
- values: v5.pipe(
339
- v5.optional(v5.array(DcqlClaimsQuery2.vValue)),
340
- v5.description(
425
+ values: v6.pipe(
426
+ v6.optional(v6.array(DcqlClaimsQuery2.vValue)),
427
+ v6.description(
341
428
  "An array of strings, integers or boolean values that specifies the expected values of the claim. If the values property is present, the Wallet SHOULD return the claim only if the type and value of the claim both match for at least one of the elements in the array."
342
429
  )
343
430
  )
344
431
  });
345
- DcqlClaimsQuery2.vMdocNamespace = v5.object({
432
+ DcqlClaimsQuery2.vMdocNamespace = v6.object({
346
433
  ...vMdocBase.entries,
347
- namespace: v5.pipe(
348
- v5.string(),
349
- v5.description(
434
+ namespace: v6.pipe(
435
+ v6.string(),
436
+ v6.description(
350
437
  "A string that specifies the namespace of the data element within the mdoc, e.g., org.iso.18013.5.1."
351
438
  )
352
439
  ),
353
- claim_name: v5.pipe(
354
- v5.string(),
355
- v5.description(
440
+ claim_name: v6.pipe(
441
+ v6.string(),
442
+ v6.description(
356
443
  "A string that specifies the data element identifier of the data element within the provided namespace in the mdoc, e.g., first_name."
357
444
  )
358
445
  )
359
446
  });
360
- DcqlClaimsQuery2.vMdocPath = v5.object({
447
+ DcqlClaimsQuery2.vMdocPath = v6.object({
361
448
  ...vMdocBase.entries,
362
- intent_to_retain: v5.pipe(
363
- v5.optional(v5.boolean()),
364
- v5.description(
449
+ intent_to_retain: v6.pipe(
450
+ v6.optional(v6.boolean()),
451
+ v6.description(
365
452
  "A boolean that is equivalent to `IntentToRetain` variable defined in Section 8.3.2.1.2.1 of [@ISO.18013-5]."
366
453
  )
367
454
  ),
368
- path: v5.pipe(
369
- v5.tuple([
370
- v5.pipe(
371
- v5.string(),
372
- v5.description(
455
+ path: v6.pipe(
456
+ v6.tuple([
457
+ v6.pipe(
458
+ v6.string(),
459
+ v6.description(
373
460
  "A string that specifies the namespace of the data element within the mdoc, e.g., org.iso.18013.5.1."
374
461
  )
375
462
  ),
376
- v5.pipe(
377
- v5.string(),
378
- v5.description(
463
+ v6.pipe(
464
+ v6.string(),
465
+ v6.description(
379
466
  "A string that specifies the data element identifier of the data element within the provided namespace in the mdoc, e.g., first_name."
380
467
  )
381
468
  )
382
469
  ]),
383
- v5.description(
470
+ v6.description(
384
471
  "An array defining a claims path pointer into an mdoc. It must contain two elements of type string. The first element refers to a namespace and the second element refers to a data element identifier."
385
472
  )
386
473
  )
387
474
  });
388
- DcqlClaimsQuery2.vMdoc = v5.union([DcqlClaimsQuery2.vMdocNamespace, DcqlClaimsQuery2.vMdocPath]);
389
- DcqlClaimsQuery2.vModel = v5.union([DcqlClaimsQuery2.vMdoc, DcqlClaimsQuery2.vW3cSdJwtVc]);
475
+ DcqlClaimsQuery2.vMdoc = v6.union([DcqlClaimsQuery2.vMdocNamespace, DcqlClaimsQuery2.vMdocPath]);
476
+ DcqlClaimsQuery2.vModel = v6.union([DcqlClaimsQuery2.vMdoc, DcqlClaimsQuery2.vW3cSdJwtVc]);
390
477
  })(DcqlClaimsQuery || (DcqlClaimsQuery = {}));
391
478
 
392
479
  // src/dcql-parser/dcql-claims-query-result.ts
480
+ var getTrustedAuthorityValue = (credentialQuery) => v7.object({
481
+ authority: credentialQuery.trusted_authorities ? v7.variant(
482
+ "type",
483
+ credentialQuery.trusted_authorities.map(
484
+ (t) => v7.object({ type: v7.literal(t.type), value: v7.union(t.values.map((value) => v7.literal(value))) })
485
+ ),
486
+ `Credential query '${credentialQuery.id}' requires the credential to be issued by a trusted authority of type ${credentialQuery.trusted_authorities.map((t) => t.type).join(" | ")}, but none of the type or values match.`
487
+ ) : v7.optional(DcqlCredentialTrustedAuthority.vModel)
488
+ });
393
489
  var getClaimParser = (input) => {
394
490
  const { value, values } = input;
395
491
  if (value) {
396
- return vWithJT(v6.literal(value));
492
+ return vWithJT(v7.literal(value));
397
493
  }
398
494
  if (values) {
399
- return vWithJT(v6.union(values.map((val) => v6.literal(val))));
495
+ return vWithJT(v7.union(values.map((val) => v7.literal(val))));
400
496
  }
401
- return v6.nonNullish(v6.any());
497
+ return v7.nonNullish(v7.any());
402
498
  };
403
499
  var getNamespacesParser = (claimsQueries) => {
404
500
  const claimsForNamespace = {};
405
501
  for (const claimQuery of claimsQueries) {
406
- const mdocPathQuery = v6.is(DcqlClaimsQuery.vMdocNamespace, claimQuery) ? {
502
+ const mdocPathQuery = v7.is(DcqlClaimsQuery.vMdocNamespace, claimQuery) ? {
407
503
  id: claimQuery.id,
408
504
  path: [claimQuery.namespace, claimQuery.claim_name],
409
505
  values: claimQuery.values
@@ -417,9 +513,9 @@ var getNamespacesParser = (claimsQueries) => {
417
513
  }
418
514
  const parsersForNamespaces = Object.entries(claimsForNamespace).map(([namespace, claims]) => {
419
515
  const claimParsers = Object.fromEntries(claims.map((claim) => [claim.path[1], getClaimParser(claim)]));
420
- return [namespace, v6.object(claimParsers)];
516
+ return [namespace, v7.object(claimParsers)];
421
517
  });
422
- return v6.object(Object.fromEntries(parsersForNamespaces));
518
+ return v7.object(Object.fromEntries(parsersForNamespaces));
423
519
  };
424
520
  var getClaimQueryParser = (claimQuery, ctx) => {
425
521
  const { index, presentation } = ctx;
@@ -429,31 +525,31 @@ var getClaimQueryParser = (claimQuery, ctx) => {
429
525
  if (typeof pathElement === "number") {
430
526
  const elementParser = isLast ? vClaimParser : getClaimQueryParser(claimQuery, { ...ctx, index: index + 1 });
431
527
  if (presentation) {
432
- return v6.union([
433
- v6.pipe(
434
- v6.array(vJson),
435
- v6.length(1),
436
- v6.transform((input) => input[0]),
528
+ return v7.union([
529
+ v7.pipe(
530
+ v7.array(vJson),
531
+ v7.length(1),
532
+ v7.transform((input) => input[0]),
437
533
  elementParser
438
534
  ),
439
535
  elementParser
440
536
  ]);
441
537
  }
442
- return v6.pipe(
443
- v6.array(vJson),
444
- v6.transform((input) => input[pathElement]),
538
+ return v7.pipe(
539
+ v7.array(vJson),
540
+ v7.transform((input) => input[pathElement]),
445
541
  elementParser
446
542
  );
447
543
  }
448
544
  if (typeof pathElement === "string") {
449
- return v6.object({
545
+ return v7.object({
450
546
  [pathElement]: isLast ? vClaimParser : getClaimQueryParser(claimQuery, { ...ctx, index: index + 1 })
451
547
  });
452
548
  }
453
- return isLast ? v6.array(vClaimParser) : v6.array(getClaimQueryParser(claimQuery, { ...ctx, index: index + 1 }));
549
+ return isLast ? v7.array(vClaimParser) : v7.array(getClaimQueryParser(claimQuery, { ...ctx, index: index + 1 }));
454
550
  };
455
551
  var getJsonClaimsParser = (claimsQueries, ctx) => {
456
- const claimParser = v6.intersect(
552
+ const claimParser = v7.intersect(
457
553
  claimsQueries.map(
458
554
  (claimQuery) => getClaimQueryParser(claimQuery, {
459
555
  ...ctx,
@@ -487,12 +583,13 @@ var getJsonClaimsQueriesForClaimSet = (claimsQueries, claimSet) => {
487
583
  };
488
584
  var getMdocParser = (credentialQuery, ctx) => {
489
585
  const { claimSet } = ctx;
490
- const vDoctype = credentialQuery.meta?.doctype_value ? v6.literal(credentialQuery.meta.doctype_value) : v6.string();
586
+ const vDoctype = credentialQuery.meta?.doctype_value ? v7.literal(credentialQuery.meta.doctype_value) : v7.string();
491
587
  const claimSetQueries = credentialQuery.claims && claimSet ? getMdocClaimsQueriesForClaimSet(credentialQuery.claims, claimSet) : credentialQuery.claims;
492
- const credentialParser = v6.object({
493
- credential_format: v6.literal("mso_mdoc"),
588
+ const credentialParser = v7.object({
589
+ credential_format: v7.literal("mso_mdoc"),
494
590
  doctype: vDoctype,
495
- namespaces: claimSetQueries ? getNamespacesParser(claimSetQueries) : v6.record(v6.string(), v6.record(v6.string(), v6.unknown()))
591
+ namespaces: claimSetQueries ? getNamespacesParser(claimSetQueries) : v7.record(v7.string(), v7.record(v7.string(), v7.unknown())),
592
+ ...getTrustedAuthorityValue(credentialQuery).entries
496
593
  });
497
594
  return credentialParser;
498
595
  };
@@ -500,17 +597,34 @@ var getW3cVcSdJwtVcParser = (credentialQuery, ctx) => {
500
597
  const { claimSet } = ctx;
501
598
  const claimSetQueries = credentialQuery.claims && claimSet ? getJsonClaimsQueriesForClaimSet(credentialQuery.claims, claimSet) : credentialQuery.claims;
502
599
  if (credentialQuery.format === "vc+sd-jwt" || credentialQuery.format === "dc+sd-jwt") {
503
- return v6.object({
504
- credential_format: v6.literal(credentialQuery.format),
505
- vct: credentialQuery.meta?.vct_values ? v6.picklist(credentialQuery.meta.vct_values) : v6.string(),
506
- claims: claimSetQueries ? getJsonClaimsParser(claimSetQueries, ctx) : vJsonRecord
600
+ return v7.object({
601
+ credential_format: v7.literal(credentialQuery.format),
602
+ vct: credentialQuery.meta?.vct_values ? v7.picklist(credentialQuery.meta.vct_values) : v7.string(),
603
+ claims: claimSetQueries ? getJsonClaimsParser(claimSetQueries, ctx) : vJsonRecord,
604
+ // TODO: we should split up the:
605
+ // - vct
606
+ // - claim value
607
+ // - trusted authorities
608
+ // into separate validations so we can make the match result richer with specifically
609
+ // which steps failed, also we should look at showing exactly which claim paths failed.
610
+ ...getTrustedAuthorityValue(credentialQuery).entries
507
611
  });
508
612
  }
509
- const credentialParser = v6.object({
510
- credential_format: v6.picklist(["jwt_vc_json", "jwt_vc_json-ld"]),
511
- claims: claimSetQueries ? getJsonClaimsParser(claimSetQueries, ctx) : vJsonRecord
613
+ if (credentialQuery.format === "jwt_vc_json" || credentialQuery.format === "ldp_vc") {
614
+ return v7.object({
615
+ credential_format: v7.literal(credentialQuery.format),
616
+ claims: claimSetQueries ? getJsonClaimsParser(claimSetQueries, ctx) : vJsonRecord,
617
+ type: credentialQuery.meta?.type_values ? v7.union(
618
+ credentialQuery.meta.type_values.map((values) => vIncludesAll(values)),
619
+ `Type must include at least all values from one of the following subsets: ${credentialQuery.meta.type_values.map((values) => `[${values.join(", ")}]`).join(" | ")}`
620
+ ) : v7.array(v7.string()),
621
+ ...getTrustedAuthorityValue(credentialQuery).entries
622
+ });
623
+ }
624
+ throw new DcqlError({
625
+ code: "NOT_IMPLEMENTED",
626
+ message: `Usupported format '${credentialQuery.format}'`
512
627
  });
513
- return credentialParser;
514
628
  };
515
629
  var getCredentialQueryParser = (credentialQuery, ctx) => {
516
630
  if (credentialQuery.claim_sets && !ctx.claimSet) {
@@ -543,11 +657,11 @@ var runCredentialQuery = (credentialQuery, ctx) => {
543
657
  continue;
544
658
  }
545
659
  }
546
- const parseResult = v7.safeParse(credentialParser, credential);
660
+ const parseResult = v8.safeParse(credentialParser, credential);
547
661
  claimSetResult.push({
548
662
  ...parseResult,
549
663
  ...parseResult.issues && {
550
- flattened: v7.flatten(parseResult.issues)
664
+ flattened: v8.flatten(parseResult.issues)
551
665
  },
552
666
  input_credential_index: credentialIndex,
553
667
  claim_set_index: credentialQuery.claim_sets ? claimSetIndex : void 0
@@ -559,85 +673,107 @@ var runCredentialQuery = (credentialQuery, ctx) => {
559
673
  };
560
674
 
561
675
  // src/dcql-query-result/m-dcql-query-result.ts
562
- import * as v10 from "valibot";
676
+ import * as v11 from "valibot";
563
677
 
564
678
  // src/dcql-query/m-dcql-credential-query.ts
565
- import * as v8 from "valibot";
679
+ import * as v9 from "valibot";
566
680
  var DcqlCredentialQuery;
567
681
  ((DcqlCredentialQuery2) => {
568
- const vBase = v8.object({
569
- id: v8.pipe(
570
- v8.string(),
571
- v8.regex(idRegex),
572
- v8.description(
682
+ const vBase = v9.object({
683
+ id: v9.pipe(
684
+ v9.string(),
685
+ v9.regex(idRegex),
686
+ v9.description(
573
687
  `REQUIRED. A string identifying the Credential in the response and, if provided, the constraints in 'credential_sets'.`
574
688
  )
575
689
  ),
576
- claim_sets: v8.pipe(
577
- v8.optional(v8.pipe(v8.array(v8.pipe(v8.array(vIdString), vNonEmptyArray())), vNonEmptyArray())),
578
- v8.description(
690
+ claim_sets: v9.pipe(
691
+ v9.optional(v9.pipe(v9.array(v9.pipe(v9.array(vIdString), vNonEmptyArray())), vNonEmptyArray())),
692
+ v9.description(
579
693
  `OPTIONAL. A non-empty array containing arrays of identifiers for elements in 'claims' that specifies which combinations of 'claims' for the Credential are requested.`
580
694
  )
695
+ ),
696
+ trusted_authorities: v9.pipe(
697
+ v9.optional(v9.pipe(v9.array(DcqlTrustedAuthoritiesQuery.vModel), vNonEmptyArray())),
698
+ v9.description(
699
+ "OPTIONAL. A non-empty array of objects as defined in Section 6.1.1 that specifies expected authorities or trust frameworks that certify Issuers, that the Verifier will accept. Every Credential returned by the Wallet SHOULD match at least one of the conditions present in the corresponding trusted_authorities array if present."
700
+ )
581
701
  )
582
702
  });
583
- DcqlCredentialQuery2.vMdoc = v8.object({
703
+ DcqlCredentialQuery2.vMdoc = v9.object({
584
704
  ...vBase.entries,
585
- format: v8.pipe(
586
- v8.literal("mso_mdoc"),
587
- v8.description("REQUIRED. A string that specifies the format of the requested Verifiable Credential.")
705
+ format: v9.pipe(
706
+ v9.literal("mso_mdoc"),
707
+ v9.description("REQUIRED. A string that specifies the format of the requested Verifiable Credential.")
588
708
  ),
589
- claims: v8.pipe(
590
- v8.optional(v8.pipe(v8.array(DcqlClaimsQuery.vMdoc), vNonEmptyArray())),
591
- v8.description("OPTIONAL. A non-empty array of objects as that specifies claims in the requested Credential.")
709
+ claims: v9.pipe(
710
+ v9.optional(v9.pipe(v9.array(DcqlClaimsQuery.vMdoc), vNonEmptyArray())),
711
+ v9.description("OPTIONAL. A non-empty array of objects as that specifies claims in the requested Credential.")
592
712
  ),
593
- meta: v8.pipe(
594
- v8.optional(
595
- v8.object({
596
- doctype_value: v8.pipe(
597
- v8.optional(v8.string()),
598
- v8.description(
713
+ meta: v9.pipe(
714
+ v9.optional(
715
+ v9.object({
716
+ doctype_value: v9.pipe(
717
+ v9.optional(v9.string()),
718
+ v9.description(
599
719
  "OPTIONAL. String that specifies an allowed value for the doctype of the requested Verifiable Credential."
600
720
  )
601
721
  )
602
722
  })
603
723
  ),
604
- v8.description(
724
+ v9.description(
605
725
  "OPTIONAL. An object defining additional properties requested by the Verifier that apply to the metadata and validity data of the Credential."
606
726
  )
607
727
  )
608
728
  });
609
- DcqlCredentialQuery2.vSdJwtVc = v8.object({
729
+ DcqlCredentialQuery2.vSdJwtVc = v9.object({
610
730
  ...vBase.entries,
611
- format: v8.pipe(
612
- v8.picklist(["vc+sd-jwt", "dc+sd-jwt"]),
613
- v8.description("REQUIRED. A string that specifies the format of the requested Verifiable Credential.")
731
+ format: v9.pipe(
732
+ v9.picklist(["vc+sd-jwt", "dc+sd-jwt"]),
733
+ v9.description("REQUIRED. A string that specifies the format of the requested Verifiable Credential.")
614
734
  ),
615
- claims: v8.pipe(
616
- v8.optional(v8.pipe(v8.array(DcqlClaimsQuery.vW3cSdJwtVc), vNonEmptyArray())),
617
- v8.description("OPTIONAL. A non-empty array of objects as that specifies claims in the requested Credential.")
735
+ claims: v9.pipe(
736
+ v9.optional(v9.pipe(v9.array(DcqlClaimsQuery.vW3cSdJwtVc), vNonEmptyArray())),
737
+ v9.description("OPTIONAL. A non-empty array of objects as that specifies claims in the requested Credential.")
618
738
  ),
619
- meta: v8.pipe(
620
- v8.optional(
621
- v8.pipe(
622
- v8.object({
623
- vct_values: v8.optional(v8.array(v8.string()))
739
+ meta: v9.pipe(
740
+ v9.optional(
741
+ v9.pipe(
742
+ v9.object({
743
+ vct_values: v9.optional(v9.array(v9.string()))
624
744
  }),
625
- v8.description(
745
+ v9.description(
626
746
  "OPTIONAL. An array of strings that specifies allowed values for the type of the requested Verifiable Credential."
627
747
  )
628
748
  )
629
749
  ),
630
- v8.description(
750
+ v9.description(
631
751
  "OPTIONAL. An object defining additional properties requested by the Verifier that apply to the metadata and validity data of the Credential."
632
752
  )
633
753
  )
634
754
  });
635
- DcqlCredentialQuery2.vW3cVc = v8.object({
755
+ DcqlCredentialQuery2.vW3cVc = v9.object({
636
756
  ...vBase.entries,
637
- format: v8.picklist(["jwt_vc_json", "jwt_vc_json-ld"]),
638
- claims: v8.optional(v8.pipe(v8.array(DcqlClaimsQuery.vW3cSdJwtVc), vNonEmptyArray()))
757
+ format: v9.picklist(["jwt_vc_json", "ldp_vc"]),
758
+ claims: v9.optional(v9.pipe(v9.array(DcqlClaimsQuery.vW3cSdJwtVc), vNonEmptyArray())),
759
+ meta: v9.pipe(
760
+ v9.pipe(
761
+ v9.object({
762
+ type_values: v9.pipe(
763
+ v9.array(v9.pipe(v9.array(v9.string()), vNonEmptyArray())),
764
+ vNonEmptyArray(),
765
+ v9.description(
766
+ "REQUIRED. An array of string arrays that specifies the fully expanded types (IRIs) after the @context was applied that the Verifier accepts to be presented in the Presentation. Each of the top-level arrays specifies one alternative to match the type values of the Verifiable Credential against. Each inner array specifies a set of fully expanded types that MUST be present in the type property of the Verifiable Credential, regardless of order or the presence of additional types."
767
+ )
768
+ )
769
+ })
770
+ ),
771
+ v9.description(
772
+ "REQUIRED. An object defining additional properties requested by the Verifier that apply to the metadata and validity data of the Credential."
773
+ )
774
+ )
639
775
  });
640
- DcqlCredentialQuery2.vModel = v8.variant("format", [DcqlCredentialQuery2.vMdoc, DcqlCredentialQuery2.vSdJwtVc, DcqlCredentialQuery2.vW3cVc]);
776
+ DcqlCredentialQuery2.vModel = v9.variant("format", [DcqlCredentialQuery2.vMdoc, DcqlCredentialQuery2.vSdJwtVc, DcqlCredentialQuery2.vW3cVc]);
641
777
  DcqlCredentialQuery2.validate = (credentialQuery) => {
642
778
  claimSetIdsAreDefined(credentialQuery);
643
779
  };
@@ -661,26 +797,26 @@ var claimSetIdsAreDefined = (credentialQuery) => {
661
797
  };
662
798
 
663
799
  // src/dcql-query/m-dcql-credential-set-query.ts
664
- import * as v9 from "valibot";
800
+ import * as v10 from "valibot";
665
801
  var CredentialSetQuery;
666
802
  ((CredentialSetQuery2) => {
667
- CredentialSetQuery2.vModel = v9.object({
668
- options: v9.pipe(
669
- v9.array(v9.array(vIdString)),
803
+ CredentialSetQuery2.vModel = v10.object({
804
+ options: v10.pipe(
805
+ v10.array(v10.array(vIdString)),
670
806
  vNonEmptyArray(),
671
- v9.description(
807
+ v10.description(
672
808
  "REQUIRED. A non-empty array, where each value in the array is a list of Credential Query identifiers representing one set of Credentials that satisfies the use case."
673
809
  )
674
810
  ),
675
- required: v9.pipe(
676
- v9.optional(v9.boolean(), true),
677
- v9.description(
811
+ required: v10.pipe(
812
+ v10.optional(v10.boolean(), true),
813
+ v10.description(
678
814
  `OPTIONAL. Boolean which indicates whether this set of Credentials is required to satisfy the particular use case at the Verifier. If omitted, the default value is 'true'.`
679
815
  )
680
816
  ),
681
- purpose: v9.pipe(
682
- v9.optional(v9.union([v9.string(), v9.number(), v9.record(v9.string(), v9.unknown())])),
683
- v9.description("OPTIONAL. A string, number or object specifying the purpose of the query.")
817
+ purpose: v10.pipe(
818
+ v10.optional(v10.union([v10.string(), v10.number(), v10.record(v10.string(), v10.unknown())])),
819
+ v10.description("OPTIONAL. A string, number or object specifying the purpose of the query.")
684
820
  )
685
821
  });
686
822
  })(CredentialSetQuery || (CredentialSetQuery = {}));
@@ -688,39 +824,39 @@ var CredentialSetQuery;
688
824
  // src/dcql-query-result/m-dcql-query-result.ts
689
825
  var DcqlQueryResult;
690
826
  ((DcqlQueryResult2) => {
691
- DcqlQueryResult2.vCredentialQueryResult = v10.pipe(
692
- v10.array(v10.array(v10.union([v10.undefined(), DcqlCredential.vParseSuccess, DcqlCredential.vParseFailure]))),
827
+ DcqlQueryResult2.vCredentialQueryResult = v11.pipe(
828
+ v11.array(v11.array(v11.union([v11.undefined(), DcqlCredential.vParseSuccess, DcqlCredential.vParseFailure]))),
693
829
  vNonEmptyArray()
694
830
  );
695
- DcqlQueryResult2.vModel = v10.object({
696
- credentials: v10.pipe(
697
- v10.array(DcqlCredentialQuery.vModel),
831
+ DcqlQueryResult2.vModel = v11.object({
832
+ credentials: v11.pipe(
833
+ v11.array(DcqlCredentialQuery.vModel),
698
834
  vNonEmptyArray(),
699
- v10.description(
835
+ v11.description(
700
836
  "REQUIRED. A non-empty array of Credential Queries that specify the requested Verifiable Credentials."
701
837
  )
702
838
  ),
703
- credential_matches: v10.record(
704
- v10.pipe(vIdString),
705
- v10.union([
706
- v10.object({
839
+ credential_matches: v11.record(
840
+ v11.pipe(vIdString),
841
+ v11.union([
842
+ v11.object({
707
843
  ...DcqlCredential.vParseSuccess.entries,
708
- all: v10.pipe(
709
- v10.array(
710
- v10.pipe(
711
- v10.array(v10.union([v10.undefined(), DcqlCredential.vParseSuccess, DcqlCredential.vParseFailure])),
844
+ all: v11.pipe(
845
+ v11.array(
846
+ v11.pipe(
847
+ v11.array(v11.union([v11.undefined(), DcqlCredential.vParseSuccess, DcqlCredential.vParseFailure])),
712
848
  vNonEmptyArray()
713
849
  )
714
850
  ),
715
851
  vNonEmptyArray()
716
852
  )
717
853
  }),
718
- v10.object({
854
+ v11.object({
719
855
  success: DcqlCredential.vParseFailure.entries.success,
720
- all: v10.pipe(
721
- v10.array(
722
- v10.pipe(
723
- v10.array(v10.union([v10.undefined(), DcqlCredential.vParseSuccess, DcqlCredential.vParseFailure])),
856
+ all: v11.pipe(
857
+ v11.array(
858
+ v11.pipe(
859
+ v11.array(v11.union([v11.undefined(), DcqlCredential.vParseSuccess, DcqlCredential.vParseFailure])),
724
860
  vNonEmptyArray()
725
861
  )
726
862
  ),
@@ -729,49 +865,49 @@ var DcqlQueryResult;
729
865
  })
730
866
  ])
731
867
  ),
732
- credential_sets: v10.optional(
733
- v10.pipe(
734
- v10.array(
735
- v10.object({
868
+ credential_sets: v11.optional(
869
+ v11.pipe(
870
+ v11.array(
871
+ v11.object({
736
872
  ...CredentialSetQuery.vModel.entries,
737
- matching_options: v10.union([v10.undefined(), v10.pipe(v10.array(v10.array(v10.string())), vNonEmptyArray())])
873
+ matching_options: v11.union([v11.undefined(), v11.pipe(v11.array(v11.array(v11.string())), vNonEmptyArray())])
738
874
  })
739
875
  ),
740
876
  vNonEmptyArray(),
741
- v10.description(
877
+ v11.description(
742
878
  "OPTIONAL. A non-empty array of credential set queries that specifies additional constraints on which of the requested Verifiable Credentials to return."
743
879
  )
744
880
  )
745
881
  ),
746
- canBeSatisfied: v10.boolean()
882
+ canBeSatisfied: v11.boolean()
747
883
  });
748
884
  })(DcqlQueryResult || (DcqlQueryResult = {}));
749
885
 
750
886
  // src/dcql-presentation/m-dcql-presentation-result.ts
751
887
  var DcqlPresentationResult;
752
888
  ((DcqlPresentationResult2) => {
753
- DcqlPresentationResult2.vModel = v11.object({
754
- ...v11.omit(DcqlQueryResult.vModel, ["credential_matches"]).entries,
755
- invalid_matches: v11.union([
756
- v11.record(
757
- v11.pipe(vIdString),
758
- v11.object({
759
- ...v11.omit(DcqlCredential.vParseFailure, ["input_credential_index"]).entries,
760
- presentation_id: v11.pipe(vIdString)
889
+ DcqlPresentationResult2.vModel = v12.object({
890
+ ...v12.omit(DcqlQueryResult.vModel, ["credential_matches"]).entries,
891
+ invalid_matches: v12.union([
892
+ v12.record(
893
+ v12.pipe(vIdString),
894
+ v12.object({
895
+ ...v12.omit(DcqlCredential.vParseFailure, ["input_credential_index"]).entries,
896
+ presentation_id: v12.pipe(vIdString)
761
897
  })
762
898
  ),
763
- v11.undefined()
899
+ v12.undefined()
764
900
  ]),
765
- valid_matches: v11.record(
766
- v11.pipe(vIdString),
767
- v11.object({
768
- ...v11.omit(DcqlCredential.vParseSuccess, ["issues", "input_credential_index"]).entries,
769
- presentation_id: v11.pipe(vIdString)
901
+ valid_matches: v12.record(
902
+ v12.pipe(vIdString),
903
+ v12.object({
904
+ ...v12.omit(DcqlCredential.vParseSuccess, ["issues", "input_credential_index"]).entries,
905
+ presentation_id: v12.pipe(vIdString)
770
906
  })
771
907
  )
772
908
  });
773
909
  DcqlPresentationResult2.parse = (input) => {
774
- return v11.parse(DcqlPresentationResult2.vModel, input);
910
+ return v12.parse(DcqlPresentationResult2.vModel, input);
775
911
  };
776
912
  DcqlPresentationResult2.fromDcqlPresentation = (dcqlPresentation, ctx) => {
777
913
  const { dcqlQuery } = ctx;
@@ -826,7 +962,7 @@ var DcqlPresentationResult;
826
962
  ...dcqlQuery,
827
963
  canBeSatisfied: dqclQueryMatched,
828
964
  valid_matches: validMatches,
829
- invalid_matches: Object.keys(invalidMatches).length === 0 ? void 0 : {},
965
+ invalid_matches: Object.keys(invalidMatches).length === 0 ? void 0 : invalidMatches,
830
966
  credential_sets: credentialSetResults
831
967
  };
832
968
  };
@@ -842,15 +978,15 @@ var DcqlPresentationResult;
842
978
  })(DcqlPresentationResult || (DcqlPresentationResult = {}));
843
979
 
844
980
  // src/dcql-presentation/m-dcql-presentation.ts
845
- import * as v12 from "valibot";
981
+ import * as v13 from "valibot";
846
982
  var DcqlPresentation;
847
983
  ((DcqlPresentation2) => {
848
- DcqlPresentation2.vModel = v12.record(vIdString, v12.union([v12.string(), vJsonRecord]));
984
+ DcqlPresentation2.vModel = v13.record(vIdString, v13.union([v13.string(), vJsonRecord]));
849
985
  DcqlPresentation2.parse = (input) => {
850
986
  if (typeof input === "string") {
851
- return v12.parse(v12.pipe(v12.string(), vStringToJson, DcqlPresentation2.vModel), input);
987
+ return v13.parse(v13.pipe(v13.string(), vStringToJson, DcqlPresentation2.vModel), input);
852
988
  }
853
- return v12.parse(DcqlPresentation2.vModel, input);
989
+ return v13.parse(DcqlPresentation2.vModel, input);
854
990
  };
855
991
  DcqlPresentation2.encode = (input) => {
856
992
  return JSON.stringify(input);
@@ -902,20 +1038,20 @@ var runDcqlQuery = (dcqlQuery, ctx) => {
902
1038
  };
903
1039
 
904
1040
  // src/dcql-query/m-dcql-query.ts
905
- import * as v13 from "valibot";
1041
+ import * as v14 from "valibot";
906
1042
  var DcqlQuery;
907
1043
  ((DcqlQuery2) => {
908
- DcqlQuery2.vModel = v13.object({
909
- credentials: v13.pipe(
910
- v13.array(DcqlCredentialQuery.vModel),
1044
+ DcqlQuery2.vModel = v14.object({
1045
+ credentials: v14.pipe(
1046
+ v14.array(DcqlCredentialQuery.vModel),
911
1047
  vNonEmptyArray(),
912
- v13.description(
1048
+ v14.description(
913
1049
  "REQUIRED. A non-empty array of Credential Queries that specify the requested Verifiable Credentials."
914
1050
  )
915
1051
  ),
916
- credential_sets: v13.pipe(
917
- v13.optional(v13.pipe(v13.array(CredentialSetQuery.vModel), vNonEmptyArray())),
918
- v13.description(
1052
+ credential_sets: v14.pipe(
1053
+ v14.optional(v14.pipe(v14.array(CredentialSetQuery.vModel), vNonEmptyArray())),
1054
+ v14.description(
919
1055
  "OPTIONAL. A non-empty array of credential set queries that specifies additional constraints on which of the requested Verifiable Credentials to return."
920
1056
  )
921
1057
  )
@@ -929,7 +1065,7 @@ var DcqlQuery;
929
1065
  return runDcqlQuery(dcqlQuery, { credentials, presentation: false });
930
1066
  };
931
1067
  DcqlQuery2.parse = (input) => {
932
- return v13.parse(DcqlQuery2.vModel, input);
1068
+ return v14.parse(DcqlQuery2.vModel, input);
933
1069
  };
934
1070
  })(DcqlQuery || (DcqlQuery = {}));
935
1071
  var validateUniqueCredentialQueryIds = (query) => {
@@ -967,6 +1103,7 @@ export {
967
1103
  DcqlCredentialPresentation,
968
1104
  DcqlCredentialQuery,
969
1105
  DcqlCredentialSetError,
1106
+ DcqlCredentialTrustedAuthority,
970
1107
  DcqlError,
971
1108
  DcqlInvalidClaimsQueryIdError,
972
1109
  DcqlInvalidPresentationRecordError,
@@ -982,6 +1119,7 @@ export {
982
1119
  DcqlQueryResult,
983
1120
  DcqlSdJwtVcCredential,
984
1121
  DcqlSdJwtVcPresentation,
1122
+ DcqlTrustedAuthoritiesQuery,
985
1123
  DcqlUndefinedClaimSetIdError,
986
1124
  DcqlW3cVcCredential,
987
1125
  DcqlW3cVcPresentation,