dcql 0.2.21 → 0.2.22

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.js CHANGED
@@ -872,7 +872,7 @@ var DcqlPresentationResult;
872
872
  }
873
873
  }
874
874
  invalidMatches = Object.fromEntries(
875
- Object.entries(invalidMatches ?? {}).filter(([queryId, result]) => validMatches[queryId] === void 0)
875
+ Object.entries(invalidMatches ?? {}).filter(([queryId]) => validMatches[queryId] === void 0)
876
876
  );
877
877
  const credentialSetResults = dcqlQuery.credential_sets?.map((set) => {
878
878
  const matchingOptions = set.options.filter(
@@ -883,7 +883,7 @@ var DcqlPresentationResult;
883
883
  matching_options: matchingOptions.length > 0 ? matchingOptions : void 0
884
884
  };
885
885
  });
886
- const dqclQueryMatched = credentialSetResults ? credentialSetResults.every((set) => !set.required || set.matching_options) : Object.keys(invalidMatches).length === 0;
886
+ const dqclQueryMatched = credentialSetResults ? credentialSetResults.every((set) => !set.required || set.matching_options) : Object.keys(validMatches).length === ctx.dcqlQuery.credentials.length;
887
887
  return {
888
888
  ...dcqlQuery,
889
889
  canBeSatisfied: dqclQueryMatched,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/dcql-error/e-base.ts","../src/dcql-error/e-dcql.ts","../src/dcql-presentation/m-dcql-credential-presentation.ts","../src/u-dcql-credential.ts","../src/u-dcql.ts","../src/u-model.ts","../src/dcql-presentation/m-dcql-presentation-result.ts","../src/dcql-parser/dcql-credential-query-result.ts","../src/dcql-parser/dcql-claims-query-result.ts","../src/dcql-query/m-dcql-claims-query.ts","../src/dcql-query-result/m-dcql-query-result.ts","../src/dcql-query/m-dcql-credential-query.ts","../src/dcql-query/m-dcql-credential-set-query.ts","../src/dcql-presentation/m-dcql-presentation.ts","../src/dcql-query-result/run-dcql-query.ts","../src/dcql-query/m-dcql-query.ts"],"sourcesContent":["export * from './dcql-error/index.js'\nexport * from './dcql-presentation/index.js'\nexport * from './dcql-query-result/index.js'\nexport * from './dcql-query/index.js'\n\nexport {\n DcqlCredential,\n DcqlMdocCredential,\n DcqlSdJwtVcCredential,\n DcqlW3cVcCredential,\n} from './u-dcql-credential.js'\n","function isObject(value: unknown): value is Record<string, unknown> {\n return !!value && !Array.isArray(value) && typeof value === 'object'\n}\n\nclass UnknownCauseError extends Error {\n [key: string]: unknown\n}\n\nexport function getCauseFromUnknown(cause: unknown): Error | undefined {\n if (cause instanceof Error) {\n return cause\n }\n\n const type = typeof cause\n if (type === 'undefined' || type === 'function' || cause === null) {\n return undefined\n }\n\n // Primitive types just get wrapped in an error\n if (type !== 'object') {\n return new Error(String(cause))\n }\n\n // If it's an object, we'll create a synthetic error\n if (isObject(cause)) {\n const err = new UnknownCauseError()\n for (const key in cause) {\n err[key] = cause[key]\n }\n return err\n }\n\n return undefined\n}\n\nexport const isDcqlError = (cause: unknown): cause is DcqlError => {\n if (cause instanceof DcqlError) {\n return true\n }\n if (cause instanceof Error && cause.name === 'DcqlError') {\n // https://github.com/trpc/trpc/pull/4848\n return true\n }\n\n return false\n}\n\nexport function getDcqlErrorFromUnknown(cause: unknown): DcqlError {\n if (isDcqlError(cause)) {\n return cause\n }\n\n const dcqlError = new DcqlError({\n code: 'INTERNAL_SERVER_ERROR',\n cause,\n })\n\n // Inherit stack from error\n if (cause instanceof Error && cause.stack) {\n dcqlError.stack = cause.stack\n }\n\n return dcqlError\n}\n\ntype DCQL_ERROR_CODE = 'PARSE_ERROR' | 'INTERNAL_SERVER_ERROR' | 'NOT_IMPLEMENTED' | 'BAD_REQUEST'\n\nexport class DcqlError extends Error {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore override doesn't work in all environments due to \"This member cannot have an 'override' modifier because it is not declared in the base class 'Error'\"\n public override readonly cause?: Error\n public readonly code\n\n constructor(opts: {\n message?: string\n code: DCQL_ERROR_CODE\n cause?: unknown\n }) {\n const cause = getCauseFromUnknown(opts.cause)\n const message = opts.message ?? cause?.message ?? opts.code\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore https://github.com/tc39/proposal-error-cause\n super(message, { cause })\n\n this.code = opts.code\n this.name = 'DcqlError'\n\n if (!this.cause) {\n // < ES2022 / < Node 16.9.0 compatability\n this.cause = cause\n }\n }\n}\n","import { DcqlError } from './e-base.js'\n\nexport class DcqlCredentialSetError extends DcqlError {\n constructor(opts: { message: string; cause?: unknown }) {\n super({ code: 'BAD_REQUEST', ...opts })\n }\n}\n\nexport class DcqlUndefinedClaimSetIdError extends DcqlError {\n constructor(opts: { message: string; cause?: unknown }) {\n super({ code: 'BAD_REQUEST', ...opts })\n }\n}\n\nexport class DcqlNonUniqueCredentialQueryIdsError extends DcqlError {\n constructor(opts: { message: string; cause?: unknown }) {\n super({ code: 'BAD_REQUEST', ...opts })\n }\n}\n\nexport class DcqlParseError extends DcqlError {\n constructor(opts: { message: string; cause?: unknown }) {\n super({ code: 'PARSE_ERROR', ...opts })\n }\n}\n\nexport class DcqlInvalidClaimsQueryIdError extends DcqlError {\n constructor(opts: { message: string; cause?: unknown }) {\n super({ code: 'BAD_REQUEST', ...opts })\n }\n}\n\nexport class DcqlMissingClaimSetParseError extends DcqlError {\n constructor(opts: { message: string; cause?: unknown }) {\n super({ code: 'PARSE_ERROR', ...opts })\n }\n}\n\nexport class DcqlInvalidPresentationRecordError extends DcqlError {\n constructor(opts: { message: string; cause?: unknown }) {\n super({ code: 'BAD_REQUEST', ...opts })\n }\n}\n\nexport class DcqlPresentationResultError extends DcqlError {\n constructor(opts: { message: string; cause?: unknown }) {\n super({ code: 'BAD_REQUEST', ...opts })\n }\n}\n","import * as v from 'valibot'\nimport { DcqlMdocCredential, DcqlSdJwtVcCredential, DcqlW3cVcCredential } from '../u-dcql-credential'\nimport type { InferModelTypes } from '../u-model'\nimport { Model } from '../u-model'\n\nexport namespace DcqlMdocPresentation {\n export const vModel = DcqlMdocCredential.vModel\n export const model = new Model({ vModel })\n export type Model = InferModelTypes<typeof model>\n}\nexport type DcqlMdocPresentation = DcqlMdocPresentation.Model['Output']\n\nexport namespace DcqlSdJwtVcPresentation {\n export const vModel = DcqlSdJwtVcCredential.vModel\n export const model = new Model({ vModel })\n export type Model = InferModelTypes<typeof model>\n}\nexport type DcqlSdJwtVcPresentation = DcqlSdJwtVcPresentation.Model['Output']\n\nexport namespace DcqlW3cVcPresentation {\n export const vModel = DcqlW3cVcCredential.vModel\n export const model = new Model({ vModel })\n export type Model = InferModelTypes<typeof model>\n}\nexport type DcqlW3cVcPresentation = DcqlW3cVcPresentation.Model['Output']\n\nexport namespace DcqlCredentialPresentation {\n export const model = new Model({\n vModel: v.variant('credential_format', [\n DcqlMdocPresentation.vModel,\n DcqlSdJwtVcPresentation.vModel,\n DcqlW3cVcPresentation.vModel,\n ]),\n })\n export type Model = InferModelTypes<typeof model>\n}\nexport type DcqlCredentialPresentation = DcqlCredentialPresentation.Model['Output']\n","import * as v from 'valibot'\nimport { vJsonRecord, vNonEmptyArray } from './u-dcql.js'\nimport type { InferModelTypes } from './u-model.js'\nimport { Model } from './u-model.js'\n\nexport namespace DcqlMdocCredential {\n export const vNamespaces = v.record(v.string(), v.record(v.string(), v.unknown()))\n export const vModel = v.object({\n credential_format: v.literal('mso_mdoc'),\n doctype: v.string(),\n namespaces: vNamespaces,\n })\n\n export const model = new Model({ vModel })\n export type Model = InferModelTypes<typeof model>\n export type NameSpaces = v.InferOutput<typeof vNamespaces>\n}\nexport type DcqlMdocCredential = DcqlMdocCredential.Model['Output']\n\nexport namespace DcqlSdJwtVcCredential {\n export const vClaims = vJsonRecord\n export const vModel = v.object({\n credential_format: v.picklist(['vc+sd-jwt', 'dc+sd-jwt']),\n vct: v.string(),\n claims: vClaims,\n })\n export const model = new Model({ vModel })\n export type Model = InferModelTypes<typeof model>\n export type Claims = Model['Output']['claims']\n}\nexport type DcqlSdJwtVcCredential = DcqlSdJwtVcCredential.Model['Output']\n\nexport namespace DcqlW3cVcCredential {\n export const vClaims = vJsonRecord\n export const vModel = v.object({\n credential_format: v.picklist(['jwt_vc_json-ld', 'jwt_vc_json']),\n claims: vClaims,\n })\n\n export const model = new Model({ vModel })\n export type Model = InferModelTypes<typeof model>\n export type Claims = Model['Output']['claims']\n}\nexport type DcqlW3cVcCredential = DcqlW3cVcCredential.Model['Output']\n\nexport namespace DcqlCredential {\n export const vModel = v.variant('credential_format', [\n DcqlMdocCredential.vModel,\n DcqlSdJwtVcCredential.vModel,\n DcqlW3cVcCredential.vModel,\n ])\n\n export const vParseSuccess = v.object({\n success: v.literal(true),\n typed: v.literal(true),\n issues: v.optional(v.undefined()),\n input_credential_index: v.number(),\n claim_set_index: v.union([v.number(), v.undefined()]),\n output: DcqlCredential.vModel,\n })\n\n export const vParseFailure = v.object({\n success: v.literal(false),\n typed: v.boolean(),\n output: v.unknown(),\n issues: v.pipe(v.array(v.unknown()), vNonEmptyArray()),\n input_credential_index: v.number(),\n claim_set_index: v.union([v.number(), v.undefined()]),\n })\n export const model = new Model({ vModel })\n export type Model = InferModelTypes<typeof model>\n}\nexport type DcqlCredential = DcqlCredential.Model['Output']\n","import * as v from 'valibot'\nimport type { UnknownBaseSchema } from './u-model'\nexport const idRegex = /^[a-zA-Z0-9_-]+$/\n\nexport const vNonEmptyArray = <T extends unknown[]>() => {\n return v.custom<[T[number], ...T]>((input) => (input as T).length > 0)\n}\n\nexport const vIdString = v.pipe(v.string(), v.regex(idRegex), v.nonEmpty())\n\nexport type Json = string | number | boolean | null | { [key: string]: Json } | Json[]\n\ninterface HasToJson {\n toJson(): Json\n}\n\nfunction isToJsonable(value: unknown): value is HasToJson {\n if (value === null || typeof value !== 'object') return false\n\n // biome-ignore lint/suspicious/noExplicitAny: <explanation>\n const toJsonFn = (value as any).toJson\n return typeof toJsonFn === 'function'\n}\n\nexport const vWithJT = <Schema extends UnknownBaseSchema>(schema: Schema) =>\n v.pipe(\n v.custom<v.InferInput<Schema>>(() => true),\n v.rawTransform<v.InferInput<Schema>, v.InferOutput<Schema>>(({ dataset, addIssue, NEVER }) => {\n const result = v.safeParse(schema, dataset.value)\n if (result.success) return dataset.value\n\n if (!isToJsonable(dataset.value)) {\n for (const safeParseIssue of result.issues) {\n addIssue({\n ...safeParseIssue,\n expected: safeParseIssue.expected ?? undefined,\n })\n }\n\n return NEVER\n }\n\n let json: Json\n\n try {\n json = dataset.value.toJson()\n } catch (error) {\n for (const safeParseIssue of result.issues) {\n addIssue({\n ...safeParseIssue,\n expected: safeParseIssue.expected ?? undefined,\n })\n }\n addIssue({ message: 'Json Transformation failed' })\n return NEVER\n }\n\n const safeParseResult: v.SafeParseResult<Schema> = v.safeParse(schema, json)\n if (safeParseResult.success) return dataset.value\n\n for (const safeParseIssue of safeParseResult.issues) {\n addIssue({\n ...safeParseIssue,\n expected: safeParseIssue.expected ?? undefined,\n })\n }\n\n return NEVER\n })\n )\n\nexport const vJsonLiteral = v.union([v.string(), v.number(), v.boolean(), v.null()])\n\nexport type JsonLiteral = v.InferOutput<typeof vJsonLiteral>\n\nexport const vJson: v.GenericSchema<Json> = v.lazy(() =>\n v.union([vJsonLiteral, v.array(vJson), v.record(v.string(), vJson)])\n)\n\nexport const vJsonWithJT: v.GenericSchema<Json> = v.lazy(() =>\n vWithJT(v.union([vJsonLiteral, v.array(vJson), v.record(v.string(), vJson)]))\n)\n\nexport const vJsonRecord = v.record(v.string(), vJson)\nexport type JsonRecord = v.InferOutput<typeof vJsonRecord>\n\nexport const vStringToJson = v.rawTransform<string, Json>(({ dataset, addIssue, NEVER }) => {\n try {\n return JSON.parse(dataset.value) as Json\n } catch (error) {\n addIssue({ message: 'Invalid JSON' })\n return NEVER\n }\n})\n","import * as v from 'valibot'\nimport { DcqlParseError } from './dcql-error/e-dcql'\n\nexport type UnknownBaseSchema = v.BaseSchema<unknown, unknown, v.BaseIssue<unknown>>\n\ntype EnsureOutputAssignableToInput<T extends UnknownBaseSchema> = v.InferOutput<T> extends v.InferInput<T> ? T : never\n\nexport class Model<T extends UnknownBaseSchema> {\n constructor(private input: { vModel: EnsureOutputAssignableToInput<T> }) {}\n\n public get v() {\n return this.input.vModel\n }\n\n public parse(input: T) {\n const result = this.safeParse(input)\n\n if (result.success) {\n return result.output\n }\n\n return new DcqlParseError({\n message: JSON.stringify(result.flattened),\n cause: result.error,\n })\n }\n\n public safeParse(\n input: unknown\n ):\n | { success: true; output: v.InferOutput<T> }\n | { success: false; flattened: v.FlatErrors<T>; error: v.ValiError<T> } {\n const res = v.safeParse(this.input.vModel, input)\n if (res.success) {\n return { success: true, output: res.output }\n }\n return {\n success: false,\n error: new v.ValiError(res.issues),\n flattened: v.flatten<T>(res.issues),\n }\n }\n\n public is(input: unknown): input is v.InferOutput<T> {\n return v.is(this.v, input)\n }\n}\n\n// biome-ignore lint/suspicious/noExplicitAny: <explanation>\nexport type InferModelTypes<T extends Model<any>> = T extends Model<infer U>\n ? {\n Input: v.InferInput<U>\n Output: v.InferOutput<U>\n }\n : never\n","import * as v from 'valibot'\n\nimport { DcqlInvalidPresentationRecordError, DcqlPresentationResultError } from '../dcql-error/e-dcql.js'\nimport { runCredentialQuery } from '../dcql-parser/dcql-credential-query-result.js'\nimport { DcqlQueryResult } from '../dcql-query-result/m-dcql-query-result.js'\nimport type { DcqlQuery } from '../dcql-query/m-dcql-query.js'\nimport { DcqlCredential } from '../u-dcql-credential.js'\nimport { vIdString } from '../u-dcql.js'\nimport type { DcqlCredentialPresentation } from './m-dcql-credential-presentation.js'\n\nexport namespace DcqlPresentationResult {\n export const vModel = v.object({\n ...v.omit(DcqlQueryResult.vModel, ['credential_matches']).entries,\n\n invalid_matches: v.union([\n v.record(\n v.pipe(vIdString),\n v.object({\n ...v.omit(DcqlCredential.vParseFailure, ['input_credential_index']).entries,\n presentation_id: v.pipe(vIdString),\n })\n ),\n v.undefined(),\n ]),\n\n valid_matches: v.record(\n v.pipe(vIdString),\n v.object({\n ...v.omit(DcqlCredential.vParseSuccess, ['issues', 'input_credential_index']).entries,\n presentation_id: v.pipe(vIdString),\n })\n ),\n })\n\n export type Input = v.InferInput<typeof vModel>\n export type Output = v.InferOutput<typeof vModel>\n\n export const parse = (input: Input | DcqlQueryResult) => {\n return v.parse(vModel, input)\n }\n\n /**\n * Query if the presentation record can be satisfied by the provided presentations\n * considering the dcql query\n *\n * @param dcqlQuery\n * @param dcqlPresentation\n */\n export const fromDcqlPresentation = (\n dcqlPresentation: Record<string, DcqlCredentialPresentation>,\n ctx: { dcqlQuery: DcqlQuery }\n ): Output => {\n const { dcqlQuery } = ctx\n\n const presentationQueriesResults = Object.fromEntries(\n Object.entries(dcqlPresentation).map(([queryId, presentation]) => {\n const credentialQuery = dcqlQuery.credentials.find((c) => c.id === queryId)\n if (!credentialQuery) {\n throw new DcqlPresentationResultError({\n message: `Query ${queryId} not found in the dcql query. Cannot validate presentation.`,\n })\n }\n\n return [\n queryId,\n runCredentialQuery(credentialQuery, {\n presentation: true,\n credentials: [presentation],\n }),\n ]\n })\n )\n\n let invalidMatches: DcqlPresentationResult['invalid_matches'] = {}\n const validMatches: DcqlPresentationResult['valid_matches'] = {}\n\n for (const [queryId, presentationQueryResult] of Object.entries(presentationQueriesResults)) {\n for (const presentationQueryResultForClaimSet of presentationQueryResult) {\n // NOTE: result can be undefined, but this is only the case if there was a valid claim\n // set match previously and we skip other claim set matching. We don't add these to the parse\n // result.\n const result = presentationQueryResultForClaimSet[0]\n\n if (result?.success) {\n const { issues, input_credential_index, ...rest } = result\n validMatches[queryId] = { ...rest, presentation_id: queryId }\n } else if (result?.success === false) {\n const { input_credential_index, ...rest } = result\n invalidMatches[queryId] = {\n ...rest,\n presentation_id: queryId,\n }\n }\n }\n }\n\n // Only keep the invalid matches that do not have a valid match as well\n invalidMatches = Object.fromEntries(\n Object.entries(invalidMatches ?? {}).filter(([queryId, result]) => validMatches[queryId] === undefined)\n )\n\n const credentialSetResults = dcqlQuery.credential_sets?.map((set) => {\n const matchingOptions = set.options.filter((option) =>\n option.every((credentialQueryId) => validMatches[credentialQueryId]?.success)\n )\n\n return {\n ...set,\n matching_options: matchingOptions.length > 0 ? (matchingOptions as [string[], ...string[][]]) : undefined,\n }\n }) as DcqlQueryResult.Output['credential_sets']\n\n const dqclQueryMatched = credentialSetResults\n ? credentialSetResults.every((set) => !set.required || set.matching_options)\n : Object.keys(invalidMatches).length === 0\n\n return {\n ...dcqlQuery,\n canBeSatisfied: dqclQueryMatched,\n valid_matches: validMatches,\n invalid_matches: Object.keys(invalidMatches).length === 0 ? undefined : {},\n credential_sets: credentialSetResults,\n }\n }\n\n export const validate = (dcqlQueryResult: DcqlPresentationResult) => {\n if (!dcqlQueryResult.canBeSatisfied) {\n throw new DcqlInvalidPresentationRecordError({\n message: 'Invalid Presentation record',\n cause: dcqlQueryResult,\n })\n }\n\n return dcqlQueryResult satisfies Output\n }\n}\nexport type DcqlPresentationResult = DcqlPresentationResult.Output\n","import * as v from 'valibot'\nimport type { DcqlQueryResult } from '../dcql-query-result/m-dcql-query-result.js'\nimport type { DcqlCredentialQuery } from '../dcql-query/m-dcql-credential-query.js'\nimport type { DcqlCredential } from '../u-dcql-credential.js'\nimport type {} from '../u-dcql.js'\nimport { getCredentialQueryParser } from './dcql-claims-query-result.js'\n\nexport const runCredentialQuery = (\n credentialQuery: DcqlCredentialQuery,\n ctx: {\n credentials: DcqlCredential[]\n presentation: boolean\n }\n): DcqlQueryResult.CredentialQueryResult => {\n const { credentials, presentation } = ctx\n const claimSets = credentialQuery.claim_sets ?? [undefined]\n\n const credentialQueryResult: v.InferInput<typeof DcqlQueryResult.vCredentialQueryResult> = []\n\n for (const [claimSetIndex, claim_set] of claimSets.entries()) {\n const credentialParser = getCredentialQueryParser(credentialQuery, {\n claimSet: claim_set,\n presentation,\n })\n\n const claimSetResult: (typeof credentialQueryResult)[number] = []\n\n for (const [credentialIndex, credential] of credentials.entries()) {\n if (claimSetIndex > 0) {\n // if one the credential was successfully parsed against a previous claimsset we don't need to further validate other claim sets\n const previous = credentialQueryResult[claimSetIndex - 1][credentialIndex]\n\n // if the previous credential was successfully parsed we don't need to further validate the current credential\n // we set all further parsing attempts to undefined\n if (previous?.success || !previous) {\n claimSetResult[credentialIndex] = undefined\n continue\n }\n }\n\n const parseResult = v.safeParse(credentialParser, credential)\n claimSetResult.push({\n ...parseResult,\n ...(parseResult.issues && {\n flattened: v.flatten<typeof credentialParser>(parseResult.issues),\n }),\n input_credential_index: credentialIndex,\n claim_set_index: credentialQuery.claim_sets ? claimSetIndex : undefined,\n })\n }\n\n credentialQueryResult.push(claimSetResult)\n }\n\n return credentialQueryResult as DcqlQueryResult.CredentialQueryResult\n}\n","import * as v from 'valibot'\nimport { DcqlInvalidClaimsQueryIdError, DcqlMissingClaimSetParseError } from '../dcql-error/e-dcql.js'\nimport { DcqlClaimsQuery } from '../dcql-query/m-dcql-claims-query.js'\nimport type { DcqlCredentialQuery } from '../dcql-query/m-dcql-credential-query.js'\nimport { vWithJT } from '../u-dcql.js'\nimport { vJson, vJsonRecord } from '../u-dcql.js'\n\nconst getClaimParser = (input: {\n value?: string | number | boolean\n values?: (string | number | boolean)[]\n}) => {\n const { value, values } = input\n if (value) {\n return vWithJT(v.literal(value))\n }\n\n if (values) {\n return vWithJT(v.union(values.map((val) => v.literal(val))))\n }\n\n return v.nonNullish(v.any())\n}\n\nexport const getNamespacesParser = (claimsQueries: DcqlClaimsQuery.Mdoc[]) => {\n const claimsForNamespace: Record<string, DcqlClaimsQuery.MdocPath[]> = {}\n\n for (const claimQuery of claimsQueries) {\n // Normalize the query to the latest path syntax\n const mdocPathQuery: DcqlClaimsQuery.MdocPath = v.is(DcqlClaimsQuery.vMdocNamespace, claimQuery)\n ? {\n id: claimQuery.id,\n path: [claimQuery.namespace, claimQuery.claim_name],\n values: claimQuery.values,\n }\n : claimQuery\n\n const namespace = mdocPathQuery.path[0]\n if (claimsForNamespace[namespace]) {\n claimsForNamespace[namespace]?.push({ ...mdocPathQuery })\n } else {\n claimsForNamespace[namespace] = [{ ...mdocPathQuery }]\n }\n }\n\n const parsersForNamespaces = Object.entries(claimsForNamespace).map(([namespace, claims]) => {\n const claimParsers = Object.fromEntries(claims.map((claim) => [claim.path[1], getClaimParser(claim)]))\n return [namespace, v.object(claimParsers)]\n })\n\n return v.object(Object.fromEntries(parsersForNamespaces))\n}\n\nconst getClaimQueryParser = (\n claimQuery: DcqlClaimsQuery.W3cAndSdJwtVc,\n ctx: { index: number; presentation: boolean }\n): typeof vJson => {\n const { index, presentation } = ctx\n const pathElement = claimQuery.path[index]\n const isLast = index === claimQuery.path.length - 1\n\n const vClaimParser = getClaimParser(claimQuery)\n\n if (typeof pathElement === 'number') {\n const elementParser = isLast ? vClaimParser : getClaimQueryParser(claimQuery, { ...ctx, index: index + 1 })\n\n if (presentation) {\n // We allow both the concrete value and an array of one value\n return v.union([\n v.pipe(\n v.array(vJson),\n v.length(1),\n v.transform((input) => input[0]),\n elementParser\n ),\n elementParser,\n ])\n }\n\n return v.pipe(\n v.array(vJson),\n v.transform((input) => input[pathElement]),\n elementParser\n )\n }\n if (typeof pathElement === 'string') {\n return v.object({\n [pathElement]: isLast ? vClaimParser : getClaimQueryParser(claimQuery, { ...ctx, index: index + 1 }),\n })\n }\n return isLast ? v.array(vClaimParser) : v.array(getClaimQueryParser(claimQuery, { ...ctx, index: index + 1 }))\n}\n\nexport const getJsonClaimsParser = (claimsQueries: DcqlClaimsQuery.W3cAndSdJwtVc[], ctx: { presentation: boolean }) => {\n const claimParser = v.intersect(\n claimsQueries.map(\n (claimQuery) =>\n getClaimQueryParser(claimQuery, {\n ...ctx,\n index: 0,\n }) as typeof vJsonRecord\n )\n )\n\n return claimParser\n}\n\nexport const getMdocClaimsQueriesForClaimSet = (\n claimsQueries: DcqlClaimsQuery.Mdoc[],\n claimSet: string[]\n): DcqlClaimsQuery.Mdoc[] => {\n return claimSet.map((credential_id) => {\n const query = claimsQueries.find((query) => query.id === credential_id)\n if (!query) {\n throw new DcqlInvalidClaimsQueryIdError({\n message: `Claims-query with id '${credential_id}' not found.`,\n })\n }\n\n return query\n })\n}\n\nexport const getJsonClaimsQueriesForClaimSet = (\n claimsQueries: DcqlClaimsQuery.W3cAndSdJwtVc[],\n claimSet: string[]\n): DcqlClaimsQuery.W3cAndSdJwtVc[] => {\n return claimSet.map((credential_id) => {\n const query = claimsQueries.find((query) => query.id === credential_id)\n if (!query) {\n throw new DcqlInvalidClaimsQueryIdError({\n message: `Claims-query with id '${credential_id}' not found.`,\n })\n }\n return query\n })\n}\n\nconst getMdocParser = (\n credentialQuery: DcqlCredentialQuery.Mdoc,\n ctx: { claimSet?: NonNullable<DcqlCredentialQuery['claim_sets']>[number] }\n) => {\n const { claimSet } = ctx\n\n const vDoctype = credentialQuery.meta?.doctype_value ? v.literal(credentialQuery.meta.doctype_value) : v.string()\n\n const claimSetQueries =\n credentialQuery.claims && claimSet\n ? getMdocClaimsQueriesForClaimSet(credentialQuery.claims, claimSet)\n : credentialQuery.claims\n\n const credentialParser = v.object({\n credential_format: v.literal('mso_mdoc'),\n doctype: vDoctype,\n namespaces: claimSetQueries\n ? getNamespacesParser(claimSetQueries)\n : v.record(v.string(), v.record(v.string(), v.unknown())),\n })\n\n return credentialParser\n}\n\nconst getW3cVcSdJwtVcParser = (\n credentialQuery: DcqlCredentialQuery.SdJwtVc | DcqlCredentialQuery.W3cVc,\n ctx: {\n claimSet?: NonNullable<DcqlCredentialQuery['claim_sets']>[number]\n presentation: boolean\n }\n) => {\n const { claimSet } = ctx\n const claimSetQueries =\n credentialQuery.claims && claimSet\n ? getJsonClaimsQueriesForClaimSet(credentialQuery.claims, claimSet)\n : credentialQuery.claims\n\n if (credentialQuery.format === 'vc+sd-jwt' || credentialQuery.format === 'dc+sd-jwt') {\n return v.object({\n credential_format: v.literal(credentialQuery.format),\n vct: credentialQuery.meta?.vct_values ? v.picklist(credentialQuery.meta.vct_values) : v.string(),\n claims: claimSetQueries ? getJsonClaimsParser(claimSetQueries, ctx) : vJsonRecord,\n })\n }\n const credentialParser = v.object({\n credential_format: v.picklist(['jwt_vc_json', 'jwt_vc_json-ld']),\n claims: claimSetQueries ? getJsonClaimsParser(claimSetQueries, ctx) : vJsonRecord,\n })\n\n return credentialParser\n}\n\nexport const getCredentialQueryParser = (\n credentialQuery: DcqlCredentialQuery,\n ctx: {\n claimSet?: NonNullable<DcqlCredentialQuery['claim_sets']>[number]\n presentation: boolean\n }\n) => {\n if (credentialQuery.claim_sets && !ctx.claimSet) {\n throw new DcqlMissingClaimSetParseError({\n message: 'credentialQuery specifies claim_sets but no claim_set for parsing is provided.',\n })\n }\n\n if (credentialQuery.format === 'mso_mdoc') {\n return getMdocParser(credentialQuery, ctx)\n }\n return getW3cVcSdJwtVcParser(credentialQuery, ctx)\n}\n","import * as v from 'valibot'\nimport { vIdString, vNonEmptyArray } from '../u-dcql.js'\n\n/**\n * Specifies claims withing a requested Credential.\n */\nexport namespace DcqlClaimsQuery {\n export const vValue = v.union([v.string(), v.pipe(v.number(), v.integer()), v.boolean()])\n\n export const vPath = v.union([v.string(), v.pipe(v.number(), v.integer(), v.minValue(0)), v.null()])\n\n export const vW3cSdJwtVc = v.object({\n id: v.pipe(\n v.optional(vIdString),\n v.description(\n '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.'\n )\n ),\n path: v.pipe(\n v.array(vPath),\n vNonEmptyArray(),\n v.description(\n 'A non-empty array representing a claims path pointer that specifies the path to a claim within the Verifiable Credential.'\n )\n ),\n values: v.pipe(\n v.optional(v.array(vValue)),\n v.description(\n '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.'\n )\n ),\n })\n export type W3cAndSdJwtVc = v.InferOutput<typeof vW3cSdJwtVc>\n\n const vMdocBase = v.object({\n id: v.pipe(\n v.optional(vIdString),\n v.description(\n '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.'\n )\n ),\n values: v.pipe(\n v.optional(v.array(vValue)),\n v.description(\n '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.'\n )\n ),\n })\n\n // Syntax up until Draft 23 of OID4VP. Keeping due to Draft 23 having\n // reach ID-3 status and thus being targeted by several implementations\n export const vMdocNamespace = v.object({\n ...vMdocBase.entries,\n\n namespace: v.pipe(\n v.string(),\n v.description(\n 'A string that specifies the namespace of the data element within the mdoc, e.g., org.iso.18013.5.1.'\n )\n ),\n claim_name: v.pipe(\n v.string(),\n v.description(\n 'A string that specifies the data element identifier of the data element within the provided namespace in the mdoc, e.g., first_name.'\n )\n ),\n })\n\n // Syntax starting from Draft 24 of OID4VP\n export const vMdocPath = v.object({\n ...vMdocBase.entries,\n\n intent_to_retain: v.pipe(\n v.optional(v.boolean()),\n v.description(\n 'A boolean that is equivalent to `IntentToRetain` variable defined in Section 8.3.2.1.2.1 of [@ISO.18013-5].'\n )\n ),\n\n path: v.pipe(\n v.tuple([\n v.pipe(\n v.string(),\n v.description(\n 'A string that specifies the namespace of the data element within the mdoc, e.g., org.iso.18013.5.1.'\n )\n ),\n v.pipe(\n v.string(),\n v.description(\n 'A string that specifies the data element identifier of the data element within the provided namespace in the mdoc, e.g., first_name.'\n )\n ),\n ]),\n v.description(\n '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.'\n )\n ),\n })\n export const vMdoc = v.union([vMdocNamespace, vMdocPath])\n export type MdocNamespace = v.InferOutput<typeof vMdocNamespace>\n export type MdocPath = v.InferOutput<typeof vMdocPath>\n export type Mdoc = v.InferOutput<typeof vMdoc>\n\n export const vModel = v.union([vMdoc, vW3cSdJwtVc])\n export type Input = v.InferInput<typeof vModel>\n export type Out = v.InferOutput<typeof vModel>\n}\nexport type DcqlClaimsQuery = DcqlClaimsQuery.Out\n","import * as v from 'valibot'\nimport { DcqlCredentialQuery } from '../dcql-query/m-dcql-credential-query.js'\nimport { CredentialSetQuery } from '../dcql-query/m-dcql-credential-set-query.js'\nimport { DcqlCredential } from '../u-dcql-credential.js'\nimport { vIdString, vNonEmptyArray } from '../u-dcql.js'\n\nexport namespace DcqlQueryResult {\n export const vCredentialQueryResult = v.pipe(\n v.array(v.array(v.union([v.undefined(), DcqlCredential.vParseSuccess, DcqlCredential.vParseFailure]))),\n vNonEmptyArray()\n )\n\n export type CredentialQueryResult = v.InferOutput<typeof vCredentialQueryResult>\n\n export const vModel = v.object({\n credentials: v.pipe(\n v.array(DcqlCredentialQuery.vModel),\n vNonEmptyArray(),\n v.description(\n 'REQUIRED. A non-empty array of Credential Queries that specify the requested Verifiable Credentials.'\n )\n ),\n\n credential_matches: v.record(\n v.pipe(vIdString),\n v.union([\n v.object({\n ...DcqlCredential.vParseSuccess.entries,\n all: v.pipe(\n v.array(\n v.pipe(\n v.array(v.union([v.undefined(), DcqlCredential.vParseSuccess, DcqlCredential.vParseFailure])),\n vNonEmptyArray()\n )\n ),\n vNonEmptyArray()\n ),\n }),\n v.object({\n success: DcqlCredential.vParseFailure.entries.success,\n all: v.pipe(\n v.array(\n v.pipe(\n v.array(v.union([v.undefined(), DcqlCredential.vParseSuccess, DcqlCredential.vParseFailure])),\n vNonEmptyArray()\n )\n ),\n vNonEmptyArray()\n ),\n }),\n ])\n ),\n\n credential_sets: v.optional(\n v.pipe(\n v.array(\n v.object({\n ...CredentialSetQuery.vModel.entries,\n matching_options: v.union([v.undefined(), v.pipe(v.array(v.array(v.string())), vNonEmptyArray())]),\n })\n ),\n vNonEmptyArray(),\n v.description(\n 'OPTIONAL. A non-empty array of credential set queries that specifies additional constraints on which of the requested Verifiable Credentials to return.'\n )\n )\n ),\n\n canBeSatisfied: v.boolean(),\n })\n export type Input = v.InferInput<typeof vModel>\n export type Output = v.InferOutput<typeof vModel>\n\n export type CredentialMatch = Input['credential_matches'][number]\n export type CredentialMatchRecord = Input['credential_matches']\n}\nexport type DcqlQueryResult = DcqlQueryResult.Output\n","import * as v from 'valibot'\nimport { DcqlUndefinedClaimSetIdError } from '../dcql-error/e-dcql.js'\nimport { idRegex, vIdString, vNonEmptyArray } from '../u-dcql.js'\nimport { DcqlClaimsQuery } from './m-dcql-claims-query.js'\n\n/**\n * A Credential Query is an object representing a request for a presentation of one Credential.\n */\nexport namespace DcqlCredentialQuery {\n const vBase = v.object({\n id: v.pipe(\n v.string(),\n v.regex(idRegex),\n v.description(\n `REQUIRED. A string identifying the Credential in the response and, if provided, the constraints in 'credential_sets'.`\n )\n ),\n claim_sets: v.pipe(\n v.optional(v.pipe(v.array(v.pipe(v.array(vIdString), vNonEmptyArray())), vNonEmptyArray())),\n v.description(\n `OPTIONAL. A non-empty array containing arrays of identifiers for elements in 'claims' that specifies which combinations of 'claims' for the Credential are requested.`\n )\n ),\n })\n\n export const vMdoc = v.object({\n ...vBase.entries,\n format: v.pipe(\n v.literal('mso_mdoc'),\n v.description('REQUIRED. A string that specifies the format of the requested Verifiable Credential.')\n ),\n claims: v.pipe(\n v.optional(v.pipe(v.array(DcqlClaimsQuery.vMdoc), vNonEmptyArray())),\n v.description('OPTIONAL. A non-empty array of objects as that specifies claims in the requested Credential.')\n ),\n meta: v.pipe(\n v.optional(\n v.object({\n doctype_value: v.pipe(\n v.optional(v.string()),\n v.description(\n 'OPTIONAL. String that specifies an allowed value for the doctype of the requested Verifiable Credential.'\n )\n ),\n })\n ),\n v.description(\n 'OPTIONAL. An object defining additional properties requested by the Verifier that apply to the metadata and validity data of the Credential.'\n )\n ),\n })\n export type Mdoc = v.InferOutput<typeof vMdoc>\n\n export const vSdJwtVc = v.object({\n ...vBase.entries,\n format: v.pipe(\n v.picklist(['vc+sd-jwt', 'dc+sd-jwt']),\n v.description('REQUIRED. A string that specifies the format of the requested Verifiable Credential.')\n ),\n claims: v.pipe(\n v.optional(v.pipe(v.array(DcqlClaimsQuery.vW3cSdJwtVc), vNonEmptyArray())),\n v.description('OPTIONAL. A non-empty array of objects as that specifies claims in the requested Credential.')\n ),\n meta: v.pipe(\n v.optional(\n v.pipe(\n v.object({\n vct_values: v.optional(v.array(v.string())),\n }),\n v.description(\n 'OPTIONAL. An array of strings that specifies allowed values for the type of the requested Verifiable Credential.'\n )\n )\n ),\n v.description(\n 'OPTIONAL. An object defining additional properties requested by the Verifier that apply to the metadata and validity data of the Credential.'\n )\n ),\n })\n export type SdJwtVc = v.InferOutput<typeof vSdJwtVc>\n\n export const vW3cVc = v.object({\n ...vBase.entries,\n format: v.picklist(['jwt_vc_json', 'jwt_vc_json-ld']),\n claims: v.optional(v.pipe(v.array(DcqlClaimsQuery.vW3cSdJwtVc), vNonEmptyArray())),\n })\n export type W3cVc = v.InferOutput<typeof vW3cVc>\n\n export const vModel = v.variant('format', [vMdoc, vSdJwtVc, vW3cVc])\n export type Input = v.InferInput<typeof vModel>\n export type Output = v.InferOutput<typeof vModel>\n\n export const validate = (credentialQuery: Output) => {\n claimSetIdsAreDefined(credentialQuery)\n }\n}\nexport type DcqlCredentialQuery = DcqlCredentialQuery.Output\n\n// --- validations --- //\n\nconst claimSetIdsAreDefined = (credentialQuery: DcqlCredentialQuery) => {\n if (!credentialQuery.claim_sets) return\n const claimIds = new Set(credentialQuery.claims?.map((claim) => claim.id))\n\n const undefinedClaims: string[] = []\n for (const claim_set of credentialQuery.claim_sets) {\n for (const claim_id of claim_set) {\n if (!claimIds.has(claim_id)) {\n undefinedClaims.push(claim_id)\n }\n }\n }\n\n if (undefinedClaims.length > 0) {\n throw new DcqlUndefinedClaimSetIdError({\n message: `Credential set contains undefined credential id${undefinedClaims.length === 0 ? '' : '`s'} '${undefinedClaims.join(', ')}'`,\n })\n }\n}\n","import * as v from 'valibot'\nimport { vIdString, vNonEmptyArray } from '../u-dcql.js'\n\n/**\n * A Credential Set Query is an object representing\n * a request for one or more credentials to satisfy a particular use case with the Verifier.\n */\nexport namespace CredentialSetQuery {\n export const vModel = v.object({\n options: v.pipe(\n v.array(v.array(vIdString)),\n vNonEmptyArray(),\n v.description(\n '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.'\n )\n ),\n required: v.pipe(\n v.optional(v.boolean(), true),\n v.description(\n `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'.`\n )\n ),\n purpose: v.pipe(\n v.optional(v.union([v.string(), v.number(), v.record(v.string(), v.unknown())])),\n v.description('OPTIONAL. A string, number or object specifying the purpose of the query.')\n ),\n })\n\n export type Input = v.InferInput<typeof vModel>\n export type Output = v.InferOutput<typeof vModel>\n}\nexport type CredentialSetQuery = CredentialSetQuery.Output\n","import * as v from 'valibot'\nimport { vIdString, vJsonRecord, vStringToJson } from '../u-dcql.js'\n\nexport namespace DcqlPresentation {\n export const vModel = v.record(vIdString, v.union([v.string(), vJsonRecord]))\n\n export type Input = v.InferInput<typeof vModel>\n export type Output = v.InferOutput<typeof vModel>\n export const parse = (input: Input | string) => {\n if (typeof input === 'string') {\n return v.parse(v.pipe(v.string(), vStringToJson, vModel), input)\n }\n\n return v.parse(vModel, input)\n }\n\n export const encode = (input: Output) => {\n return JSON.stringify(input)\n }\n}\nexport type DcqlPresentation = DcqlPresentation.Output\n","import type * as v from 'valibot'\nimport { runCredentialQuery } from '../dcql-parser/dcql-credential-query-result.js'\nimport type { DcqlQuery } from '../dcql-query/m-dcql-query.js'\nimport type { DcqlCredential } from '../u-dcql-credential.js'\nimport type { DcqlQueryResult } from './m-dcql-query-result.js'\n\nexport const runDcqlQuery = (\n dcqlQuery: DcqlQuery.Output,\n ctx: {\n credentials: DcqlCredential[]\n presentation: boolean\n }\n): DcqlQueryResult => {\n const credentialQueriesResults = Object.fromEntries(\n dcqlQuery.credentials.map((credentialQuery) => [credentialQuery.id, runCredentialQuery(credentialQuery, ctx)])\n )\n\n const credentialMatches = Object.fromEntries(\n Object.entries(credentialQueriesResults).map(([key, credentialQueryResult]) => {\n // Find the best match for each credential query\n let bestMatch: v.InferOutput<typeof DcqlCredential.vParseSuccess> | undefined = undefined\n\n for (const credentialParseResult of credentialQueryResult) {\n const bestMatchForCredential = credentialParseResult.find((result) => result?.success === true)\n\n if (!bestMatch && bestMatchForCredential) {\n const { issues, ...matchWithoutIssues } = bestMatchForCredential\n bestMatch = matchWithoutIssues\n continue\n }\n\n // biome-ignore lint/style/noNonNullAssertion: <explanation>\n if (bestMatchForCredential && bestMatchForCredential.claim_set_index! < bestMatch?.claim_set_index!) {\n const { issues, ...matchWithoutIssues } = bestMatchForCredential\n bestMatch = matchWithoutIssues\n }\n }\n\n return [\n key,\n bestMatch ? { ...bestMatch, all: credentialQueryResult } : { success: false, all: credentialQueryResult },\n ]\n })\n ) satisfies DcqlQueryResult.CredentialMatchRecord\n\n const credentialSetResults = dcqlQuery.credential_sets?.map((set) => {\n const matchingOptions = set.options.filter((option) =>\n option.every((credentialQueryId) => credentialMatches[credentialQueryId]?.success)\n )\n\n return {\n ...set,\n matching_options: matchingOptions.length > 0 ? (matchingOptions as [string[], ...string[][]]) : undefined,\n }\n }) as DcqlQueryResult.Output['credential_sets']\n\n const dqclQueryMatched = credentialSetResults\n ? credentialSetResults.every((set) => !set.required || set.matching_options)\n : Object.values(credentialMatches).every((query) => query.success)\n\n return {\n ...dcqlQuery,\n canBeSatisfied: dqclQueryMatched,\n credential_matches: credentialMatches as DcqlQueryResult['credential_matches'],\n credential_sets: credentialSetResults,\n }\n}\n","import * as v from 'valibot'\nimport { DcqlCredentialSetError, DcqlNonUniqueCredentialQueryIdsError } from '../dcql-error/e-dcql.js'\nimport { runDcqlQuery } from '../dcql-query-result/run-dcql-query.js'\nimport type { DcqlCredential } from '../u-dcql-credential.js'\nimport { vNonEmptyArray } from '../u-dcql.js'\nimport { DcqlCredentialQuery } from './m-dcql-credential-query.js'\nimport { CredentialSetQuery } from './m-dcql-credential-set-query.js'\n\n/**\n * The Digital Credentials Query Language (DCQL, pronounced [ˈdakl̩]) is a\n * JSON-encoded query language that allows the Verifier to request Verifiable\n * Presentations that match the query. The Verifier MAY encode constraints on the\n * combinations of credentials and claims that are requested. The Wallet evaluates\n * the query against the Verifiable Credentials it holds and returns Verifiable\n * Presentations matching the query.\n */\nexport namespace DcqlQuery {\n export const vModel = v.object({\n credentials: v.pipe(\n v.array(DcqlCredentialQuery.vModel),\n vNonEmptyArray(),\n v.description(\n 'REQUIRED. A non-empty array of Credential Queries that specify the requested Verifiable Credentials.'\n )\n ),\n credential_sets: v.pipe(\n v.optional(v.pipe(v.array(CredentialSetQuery.vModel), vNonEmptyArray())),\n v.description(\n 'OPTIONAL. A non-empty array of credential set queries that specifies additional constraints on which of the requested Verifiable Credentials to return.'\n )\n ),\n })\n export type Input = v.InferInput<typeof vModel>\n export type Output = v.InferOutput<typeof vModel>\n export const validate = (dcqlQuery: Output) => {\n validateUniqueCredentialQueryIds(dcqlQuery)\n validateCredentialSets(dcqlQuery)\n dcqlQuery.credentials.forEach(DcqlCredentialQuery.validate)\n }\n export const query = (dcqlQuery: Output, credentials: DcqlCredential[]) => {\n return runDcqlQuery(dcqlQuery, { credentials, presentation: false })\n }\n\n export const parse = (input: Input) => {\n return v.parse(vModel, input)\n }\n}\nexport type DcqlQuery = DcqlQuery.Output\n\n// --- validations --- //\n\nconst validateUniqueCredentialQueryIds = (query: DcqlQuery.Output) => {\n const ids = query.credentials.map((c) => c.id)\n const duplicates = ids.filter((id, index) => ids.indexOf(id) !== index)\n\n if (duplicates.length > 0) {\n throw new DcqlNonUniqueCredentialQueryIdsError({\n message: `Duplicate credential query ids found: ${duplicates.join(', ')}`,\n })\n }\n}\n\nconst validateCredentialSets = (query: DcqlQuery.Output) => {\n if (!query.credential_sets) return\n\n const credentialQueryIds = new Set(query.credentials.map((c) => c.id))\n\n const undefinedCredentialQueryIds: string[] = []\n for (const credential_set of query.credential_sets) {\n for (const credentialSetOption of credential_set.options) {\n for (const credentialQueryId of credentialSetOption) {\n if (!credentialQueryIds.has(credentialQueryId)) {\n undefinedCredentialQueryIds.push(credentialQueryId)\n }\n }\n }\n }\n\n if (undefinedCredentialQueryIds.length > 0) {\n throw new DcqlCredentialSetError({\n message: `Credential set contains undefined credential id${undefinedCredentialQueryIds.length === 1 ? '' : '`s'} '${undefinedCredentialQueryIds.join(', ')}'`,\n })\n }\n}\n"],"mappings":"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","names":["v","v","v","DcqlMdocCredential","DcqlSdJwtVcCredential","DcqlW3cVcCredential","DcqlCredential","DcqlMdocPresentation","DcqlSdJwtVcPresentation","DcqlW3cVcPresentation","DcqlCredentialPresentation","v","v","v","v","DcqlClaimsQuery","query","v","v","DcqlCredentialQuery","v","CredentialSetQuery","DcqlQueryResult","DcqlPresentationResult","v","DcqlPresentation","v","DcqlQuery"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/dcql-error/e-base.ts","../src/dcql-error/e-dcql.ts","../src/dcql-presentation/m-dcql-credential-presentation.ts","../src/u-dcql-credential.ts","../src/u-dcql.ts","../src/u-model.ts","../src/dcql-presentation/m-dcql-presentation-result.ts","../src/dcql-parser/dcql-credential-query-result.ts","../src/dcql-parser/dcql-claims-query-result.ts","../src/dcql-query/m-dcql-claims-query.ts","../src/dcql-query-result/m-dcql-query-result.ts","../src/dcql-query/m-dcql-credential-query.ts","../src/dcql-query/m-dcql-credential-set-query.ts","../src/dcql-presentation/m-dcql-presentation.ts","../src/dcql-query-result/run-dcql-query.ts","../src/dcql-query/m-dcql-query.ts"],"sourcesContent":["export * from './dcql-error/index.js'\nexport * from './dcql-presentation/index.js'\nexport * from './dcql-query-result/index.js'\nexport * from './dcql-query/index.js'\n\nexport {\n DcqlCredential,\n DcqlMdocCredential,\n DcqlSdJwtVcCredential,\n DcqlW3cVcCredential,\n} from './u-dcql-credential.js'\n","function isObject(value: unknown): value is Record<string, unknown> {\n return !!value && !Array.isArray(value) && typeof value === 'object'\n}\n\nclass UnknownCauseError extends Error {\n [key: string]: unknown\n}\n\nexport function getCauseFromUnknown(cause: unknown): Error | undefined {\n if (cause instanceof Error) {\n return cause\n }\n\n const type = typeof cause\n if (type === 'undefined' || type === 'function' || cause === null) {\n return undefined\n }\n\n // Primitive types just get wrapped in an error\n if (type !== 'object') {\n return new Error(String(cause))\n }\n\n // If it's an object, we'll create a synthetic error\n if (isObject(cause)) {\n const err = new UnknownCauseError()\n for (const key in cause) {\n err[key] = cause[key]\n }\n return err\n }\n\n return undefined\n}\n\nexport const isDcqlError = (cause: unknown): cause is DcqlError => {\n if (cause instanceof DcqlError) {\n return true\n }\n if (cause instanceof Error && cause.name === 'DcqlError') {\n // https://github.com/trpc/trpc/pull/4848\n return true\n }\n\n return false\n}\n\nexport function getDcqlErrorFromUnknown(cause: unknown): DcqlError {\n if (isDcqlError(cause)) {\n return cause\n }\n\n const dcqlError = new DcqlError({\n code: 'INTERNAL_SERVER_ERROR',\n cause,\n })\n\n // Inherit stack from error\n if (cause instanceof Error && cause.stack) {\n dcqlError.stack = cause.stack\n }\n\n return dcqlError\n}\n\ntype DCQL_ERROR_CODE = 'PARSE_ERROR' | 'INTERNAL_SERVER_ERROR' | 'NOT_IMPLEMENTED' | 'BAD_REQUEST'\n\nexport class DcqlError extends Error {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore override doesn't work in all environments due to \"This member cannot have an 'override' modifier because it is not declared in the base class 'Error'\"\n public override readonly cause?: Error\n public readonly code\n\n constructor(opts: {\n message?: string\n code: DCQL_ERROR_CODE\n cause?: unknown\n }) {\n const cause = getCauseFromUnknown(opts.cause)\n const message = opts.message ?? cause?.message ?? opts.code\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore https://github.com/tc39/proposal-error-cause\n super(message, { cause })\n\n this.code = opts.code\n this.name = 'DcqlError'\n\n if (!this.cause) {\n // < ES2022 / < Node 16.9.0 compatability\n this.cause = cause\n }\n }\n}\n","import { DcqlError } from './e-base.js'\n\nexport class DcqlCredentialSetError extends DcqlError {\n constructor(opts: { message: string; cause?: unknown }) {\n super({ code: 'BAD_REQUEST', ...opts })\n }\n}\n\nexport class DcqlUndefinedClaimSetIdError extends DcqlError {\n constructor(opts: { message: string; cause?: unknown }) {\n super({ code: 'BAD_REQUEST', ...opts })\n }\n}\n\nexport class DcqlNonUniqueCredentialQueryIdsError extends DcqlError {\n constructor(opts: { message: string; cause?: unknown }) {\n super({ code: 'BAD_REQUEST', ...opts })\n }\n}\n\nexport class DcqlParseError extends DcqlError {\n constructor(opts: { message: string; cause?: unknown }) {\n super({ code: 'PARSE_ERROR', ...opts })\n }\n}\n\nexport class DcqlInvalidClaimsQueryIdError extends DcqlError {\n constructor(opts: { message: string; cause?: unknown }) {\n super({ code: 'BAD_REQUEST', ...opts })\n }\n}\n\nexport class DcqlMissingClaimSetParseError extends DcqlError {\n constructor(opts: { message: string; cause?: unknown }) {\n super({ code: 'PARSE_ERROR', ...opts })\n }\n}\n\nexport class DcqlInvalidPresentationRecordError extends DcqlError {\n constructor(opts: { message: string; cause?: unknown }) {\n super({ code: 'BAD_REQUEST', ...opts })\n }\n}\n\nexport class DcqlPresentationResultError extends DcqlError {\n constructor(opts: { message: string; cause?: unknown }) {\n super({ code: 'BAD_REQUEST', ...opts })\n }\n}\n","import * as v from 'valibot'\nimport { DcqlMdocCredential, DcqlSdJwtVcCredential, DcqlW3cVcCredential } from '../u-dcql-credential'\nimport type { InferModelTypes } from '../u-model'\nimport { Model } from '../u-model'\n\nexport namespace DcqlMdocPresentation {\n export const vModel = DcqlMdocCredential.vModel\n export const model = new Model({ vModel })\n export type Model = InferModelTypes<typeof model>\n}\nexport type DcqlMdocPresentation = DcqlMdocPresentation.Model['Output']\n\nexport namespace DcqlSdJwtVcPresentation {\n export const vModel = DcqlSdJwtVcCredential.vModel\n export const model = new Model({ vModel })\n export type Model = InferModelTypes<typeof model>\n}\nexport type DcqlSdJwtVcPresentation = DcqlSdJwtVcPresentation.Model['Output']\n\nexport namespace DcqlW3cVcPresentation {\n export const vModel = DcqlW3cVcCredential.vModel\n export const model = new Model({ vModel })\n export type Model = InferModelTypes<typeof model>\n}\nexport type DcqlW3cVcPresentation = DcqlW3cVcPresentation.Model['Output']\n\nexport namespace DcqlCredentialPresentation {\n export const model = new Model({\n vModel: v.variant('credential_format', [\n DcqlMdocPresentation.vModel,\n DcqlSdJwtVcPresentation.vModel,\n DcqlW3cVcPresentation.vModel,\n ]),\n })\n export type Model = InferModelTypes<typeof model>\n}\nexport type DcqlCredentialPresentation = DcqlCredentialPresentation.Model['Output']\n","import * as v from 'valibot'\nimport { vJsonRecord, vNonEmptyArray } from './u-dcql.js'\nimport type { InferModelTypes } from './u-model.js'\nimport { Model } from './u-model.js'\n\nexport namespace DcqlMdocCredential {\n export const vNamespaces = v.record(v.string(), v.record(v.string(), v.unknown()))\n export const vModel = v.object({\n credential_format: v.literal('mso_mdoc'),\n doctype: v.string(),\n namespaces: vNamespaces,\n })\n\n export const model = new Model({ vModel })\n export type Model = InferModelTypes<typeof model>\n export type NameSpaces = v.InferOutput<typeof vNamespaces>\n}\nexport type DcqlMdocCredential = DcqlMdocCredential.Model['Output']\n\nexport namespace DcqlSdJwtVcCredential {\n export const vClaims = vJsonRecord\n export const vModel = v.object({\n credential_format: v.picklist(['vc+sd-jwt', 'dc+sd-jwt']),\n vct: v.string(),\n claims: vClaims,\n })\n export const model = new Model({ vModel })\n export type Model = InferModelTypes<typeof model>\n export type Claims = Model['Output']['claims']\n}\nexport type DcqlSdJwtVcCredential = DcqlSdJwtVcCredential.Model['Output']\n\nexport namespace DcqlW3cVcCredential {\n export const vClaims = vJsonRecord\n export const vModel = v.object({\n credential_format: v.picklist(['jwt_vc_json-ld', 'jwt_vc_json']),\n claims: vClaims,\n })\n\n export const model = new Model({ vModel })\n export type Model = InferModelTypes<typeof model>\n export type Claims = Model['Output']['claims']\n}\nexport type DcqlW3cVcCredential = DcqlW3cVcCredential.Model['Output']\n\nexport namespace DcqlCredential {\n export const vModel = v.variant('credential_format', [\n DcqlMdocCredential.vModel,\n DcqlSdJwtVcCredential.vModel,\n DcqlW3cVcCredential.vModel,\n ])\n\n export const vParseSuccess = v.object({\n success: v.literal(true),\n typed: v.literal(true),\n issues: v.optional(v.undefined()),\n input_credential_index: v.number(),\n claim_set_index: v.union([v.number(), v.undefined()]),\n output: DcqlCredential.vModel,\n })\n\n export const vParseFailure = v.object({\n success: v.literal(false),\n typed: v.boolean(),\n output: v.unknown(),\n issues: v.pipe(v.array(v.unknown()), vNonEmptyArray()),\n input_credential_index: v.number(),\n claim_set_index: v.union([v.number(), v.undefined()]),\n })\n export const model = new Model({ vModel })\n export type Model = InferModelTypes<typeof model>\n}\nexport type DcqlCredential = DcqlCredential.Model['Output']\n","import * as v from 'valibot'\nimport type { UnknownBaseSchema } from './u-model'\nexport const idRegex = /^[a-zA-Z0-9_-]+$/\n\nexport const vNonEmptyArray = <T extends unknown[]>() => {\n return v.custom<[T[number], ...T]>((input) => (input as T).length > 0)\n}\n\nexport const vIdString = v.pipe(v.string(), v.regex(idRegex), v.nonEmpty())\n\nexport type Json = string | number | boolean | null | { [key: string]: Json } | Json[]\n\ninterface HasToJson {\n toJson(): Json\n}\n\nfunction isToJsonable(value: unknown): value is HasToJson {\n if (value === null || typeof value !== 'object') return false\n\n // biome-ignore lint/suspicious/noExplicitAny: <explanation>\n const toJsonFn = (value as any).toJson\n return typeof toJsonFn === 'function'\n}\n\nexport const vWithJT = <Schema extends UnknownBaseSchema>(schema: Schema) =>\n v.pipe(\n v.custom<v.InferInput<Schema>>(() => true),\n v.rawTransform<v.InferInput<Schema>, v.InferOutput<Schema>>(({ dataset, addIssue, NEVER }) => {\n const result = v.safeParse(schema, dataset.value)\n if (result.success) return dataset.value\n\n if (!isToJsonable(dataset.value)) {\n for (const safeParseIssue of result.issues) {\n addIssue({\n ...safeParseIssue,\n expected: safeParseIssue.expected ?? undefined,\n })\n }\n\n return NEVER\n }\n\n let json: Json\n\n try {\n json = dataset.value.toJson()\n } catch (error) {\n for (const safeParseIssue of result.issues) {\n addIssue({\n ...safeParseIssue,\n expected: safeParseIssue.expected ?? undefined,\n })\n }\n addIssue({ message: 'Json Transformation failed' })\n return NEVER\n }\n\n const safeParseResult: v.SafeParseResult<Schema> = v.safeParse(schema, json)\n if (safeParseResult.success) return dataset.value\n\n for (const safeParseIssue of safeParseResult.issues) {\n addIssue({\n ...safeParseIssue,\n expected: safeParseIssue.expected ?? undefined,\n })\n }\n\n return NEVER\n })\n )\n\nexport const vJsonLiteral = v.union([v.string(), v.number(), v.boolean(), v.null()])\n\nexport type JsonLiteral = v.InferOutput<typeof vJsonLiteral>\n\nexport const vJson: v.GenericSchema<Json> = v.lazy(() =>\n v.union([vJsonLiteral, v.array(vJson), v.record(v.string(), vJson)])\n)\n\nexport const vJsonWithJT: v.GenericSchema<Json> = v.lazy(() =>\n vWithJT(v.union([vJsonLiteral, v.array(vJson), v.record(v.string(), vJson)]))\n)\n\nexport const vJsonRecord = v.record(v.string(), vJson)\nexport type JsonRecord = v.InferOutput<typeof vJsonRecord>\n\nexport const vStringToJson = v.rawTransform<string, Json>(({ dataset, addIssue, NEVER }) => {\n try {\n return JSON.parse(dataset.value) as Json\n } catch (error) {\n addIssue({ message: 'Invalid JSON' })\n return NEVER\n }\n})\n","import * as v from 'valibot'\nimport { DcqlParseError } from './dcql-error/e-dcql'\n\nexport type UnknownBaseSchema = v.BaseSchema<unknown, unknown, v.BaseIssue<unknown>>\n\ntype EnsureOutputAssignableToInput<T extends UnknownBaseSchema> = v.InferOutput<T> extends v.InferInput<T> ? T : never\n\nexport class Model<T extends UnknownBaseSchema> {\n constructor(private input: { vModel: EnsureOutputAssignableToInput<T> }) {}\n\n public get v() {\n return this.input.vModel\n }\n\n public parse(input: T) {\n const result = this.safeParse(input)\n\n if (result.success) {\n return result.output\n }\n\n return new DcqlParseError({\n message: JSON.stringify(result.flattened),\n cause: result.error,\n })\n }\n\n public safeParse(\n input: unknown\n ):\n | { success: true; output: v.InferOutput<T> }\n | { success: false; flattened: v.FlatErrors<T>; error: v.ValiError<T> } {\n const res = v.safeParse(this.input.vModel, input)\n if (res.success) {\n return { success: true, output: res.output }\n }\n return {\n success: false,\n error: new v.ValiError(res.issues),\n flattened: v.flatten<T>(res.issues),\n }\n }\n\n public is(input: unknown): input is v.InferOutput<T> {\n return v.is(this.v, input)\n }\n}\n\n// biome-ignore lint/suspicious/noExplicitAny: <explanation>\nexport type InferModelTypes<T extends Model<any>> = T extends Model<infer U>\n ? {\n Input: v.InferInput<U>\n Output: v.InferOutput<U>\n }\n : never\n","import * as v from 'valibot'\n\nimport { DcqlInvalidPresentationRecordError, DcqlPresentationResultError } from '../dcql-error/e-dcql.js'\nimport { runCredentialQuery } from '../dcql-parser/dcql-credential-query-result.js'\nimport { DcqlQueryResult } from '../dcql-query-result/m-dcql-query-result.js'\nimport type { DcqlQuery } from '../dcql-query/m-dcql-query.js'\nimport { DcqlCredential } from '../u-dcql-credential.js'\nimport { vIdString } from '../u-dcql.js'\nimport type { DcqlCredentialPresentation } from './m-dcql-credential-presentation.js'\n\nexport namespace DcqlPresentationResult {\n export const vModel = v.object({\n ...v.omit(DcqlQueryResult.vModel, ['credential_matches']).entries,\n\n invalid_matches: v.union([\n v.record(\n v.pipe(vIdString),\n v.object({\n ...v.omit(DcqlCredential.vParseFailure, ['input_credential_index']).entries,\n presentation_id: v.pipe(vIdString),\n })\n ),\n v.undefined(),\n ]),\n\n valid_matches: v.record(\n v.pipe(vIdString),\n v.object({\n ...v.omit(DcqlCredential.vParseSuccess, ['issues', 'input_credential_index']).entries,\n presentation_id: v.pipe(vIdString),\n })\n ),\n })\n\n export type Input = v.InferInput<typeof vModel>\n export type Output = v.InferOutput<typeof vModel>\n\n export const parse = (input: Input | DcqlQueryResult) => {\n return v.parse(vModel, input)\n }\n\n /**\n * Query if the presentation record can be satisfied by the provided presentations\n * considering the dcql query\n *\n * @param dcqlQuery\n * @param dcqlPresentation\n */\n export const fromDcqlPresentation = (\n dcqlPresentation: Record<string, DcqlCredentialPresentation>,\n ctx: { dcqlQuery: DcqlQuery }\n ): Output => {\n const { dcqlQuery } = ctx\n\n const presentationQueriesResults = Object.fromEntries(\n Object.entries(dcqlPresentation).map(([queryId, presentation]) => {\n const credentialQuery = dcqlQuery.credentials.find((c) => c.id === queryId)\n if (!credentialQuery) {\n throw new DcqlPresentationResultError({\n message: `Query ${queryId} not found in the dcql query. Cannot validate presentation.`,\n })\n }\n\n return [\n queryId,\n runCredentialQuery(credentialQuery, {\n presentation: true,\n credentials: [presentation],\n }),\n ]\n })\n )\n\n let invalidMatches: DcqlPresentationResult['invalid_matches'] = {}\n const validMatches: DcqlPresentationResult['valid_matches'] = {}\n\n for (const [queryId, presentationQueryResult] of Object.entries(presentationQueriesResults)) {\n for (const presentationQueryResultForClaimSet of presentationQueryResult) {\n // NOTE: result can be undefined, but this is only the case if there was a valid claim\n // set match previously and we skip other claim set matching. We don't add these to the parse\n // result.\n const result = presentationQueryResultForClaimSet[0]\n\n if (result?.success) {\n const { issues, input_credential_index, ...rest } = result\n validMatches[queryId] = { ...rest, presentation_id: queryId }\n } else if (result?.success === false) {\n const { input_credential_index, ...rest } = result\n invalidMatches[queryId] = {\n ...rest,\n presentation_id: queryId,\n }\n }\n }\n }\n\n // Only keep the invalid matches that do not have a valid match as well\n invalidMatches = Object.fromEntries(\n Object.entries(invalidMatches ?? {}).filter(([queryId]) => validMatches[queryId] === undefined)\n )\n\n const credentialSetResults = dcqlQuery.credential_sets?.map((set) => {\n const matchingOptions = set.options.filter((option) =>\n option.every((credentialQueryId) => validMatches[credentialQueryId]?.success)\n )\n\n return {\n ...set,\n matching_options: matchingOptions.length > 0 ? (matchingOptions as [string[], ...string[][]]) : undefined,\n }\n }) as DcqlQueryResult.Output['credential_sets']\n\n const dqclQueryMatched = credentialSetResults\n ? credentialSetResults.every((set) => !set.required || set.matching_options)\n : Object.keys(validMatches).length === ctx.dcqlQuery.credentials.length\n\n return {\n ...dcqlQuery,\n canBeSatisfied: dqclQueryMatched,\n valid_matches: validMatches,\n invalid_matches: Object.keys(invalidMatches).length === 0 ? undefined : {},\n credential_sets: credentialSetResults,\n }\n }\n\n export const validate = (dcqlQueryResult: DcqlPresentationResult) => {\n if (!dcqlQueryResult.canBeSatisfied) {\n throw new DcqlInvalidPresentationRecordError({\n message: 'Invalid Presentation record',\n cause: dcqlQueryResult,\n })\n }\n\n return dcqlQueryResult satisfies Output\n }\n}\nexport type DcqlPresentationResult = DcqlPresentationResult.Output\n","import * as v from 'valibot'\nimport type { DcqlQueryResult } from '../dcql-query-result/m-dcql-query-result.js'\nimport type { DcqlCredentialQuery } from '../dcql-query/m-dcql-credential-query.js'\nimport type { DcqlCredential } from '../u-dcql-credential.js'\nimport type {} from '../u-dcql.js'\nimport { getCredentialQueryParser } from './dcql-claims-query-result.js'\n\nexport const runCredentialQuery = (\n credentialQuery: DcqlCredentialQuery,\n ctx: {\n credentials: DcqlCredential[]\n presentation: boolean\n }\n): DcqlQueryResult.CredentialQueryResult => {\n const { credentials, presentation } = ctx\n const claimSets = credentialQuery.claim_sets ?? [undefined]\n\n const credentialQueryResult: v.InferInput<typeof DcqlQueryResult.vCredentialQueryResult> = []\n\n for (const [claimSetIndex, claim_set] of claimSets.entries()) {\n const credentialParser = getCredentialQueryParser(credentialQuery, {\n claimSet: claim_set,\n presentation,\n })\n\n const claimSetResult: (typeof credentialQueryResult)[number] = []\n\n for (const [credentialIndex, credential] of credentials.entries()) {\n if (claimSetIndex > 0) {\n // if one the credential was successfully parsed against a previous claimsset we don't need to further validate other claim sets\n const previous = credentialQueryResult[claimSetIndex - 1][credentialIndex]\n\n // if the previous credential was successfully parsed we don't need to further validate the current credential\n // we set all further parsing attempts to undefined\n if (previous?.success || !previous) {\n claimSetResult[credentialIndex] = undefined\n continue\n }\n }\n\n const parseResult = v.safeParse(credentialParser, credential)\n claimSetResult.push({\n ...parseResult,\n ...(parseResult.issues && {\n flattened: v.flatten<typeof credentialParser>(parseResult.issues),\n }),\n input_credential_index: credentialIndex,\n claim_set_index: credentialQuery.claim_sets ? claimSetIndex : undefined,\n })\n }\n\n credentialQueryResult.push(claimSetResult)\n }\n\n return credentialQueryResult as DcqlQueryResult.CredentialQueryResult\n}\n","import * as v from 'valibot'\nimport { DcqlInvalidClaimsQueryIdError, DcqlMissingClaimSetParseError } from '../dcql-error/e-dcql.js'\nimport { DcqlClaimsQuery } from '../dcql-query/m-dcql-claims-query.js'\nimport type { DcqlCredentialQuery } from '../dcql-query/m-dcql-credential-query.js'\nimport { vWithJT } from '../u-dcql.js'\nimport { vJson, vJsonRecord } from '../u-dcql.js'\n\nconst getClaimParser = (input: {\n value?: string | number | boolean\n values?: (string | number | boolean)[]\n}) => {\n const { value, values } = input\n if (value) {\n return vWithJT(v.literal(value))\n }\n\n if (values) {\n return vWithJT(v.union(values.map((val) => v.literal(val))))\n }\n\n return v.nonNullish(v.any())\n}\n\nexport const getNamespacesParser = (claimsQueries: DcqlClaimsQuery.Mdoc[]) => {\n const claimsForNamespace: Record<string, DcqlClaimsQuery.MdocPath[]> = {}\n\n for (const claimQuery of claimsQueries) {\n // Normalize the query to the latest path syntax\n const mdocPathQuery: DcqlClaimsQuery.MdocPath = v.is(DcqlClaimsQuery.vMdocNamespace, claimQuery)\n ? {\n id: claimQuery.id,\n path: [claimQuery.namespace, claimQuery.claim_name],\n values: claimQuery.values,\n }\n : claimQuery\n\n const namespace = mdocPathQuery.path[0]\n if (claimsForNamespace[namespace]) {\n claimsForNamespace[namespace]?.push({ ...mdocPathQuery })\n } else {\n claimsForNamespace[namespace] = [{ ...mdocPathQuery }]\n }\n }\n\n const parsersForNamespaces = Object.entries(claimsForNamespace).map(([namespace, claims]) => {\n const claimParsers = Object.fromEntries(claims.map((claim) => [claim.path[1], getClaimParser(claim)]))\n return [namespace, v.object(claimParsers)]\n })\n\n return v.object(Object.fromEntries(parsersForNamespaces))\n}\n\nconst getClaimQueryParser = (\n claimQuery: DcqlClaimsQuery.W3cAndSdJwtVc,\n ctx: { index: number; presentation: boolean }\n): typeof vJson => {\n const { index, presentation } = ctx\n const pathElement = claimQuery.path[index]\n const isLast = index === claimQuery.path.length - 1\n\n const vClaimParser = getClaimParser(claimQuery)\n\n if (typeof pathElement === 'number') {\n const elementParser = isLast ? vClaimParser : getClaimQueryParser(claimQuery, { ...ctx, index: index + 1 })\n\n if (presentation) {\n // We allow both the concrete value and an array of one value\n return v.union([\n v.pipe(\n v.array(vJson),\n v.length(1),\n v.transform((input) => input[0]),\n elementParser\n ),\n elementParser,\n ])\n }\n\n return v.pipe(\n v.array(vJson),\n v.transform((input) => input[pathElement]),\n elementParser\n )\n }\n if (typeof pathElement === 'string') {\n return v.object({\n [pathElement]: isLast ? vClaimParser : getClaimQueryParser(claimQuery, { ...ctx, index: index + 1 }),\n })\n }\n return isLast ? v.array(vClaimParser) : v.array(getClaimQueryParser(claimQuery, { ...ctx, index: index + 1 }))\n}\n\nexport const getJsonClaimsParser = (claimsQueries: DcqlClaimsQuery.W3cAndSdJwtVc[], ctx: { presentation: boolean }) => {\n const claimParser = v.intersect(\n claimsQueries.map(\n (claimQuery) =>\n getClaimQueryParser(claimQuery, {\n ...ctx,\n index: 0,\n }) as typeof vJsonRecord\n )\n )\n\n return claimParser\n}\n\nexport const getMdocClaimsQueriesForClaimSet = (\n claimsQueries: DcqlClaimsQuery.Mdoc[],\n claimSet: string[]\n): DcqlClaimsQuery.Mdoc[] => {\n return claimSet.map((credential_id) => {\n const query = claimsQueries.find((query) => query.id === credential_id)\n if (!query) {\n throw new DcqlInvalidClaimsQueryIdError({\n message: `Claims-query with id '${credential_id}' not found.`,\n })\n }\n\n return query\n })\n}\n\nexport const getJsonClaimsQueriesForClaimSet = (\n claimsQueries: DcqlClaimsQuery.W3cAndSdJwtVc[],\n claimSet: string[]\n): DcqlClaimsQuery.W3cAndSdJwtVc[] => {\n return claimSet.map((credential_id) => {\n const query = claimsQueries.find((query) => query.id === credential_id)\n if (!query) {\n throw new DcqlInvalidClaimsQueryIdError({\n message: `Claims-query with id '${credential_id}' not found.`,\n })\n }\n return query\n })\n}\n\nconst getMdocParser = (\n credentialQuery: DcqlCredentialQuery.Mdoc,\n ctx: { claimSet?: NonNullable<DcqlCredentialQuery['claim_sets']>[number] }\n) => {\n const { claimSet } = ctx\n\n const vDoctype = credentialQuery.meta?.doctype_value ? v.literal(credentialQuery.meta.doctype_value) : v.string()\n\n const claimSetQueries =\n credentialQuery.claims && claimSet\n ? getMdocClaimsQueriesForClaimSet(credentialQuery.claims, claimSet)\n : credentialQuery.claims\n\n const credentialParser = v.object({\n credential_format: v.literal('mso_mdoc'),\n doctype: vDoctype,\n namespaces: claimSetQueries\n ? getNamespacesParser(claimSetQueries)\n : v.record(v.string(), v.record(v.string(), v.unknown())),\n })\n\n return credentialParser\n}\n\nconst getW3cVcSdJwtVcParser = (\n credentialQuery: DcqlCredentialQuery.SdJwtVc | DcqlCredentialQuery.W3cVc,\n ctx: {\n claimSet?: NonNullable<DcqlCredentialQuery['claim_sets']>[number]\n presentation: boolean\n }\n) => {\n const { claimSet } = ctx\n const claimSetQueries =\n credentialQuery.claims && claimSet\n ? getJsonClaimsQueriesForClaimSet(credentialQuery.claims, claimSet)\n : credentialQuery.claims\n\n if (credentialQuery.format === 'vc+sd-jwt' || credentialQuery.format === 'dc+sd-jwt') {\n return v.object({\n credential_format: v.literal(credentialQuery.format),\n vct: credentialQuery.meta?.vct_values ? v.picklist(credentialQuery.meta.vct_values) : v.string(),\n claims: claimSetQueries ? getJsonClaimsParser(claimSetQueries, ctx) : vJsonRecord,\n })\n }\n const credentialParser = v.object({\n credential_format: v.picklist(['jwt_vc_json', 'jwt_vc_json-ld']),\n claims: claimSetQueries ? getJsonClaimsParser(claimSetQueries, ctx) : vJsonRecord,\n })\n\n return credentialParser\n}\n\nexport const getCredentialQueryParser = (\n credentialQuery: DcqlCredentialQuery,\n ctx: {\n claimSet?: NonNullable<DcqlCredentialQuery['claim_sets']>[number]\n presentation: boolean\n }\n) => {\n if (credentialQuery.claim_sets && !ctx.claimSet) {\n throw new DcqlMissingClaimSetParseError({\n message: 'credentialQuery specifies claim_sets but no claim_set for parsing is provided.',\n })\n }\n\n if (credentialQuery.format === 'mso_mdoc') {\n return getMdocParser(credentialQuery, ctx)\n }\n return getW3cVcSdJwtVcParser(credentialQuery, ctx)\n}\n","import * as v from 'valibot'\nimport { vIdString, vNonEmptyArray } from '../u-dcql.js'\n\n/**\n * Specifies claims withing a requested Credential.\n */\nexport namespace DcqlClaimsQuery {\n export const vValue = v.union([v.string(), v.pipe(v.number(), v.integer()), v.boolean()])\n\n export const vPath = v.union([v.string(), v.pipe(v.number(), v.integer(), v.minValue(0)), v.null()])\n\n export const vW3cSdJwtVc = v.object({\n id: v.pipe(\n v.optional(vIdString),\n v.description(\n '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.'\n )\n ),\n path: v.pipe(\n v.array(vPath),\n vNonEmptyArray(),\n v.description(\n 'A non-empty array representing a claims path pointer that specifies the path to a claim within the Verifiable Credential.'\n )\n ),\n values: v.pipe(\n v.optional(v.array(vValue)),\n v.description(\n '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.'\n )\n ),\n })\n export type W3cAndSdJwtVc = v.InferOutput<typeof vW3cSdJwtVc>\n\n const vMdocBase = v.object({\n id: v.pipe(\n v.optional(vIdString),\n v.description(\n '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.'\n )\n ),\n values: v.pipe(\n v.optional(v.array(vValue)),\n v.description(\n '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.'\n )\n ),\n })\n\n // Syntax up until Draft 23 of OID4VP. Keeping due to Draft 23 having\n // reach ID-3 status and thus being targeted by several implementations\n export const vMdocNamespace = v.object({\n ...vMdocBase.entries,\n\n namespace: v.pipe(\n v.string(),\n v.description(\n 'A string that specifies the namespace of the data element within the mdoc, e.g., org.iso.18013.5.1.'\n )\n ),\n claim_name: v.pipe(\n v.string(),\n v.description(\n 'A string that specifies the data element identifier of the data element within the provided namespace in the mdoc, e.g., first_name.'\n )\n ),\n })\n\n // Syntax starting from Draft 24 of OID4VP\n export const vMdocPath = v.object({\n ...vMdocBase.entries,\n\n intent_to_retain: v.pipe(\n v.optional(v.boolean()),\n v.description(\n 'A boolean that is equivalent to `IntentToRetain` variable defined in Section 8.3.2.1.2.1 of [@ISO.18013-5].'\n )\n ),\n\n path: v.pipe(\n v.tuple([\n v.pipe(\n v.string(),\n v.description(\n 'A string that specifies the namespace of the data element within the mdoc, e.g., org.iso.18013.5.1.'\n )\n ),\n v.pipe(\n v.string(),\n v.description(\n 'A string that specifies the data element identifier of the data element within the provided namespace in the mdoc, e.g., first_name.'\n )\n ),\n ]),\n v.description(\n '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.'\n )\n ),\n })\n export const vMdoc = v.union([vMdocNamespace, vMdocPath])\n export type MdocNamespace = v.InferOutput<typeof vMdocNamespace>\n export type MdocPath = v.InferOutput<typeof vMdocPath>\n export type Mdoc = v.InferOutput<typeof vMdoc>\n\n export const vModel = v.union([vMdoc, vW3cSdJwtVc])\n export type Input = v.InferInput<typeof vModel>\n export type Out = v.InferOutput<typeof vModel>\n}\nexport type DcqlClaimsQuery = DcqlClaimsQuery.Out\n","import * as v from 'valibot'\nimport { DcqlCredentialQuery } from '../dcql-query/m-dcql-credential-query.js'\nimport { CredentialSetQuery } from '../dcql-query/m-dcql-credential-set-query.js'\nimport { DcqlCredential } from '../u-dcql-credential.js'\nimport { vIdString, vNonEmptyArray } from '../u-dcql.js'\n\nexport namespace DcqlQueryResult {\n export const vCredentialQueryResult = v.pipe(\n v.array(v.array(v.union([v.undefined(), DcqlCredential.vParseSuccess, DcqlCredential.vParseFailure]))),\n vNonEmptyArray()\n )\n\n export type CredentialQueryResult = v.InferOutput<typeof vCredentialQueryResult>\n\n export const vModel = v.object({\n credentials: v.pipe(\n v.array(DcqlCredentialQuery.vModel),\n vNonEmptyArray(),\n v.description(\n 'REQUIRED. A non-empty array of Credential Queries that specify the requested Verifiable Credentials.'\n )\n ),\n\n credential_matches: v.record(\n v.pipe(vIdString),\n v.union([\n v.object({\n ...DcqlCredential.vParseSuccess.entries,\n all: v.pipe(\n v.array(\n v.pipe(\n v.array(v.union([v.undefined(), DcqlCredential.vParseSuccess, DcqlCredential.vParseFailure])),\n vNonEmptyArray()\n )\n ),\n vNonEmptyArray()\n ),\n }),\n v.object({\n success: DcqlCredential.vParseFailure.entries.success,\n all: v.pipe(\n v.array(\n v.pipe(\n v.array(v.union([v.undefined(), DcqlCredential.vParseSuccess, DcqlCredential.vParseFailure])),\n vNonEmptyArray()\n )\n ),\n vNonEmptyArray()\n ),\n }),\n ])\n ),\n\n credential_sets: v.optional(\n v.pipe(\n v.array(\n v.object({\n ...CredentialSetQuery.vModel.entries,\n matching_options: v.union([v.undefined(), v.pipe(v.array(v.array(v.string())), vNonEmptyArray())]),\n })\n ),\n vNonEmptyArray(),\n v.description(\n 'OPTIONAL. A non-empty array of credential set queries that specifies additional constraints on which of the requested Verifiable Credentials to return.'\n )\n )\n ),\n\n canBeSatisfied: v.boolean(),\n })\n export type Input = v.InferInput<typeof vModel>\n export type Output = v.InferOutput<typeof vModel>\n\n export type CredentialMatch = Input['credential_matches'][number]\n export type CredentialMatchRecord = Input['credential_matches']\n}\nexport type DcqlQueryResult = DcqlQueryResult.Output\n","import * as v from 'valibot'\nimport { DcqlUndefinedClaimSetIdError } from '../dcql-error/e-dcql.js'\nimport { idRegex, vIdString, vNonEmptyArray } from '../u-dcql.js'\nimport { DcqlClaimsQuery } from './m-dcql-claims-query.js'\n\n/**\n * A Credential Query is an object representing a request for a presentation of one Credential.\n */\nexport namespace DcqlCredentialQuery {\n const vBase = v.object({\n id: v.pipe(\n v.string(),\n v.regex(idRegex),\n v.description(\n `REQUIRED. A string identifying the Credential in the response and, if provided, the constraints in 'credential_sets'.`\n )\n ),\n claim_sets: v.pipe(\n v.optional(v.pipe(v.array(v.pipe(v.array(vIdString), vNonEmptyArray())), vNonEmptyArray())),\n v.description(\n `OPTIONAL. A non-empty array containing arrays of identifiers for elements in 'claims' that specifies which combinations of 'claims' for the Credential are requested.`\n )\n ),\n })\n\n export const vMdoc = v.object({\n ...vBase.entries,\n format: v.pipe(\n v.literal('mso_mdoc'),\n v.description('REQUIRED. A string that specifies the format of the requested Verifiable Credential.')\n ),\n claims: v.pipe(\n v.optional(v.pipe(v.array(DcqlClaimsQuery.vMdoc), vNonEmptyArray())),\n v.description('OPTIONAL. A non-empty array of objects as that specifies claims in the requested Credential.')\n ),\n meta: v.pipe(\n v.optional(\n v.object({\n doctype_value: v.pipe(\n v.optional(v.string()),\n v.description(\n 'OPTIONAL. String that specifies an allowed value for the doctype of the requested Verifiable Credential.'\n )\n ),\n })\n ),\n v.description(\n 'OPTIONAL. An object defining additional properties requested by the Verifier that apply to the metadata and validity data of the Credential.'\n )\n ),\n })\n export type Mdoc = v.InferOutput<typeof vMdoc>\n\n export const vSdJwtVc = v.object({\n ...vBase.entries,\n format: v.pipe(\n v.picklist(['vc+sd-jwt', 'dc+sd-jwt']),\n v.description('REQUIRED. A string that specifies the format of the requested Verifiable Credential.')\n ),\n claims: v.pipe(\n v.optional(v.pipe(v.array(DcqlClaimsQuery.vW3cSdJwtVc), vNonEmptyArray())),\n v.description('OPTIONAL. A non-empty array of objects as that specifies claims in the requested Credential.')\n ),\n meta: v.pipe(\n v.optional(\n v.pipe(\n v.object({\n vct_values: v.optional(v.array(v.string())),\n }),\n v.description(\n 'OPTIONAL. An array of strings that specifies allowed values for the type of the requested Verifiable Credential.'\n )\n )\n ),\n v.description(\n 'OPTIONAL. An object defining additional properties requested by the Verifier that apply to the metadata and validity data of the Credential.'\n )\n ),\n })\n export type SdJwtVc = v.InferOutput<typeof vSdJwtVc>\n\n export const vW3cVc = v.object({\n ...vBase.entries,\n format: v.picklist(['jwt_vc_json', 'jwt_vc_json-ld']),\n claims: v.optional(v.pipe(v.array(DcqlClaimsQuery.vW3cSdJwtVc), vNonEmptyArray())),\n })\n export type W3cVc = v.InferOutput<typeof vW3cVc>\n\n export const vModel = v.variant('format', [vMdoc, vSdJwtVc, vW3cVc])\n export type Input = v.InferInput<typeof vModel>\n export type Output = v.InferOutput<typeof vModel>\n\n export const validate = (credentialQuery: Output) => {\n claimSetIdsAreDefined(credentialQuery)\n }\n}\nexport type DcqlCredentialQuery = DcqlCredentialQuery.Output\n\n// --- validations --- //\n\nconst claimSetIdsAreDefined = (credentialQuery: DcqlCredentialQuery) => {\n if (!credentialQuery.claim_sets) return\n const claimIds = new Set(credentialQuery.claims?.map((claim) => claim.id))\n\n const undefinedClaims: string[] = []\n for (const claim_set of credentialQuery.claim_sets) {\n for (const claim_id of claim_set) {\n if (!claimIds.has(claim_id)) {\n undefinedClaims.push(claim_id)\n }\n }\n }\n\n if (undefinedClaims.length > 0) {\n throw new DcqlUndefinedClaimSetIdError({\n message: `Credential set contains undefined credential id${undefinedClaims.length === 0 ? '' : '`s'} '${undefinedClaims.join(', ')}'`,\n })\n }\n}\n","import * as v from 'valibot'\nimport { vIdString, vNonEmptyArray } from '../u-dcql.js'\n\n/**\n * A Credential Set Query is an object representing\n * a request for one or more credentials to satisfy a particular use case with the Verifier.\n */\nexport namespace CredentialSetQuery {\n export const vModel = v.object({\n options: v.pipe(\n v.array(v.array(vIdString)),\n vNonEmptyArray(),\n v.description(\n '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.'\n )\n ),\n required: v.pipe(\n v.optional(v.boolean(), true),\n v.description(\n `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'.`\n )\n ),\n purpose: v.pipe(\n v.optional(v.union([v.string(), v.number(), v.record(v.string(), v.unknown())])),\n v.description('OPTIONAL. A string, number or object specifying the purpose of the query.')\n ),\n })\n\n export type Input = v.InferInput<typeof vModel>\n export type Output = v.InferOutput<typeof vModel>\n}\nexport type CredentialSetQuery = CredentialSetQuery.Output\n","import * as v from 'valibot'\nimport { vIdString, vJsonRecord, vStringToJson } from '../u-dcql.js'\n\nexport namespace DcqlPresentation {\n export const vModel = v.record(vIdString, v.union([v.string(), vJsonRecord]))\n\n export type Input = v.InferInput<typeof vModel>\n export type Output = v.InferOutput<typeof vModel>\n export const parse = (input: Input | string) => {\n if (typeof input === 'string') {\n return v.parse(v.pipe(v.string(), vStringToJson, vModel), input)\n }\n\n return v.parse(vModel, input)\n }\n\n export const encode = (input: Output) => {\n return JSON.stringify(input)\n }\n}\nexport type DcqlPresentation = DcqlPresentation.Output\n","import type * as v from 'valibot'\nimport { runCredentialQuery } from '../dcql-parser/dcql-credential-query-result.js'\nimport type { DcqlQuery } from '../dcql-query/m-dcql-query.js'\nimport type { DcqlCredential } from '../u-dcql-credential.js'\nimport type { DcqlQueryResult } from './m-dcql-query-result.js'\n\nexport const runDcqlQuery = (\n dcqlQuery: DcqlQuery.Output,\n ctx: {\n credentials: DcqlCredential[]\n presentation: boolean\n }\n): DcqlQueryResult => {\n const credentialQueriesResults = Object.fromEntries(\n dcqlQuery.credentials.map((credentialQuery) => [credentialQuery.id, runCredentialQuery(credentialQuery, ctx)])\n )\n\n const credentialMatches = Object.fromEntries(\n Object.entries(credentialQueriesResults).map(([key, credentialQueryResult]) => {\n // Find the best match for each credential query\n let bestMatch: v.InferOutput<typeof DcqlCredential.vParseSuccess> | undefined = undefined\n\n for (const credentialParseResult of credentialQueryResult) {\n const bestMatchForCredential = credentialParseResult.find((result) => result?.success === true)\n\n if (!bestMatch && bestMatchForCredential) {\n const { issues, ...matchWithoutIssues } = bestMatchForCredential\n bestMatch = matchWithoutIssues\n continue\n }\n\n // biome-ignore lint/style/noNonNullAssertion: <explanation>\n if (bestMatchForCredential && bestMatchForCredential.claim_set_index! < bestMatch?.claim_set_index!) {\n const { issues, ...matchWithoutIssues } = bestMatchForCredential\n bestMatch = matchWithoutIssues\n }\n }\n\n return [\n key,\n bestMatch ? { ...bestMatch, all: credentialQueryResult } : { success: false, all: credentialQueryResult },\n ]\n })\n ) satisfies DcqlQueryResult.CredentialMatchRecord\n\n const credentialSetResults = dcqlQuery.credential_sets?.map((set) => {\n const matchingOptions = set.options.filter((option) =>\n option.every((credentialQueryId) => credentialMatches[credentialQueryId]?.success)\n )\n\n return {\n ...set,\n matching_options: matchingOptions.length > 0 ? (matchingOptions as [string[], ...string[][]]) : undefined,\n }\n }) as DcqlQueryResult.Output['credential_sets']\n\n const dqclQueryMatched = credentialSetResults\n ? credentialSetResults.every((set) => !set.required || set.matching_options)\n : Object.values(credentialMatches).every((query) => query.success)\n\n return {\n ...dcqlQuery,\n canBeSatisfied: dqclQueryMatched,\n credential_matches: credentialMatches as DcqlQueryResult['credential_matches'],\n credential_sets: credentialSetResults,\n }\n}\n","import * as v from 'valibot'\nimport { DcqlCredentialSetError, DcqlNonUniqueCredentialQueryIdsError } from '../dcql-error/e-dcql.js'\nimport { runDcqlQuery } from '../dcql-query-result/run-dcql-query.js'\nimport type { DcqlCredential } from '../u-dcql-credential.js'\nimport { vNonEmptyArray } from '../u-dcql.js'\nimport { DcqlCredentialQuery } from './m-dcql-credential-query.js'\nimport { CredentialSetQuery } from './m-dcql-credential-set-query.js'\n\n/**\n * The Digital Credentials Query Language (DCQL, pronounced [ˈdakl̩]) is a\n * JSON-encoded query language that allows the Verifier to request Verifiable\n * Presentations that match the query. The Verifier MAY encode constraints on the\n * combinations of credentials and claims that are requested. The Wallet evaluates\n * the query against the Verifiable Credentials it holds and returns Verifiable\n * Presentations matching the query.\n */\nexport namespace DcqlQuery {\n export const vModel = v.object({\n credentials: v.pipe(\n v.array(DcqlCredentialQuery.vModel),\n vNonEmptyArray(),\n v.description(\n 'REQUIRED. A non-empty array of Credential Queries that specify the requested Verifiable Credentials.'\n )\n ),\n credential_sets: v.pipe(\n v.optional(v.pipe(v.array(CredentialSetQuery.vModel), vNonEmptyArray())),\n v.description(\n 'OPTIONAL. A non-empty array of credential set queries that specifies additional constraints on which of the requested Verifiable Credentials to return.'\n )\n ),\n })\n export type Input = v.InferInput<typeof vModel>\n export type Output = v.InferOutput<typeof vModel>\n export const validate = (dcqlQuery: Output) => {\n validateUniqueCredentialQueryIds(dcqlQuery)\n validateCredentialSets(dcqlQuery)\n dcqlQuery.credentials.forEach(DcqlCredentialQuery.validate)\n }\n export const query = (dcqlQuery: Output, credentials: DcqlCredential[]) => {\n return runDcqlQuery(dcqlQuery, { credentials, presentation: false })\n }\n\n export const parse = (input: Input) => {\n return v.parse(vModel, input)\n }\n}\nexport type DcqlQuery = DcqlQuery.Output\n\n// --- validations --- //\n\nconst validateUniqueCredentialQueryIds = (query: DcqlQuery.Output) => {\n const ids = query.credentials.map((c) => c.id)\n const duplicates = ids.filter((id, index) => ids.indexOf(id) !== index)\n\n if (duplicates.length > 0) {\n throw new DcqlNonUniqueCredentialQueryIdsError({\n message: `Duplicate credential query ids found: ${duplicates.join(', ')}`,\n })\n }\n}\n\nconst validateCredentialSets = (query: DcqlQuery.Output) => {\n if (!query.credential_sets) return\n\n const credentialQueryIds = new Set(query.credentials.map((c) => c.id))\n\n const undefinedCredentialQueryIds: string[] = []\n for (const credential_set of query.credential_sets) {\n for (const credentialSetOption of credential_set.options) {\n for (const credentialQueryId of credentialSetOption) {\n if (!credentialQueryIds.has(credentialQueryId)) {\n undefinedCredentialQueryIds.push(credentialQueryId)\n }\n }\n }\n }\n\n if (undefinedCredentialQueryIds.length > 0) {\n throw new DcqlCredentialSetError({\n message: `Credential set contains undefined credential id${undefinedCredentialQueryIds.length === 1 ? '' : '`s'} '${undefinedCredentialQueryIds.join(', ')}'`,\n })\n }\n}\n"],"mappings":"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","names":["v","v","v","DcqlMdocCredential","DcqlSdJwtVcCredential","DcqlW3cVcCredential","DcqlCredential","DcqlMdocPresentation","DcqlSdJwtVcPresentation","DcqlW3cVcPresentation","DcqlCredentialPresentation","v","v","v","v","DcqlClaimsQuery","query","v","v","DcqlCredentialQuery","v","CredentialSetQuery","DcqlQueryResult","DcqlPresentationResult","v","DcqlPresentation","v","DcqlQuery"]}
package/dist/index.mjs CHANGED
@@ -810,7 +810,7 @@ var DcqlPresentationResult;
810
810
  }
811
811
  }
812
812
  invalidMatches = Object.fromEntries(
813
- Object.entries(invalidMatches ?? {}).filter(([queryId, result]) => validMatches[queryId] === void 0)
813
+ Object.entries(invalidMatches ?? {}).filter(([queryId]) => validMatches[queryId] === void 0)
814
814
  );
815
815
  const credentialSetResults = dcqlQuery.credential_sets?.map((set) => {
816
816
  const matchingOptions = set.options.filter(
@@ -821,7 +821,7 @@ var DcqlPresentationResult;
821
821
  matching_options: matchingOptions.length > 0 ? matchingOptions : void 0
822
822
  };
823
823
  });
824
- const dqclQueryMatched = credentialSetResults ? credentialSetResults.every((set) => !set.required || set.matching_options) : Object.keys(invalidMatches).length === 0;
824
+ const dqclQueryMatched = credentialSetResults ? credentialSetResults.every((set) => !set.required || set.matching_options) : Object.keys(validMatches).length === ctx.dcqlQuery.credentials.length;
825
825
  return {
826
826
  ...dcqlQuery,
827
827
  canBeSatisfied: dqclQueryMatched,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/dcql-error/e-base.ts","../src/dcql-error/e-dcql.ts","../src/dcql-presentation/m-dcql-credential-presentation.ts","../src/u-dcql-credential.ts","../src/u-dcql.ts","../src/u-model.ts","../src/dcql-presentation/m-dcql-presentation-result.ts","../src/dcql-parser/dcql-credential-query-result.ts","../src/dcql-parser/dcql-claims-query-result.ts","../src/dcql-query/m-dcql-claims-query.ts","../src/dcql-query-result/m-dcql-query-result.ts","../src/dcql-query/m-dcql-credential-query.ts","../src/dcql-query/m-dcql-credential-set-query.ts","../src/dcql-presentation/m-dcql-presentation.ts","../src/dcql-query-result/run-dcql-query.ts","../src/dcql-query/m-dcql-query.ts"],"sourcesContent":["function isObject(value: unknown): value is Record<string, unknown> {\n return !!value && !Array.isArray(value) && typeof value === 'object'\n}\n\nclass UnknownCauseError extends Error {\n [key: string]: unknown\n}\n\nexport function getCauseFromUnknown(cause: unknown): Error | undefined {\n if (cause instanceof Error) {\n return cause\n }\n\n const type = typeof cause\n if (type === 'undefined' || type === 'function' || cause === null) {\n return undefined\n }\n\n // Primitive types just get wrapped in an error\n if (type !== 'object') {\n return new Error(String(cause))\n }\n\n // If it's an object, we'll create a synthetic error\n if (isObject(cause)) {\n const err = new UnknownCauseError()\n for (const key in cause) {\n err[key] = cause[key]\n }\n return err\n }\n\n return undefined\n}\n\nexport const isDcqlError = (cause: unknown): cause is DcqlError => {\n if (cause instanceof DcqlError) {\n return true\n }\n if (cause instanceof Error && cause.name === 'DcqlError') {\n // https://github.com/trpc/trpc/pull/4848\n return true\n }\n\n return false\n}\n\nexport function getDcqlErrorFromUnknown(cause: unknown): DcqlError {\n if (isDcqlError(cause)) {\n return cause\n }\n\n const dcqlError = new DcqlError({\n code: 'INTERNAL_SERVER_ERROR',\n cause,\n })\n\n // Inherit stack from error\n if (cause instanceof Error && cause.stack) {\n dcqlError.stack = cause.stack\n }\n\n return dcqlError\n}\n\ntype DCQL_ERROR_CODE = 'PARSE_ERROR' | 'INTERNAL_SERVER_ERROR' | 'NOT_IMPLEMENTED' | 'BAD_REQUEST'\n\nexport class DcqlError extends Error {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore override doesn't work in all environments due to \"This member cannot have an 'override' modifier because it is not declared in the base class 'Error'\"\n public override readonly cause?: Error\n public readonly code\n\n constructor(opts: {\n message?: string\n code: DCQL_ERROR_CODE\n cause?: unknown\n }) {\n const cause = getCauseFromUnknown(opts.cause)\n const message = opts.message ?? cause?.message ?? opts.code\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore https://github.com/tc39/proposal-error-cause\n super(message, { cause })\n\n this.code = opts.code\n this.name = 'DcqlError'\n\n if (!this.cause) {\n // < ES2022 / < Node 16.9.0 compatability\n this.cause = cause\n }\n }\n}\n","import { DcqlError } from './e-base.js'\n\nexport class DcqlCredentialSetError extends DcqlError {\n constructor(opts: { message: string; cause?: unknown }) {\n super({ code: 'BAD_REQUEST', ...opts })\n }\n}\n\nexport class DcqlUndefinedClaimSetIdError extends DcqlError {\n constructor(opts: { message: string; cause?: unknown }) {\n super({ code: 'BAD_REQUEST', ...opts })\n }\n}\n\nexport class DcqlNonUniqueCredentialQueryIdsError extends DcqlError {\n constructor(opts: { message: string; cause?: unknown }) {\n super({ code: 'BAD_REQUEST', ...opts })\n }\n}\n\nexport class DcqlParseError extends DcqlError {\n constructor(opts: { message: string; cause?: unknown }) {\n super({ code: 'PARSE_ERROR', ...opts })\n }\n}\n\nexport class DcqlInvalidClaimsQueryIdError extends DcqlError {\n constructor(opts: { message: string; cause?: unknown }) {\n super({ code: 'BAD_REQUEST', ...opts })\n }\n}\n\nexport class DcqlMissingClaimSetParseError extends DcqlError {\n constructor(opts: { message: string; cause?: unknown }) {\n super({ code: 'PARSE_ERROR', ...opts })\n }\n}\n\nexport class DcqlInvalidPresentationRecordError extends DcqlError {\n constructor(opts: { message: string; cause?: unknown }) {\n super({ code: 'BAD_REQUEST', ...opts })\n }\n}\n\nexport class DcqlPresentationResultError extends DcqlError {\n constructor(opts: { message: string; cause?: unknown }) {\n super({ code: 'BAD_REQUEST', ...opts })\n }\n}\n","import * as v from 'valibot'\nimport { DcqlMdocCredential, DcqlSdJwtVcCredential, DcqlW3cVcCredential } from '../u-dcql-credential'\nimport type { InferModelTypes } from '../u-model'\nimport { Model } from '../u-model'\n\nexport namespace DcqlMdocPresentation {\n export const vModel = DcqlMdocCredential.vModel\n export const model = new Model({ vModel })\n export type Model = InferModelTypes<typeof model>\n}\nexport type DcqlMdocPresentation = DcqlMdocPresentation.Model['Output']\n\nexport namespace DcqlSdJwtVcPresentation {\n export const vModel = DcqlSdJwtVcCredential.vModel\n export const model = new Model({ vModel })\n export type Model = InferModelTypes<typeof model>\n}\nexport type DcqlSdJwtVcPresentation = DcqlSdJwtVcPresentation.Model['Output']\n\nexport namespace DcqlW3cVcPresentation {\n export const vModel = DcqlW3cVcCredential.vModel\n export const model = new Model({ vModel })\n export type Model = InferModelTypes<typeof model>\n}\nexport type DcqlW3cVcPresentation = DcqlW3cVcPresentation.Model['Output']\n\nexport namespace DcqlCredentialPresentation {\n export const model = new Model({\n vModel: v.variant('credential_format', [\n DcqlMdocPresentation.vModel,\n DcqlSdJwtVcPresentation.vModel,\n DcqlW3cVcPresentation.vModel,\n ]),\n })\n export type Model = InferModelTypes<typeof model>\n}\nexport type DcqlCredentialPresentation = DcqlCredentialPresentation.Model['Output']\n","import * as v from 'valibot'\nimport { vJsonRecord, vNonEmptyArray } from './u-dcql.js'\nimport type { InferModelTypes } from './u-model.js'\nimport { Model } from './u-model.js'\n\nexport namespace DcqlMdocCredential {\n export const vNamespaces = v.record(v.string(), v.record(v.string(), v.unknown()))\n export const vModel = v.object({\n credential_format: v.literal('mso_mdoc'),\n doctype: v.string(),\n namespaces: vNamespaces,\n })\n\n export const model = new Model({ vModel })\n export type Model = InferModelTypes<typeof model>\n export type NameSpaces = v.InferOutput<typeof vNamespaces>\n}\nexport type DcqlMdocCredential = DcqlMdocCredential.Model['Output']\n\nexport namespace DcqlSdJwtVcCredential {\n export const vClaims = vJsonRecord\n export const vModel = v.object({\n credential_format: v.picklist(['vc+sd-jwt', 'dc+sd-jwt']),\n vct: v.string(),\n claims: vClaims,\n })\n export const model = new Model({ vModel })\n export type Model = InferModelTypes<typeof model>\n export type Claims = Model['Output']['claims']\n}\nexport type DcqlSdJwtVcCredential = DcqlSdJwtVcCredential.Model['Output']\n\nexport namespace DcqlW3cVcCredential {\n export const vClaims = vJsonRecord\n export const vModel = v.object({\n credential_format: v.picklist(['jwt_vc_json-ld', 'jwt_vc_json']),\n claims: vClaims,\n })\n\n export const model = new Model({ vModel })\n export type Model = InferModelTypes<typeof model>\n export type Claims = Model['Output']['claims']\n}\nexport type DcqlW3cVcCredential = DcqlW3cVcCredential.Model['Output']\n\nexport namespace DcqlCredential {\n export const vModel = v.variant('credential_format', [\n DcqlMdocCredential.vModel,\n DcqlSdJwtVcCredential.vModel,\n DcqlW3cVcCredential.vModel,\n ])\n\n export const vParseSuccess = v.object({\n success: v.literal(true),\n typed: v.literal(true),\n issues: v.optional(v.undefined()),\n input_credential_index: v.number(),\n claim_set_index: v.union([v.number(), v.undefined()]),\n output: DcqlCredential.vModel,\n })\n\n export const vParseFailure = v.object({\n success: v.literal(false),\n typed: v.boolean(),\n output: v.unknown(),\n issues: v.pipe(v.array(v.unknown()), vNonEmptyArray()),\n input_credential_index: v.number(),\n claim_set_index: v.union([v.number(), v.undefined()]),\n })\n export const model = new Model({ vModel })\n export type Model = InferModelTypes<typeof model>\n}\nexport type DcqlCredential = DcqlCredential.Model['Output']\n","import * as v from 'valibot'\nimport type { UnknownBaseSchema } from './u-model'\nexport const idRegex = /^[a-zA-Z0-9_-]+$/\n\nexport const vNonEmptyArray = <T extends unknown[]>() => {\n return v.custom<[T[number], ...T]>((input) => (input as T).length > 0)\n}\n\nexport const vIdString = v.pipe(v.string(), v.regex(idRegex), v.nonEmpty())\n\nexport type Json = string | number | boolean | null | { [key: string]: Json } | Json[]\n\ninterface HasToJson {\n toJson(): Json\n}\n\nfunction isToJsonable(value: unknown): value is HasToJson {\n if (value === null || typeof value !== 'object') return false\n\n // biome-ignore lint/suspicious/noExplicitAny: <explanation>\n const toJsonFn = (value as any).toJson\n return typeof toJsonFn === 'function'\n}\n\nexport const vWithJT = <Schema extends UnknownBaseSchema>(schema: Schema) =>\n v.pipe(\n v.custom<v.InferInput<Schema>>(() => true),\n v.rawTransform<v.InferInput<Schema>, v.InferOutput<Schema>>(({ dataset, addIssue, NEVER }) => {\n const result = v.safeParse(schema, dataset.value)\n if (result.success) return dataset.value\n\n if (!isToJsonable(dataset.value)) {\n for (const safeParseIssue of result.issues) {\n addIssue({\n ...safeParseIssue,\n expected: safeParseIssue.expected ?? undefined,\n })\n }\n\n return NEVER\n }\n\n let json: Json\n\n try {\n json = dataset.value.toJson()\n } catch (error) {\n for (const safeParseIssue of result.issues) {\n addIssue({\n ...safeParseIssue,\n expected: safeParseIssue.expected ?? undefined,\n })\n }\n addIssue({ message: 'Json Transformation failed' })\n return NEVER\n }\n\n const safeParseResult: v.SafeParseResult<Schema> = v.safeParse(schema, json)\n if (safeParseResult.success) return dataset.value\n\n for (const safeParseIssue of safeParseResult.issues) {\n addIssue({\n ...safeParseIssue,\n expected: safeParseIssue.expected ?? undefined,\n })\n }\n\n return NEVER\n })\n )\n\nexport const vJsonLiteral = v.union([v.string(), v.number(), v.boolean(), v.null()])\n\nexport type JsonLiteral = v.InferOutput<typeof vJsonLiteral>\n\nexport const vJson: v.GenericSchema<Json> = v.lazy(() =>\n v.union([vJsonLiteral, v.array(vJson), v.record(v.string(), vJson)])\n)\n\nexport const vJsonWithJT: v.GenericSchema<Json> = v.lazy(() =>\n vWithJT(v.union([vJsonLiteral, v.array(vJson), v.record(v.string(), vJson)]))\n)\n\nexport const vJsonRecord = v.record(v.string(), vJson)\nexport type JsonRecord = v.InferOutput<typeof vJsonRecord>\n\nexport const vStringToJson = v.rawTransform<string, Json>(({ dataset, addIssue, NEVER }) => {\n try {\n return JSON.parse(dataset.value) as Json\n } catch (error) {\n addIssue({ message: 'Invalid JSON' })\n return NEVER\n }\n})\n","import * as v from 'valibot'\nimport { DcqlParseError } from './dcql-error/e-dcql'\n\nexport type UnknownBaseSchema = v.BaseSchema<unknown, unknown, v.BaseIssue<unknown>>\n\ntype EnsureOutputAssignableToInput<T extends UnknownBaseSchema> = v.InferOutput<T> extends v.InferInput<T> ? T : never\n\nexport class Model<T extends UnknownBaseSchema> {\n constructor(private input: { vModel: EnsureOutputAssignableToInput<T> }) {}\n\n public get v() {\n return this.input.vModel\n }\n\n public parse(input: T) {\n const result = this.safeParse(input)\n\n if (result.success) {\n return result.output\n }\n\n return new DcqlParseError({\n message: JSON.stringify(result.flattened),\n cause: result.error,\n })\n }\n\n public safeParse(\n input: unknown\n ):\n | { success: true; output: v.InferOutput<T> }\n | { success: false; flattened: v.FlatErrors<T>; error: v.ValiError<T> } {\n const res = v.safeParse(this.input.vModel, input)\n if (res.success) {\n return { success: true, output: res.output }\n }\n return {\n success: false,\n error: new v.ValiError(res.issues),\n flattened: v.flatten<T>(res.issues),\n }\n }\n\n public is(input: unknown): input is v.InferOutput<T> {\n return v.is(this.v, input)\n }\n}\n\n// biome-ignore lint/suspicious/noExplicitAny: <explanation>\nexport type InferModelTypes<T extends Model<any>> = T extends Model<infer U>\n ? {\n Input: v.InferInput<U>\n Output: v.InferOutput<U>\n }\n : never\n","import * as v from 'valibot'\n\nimport { DcqlInvalidPresentationRecordError, DcqlPresentationResultError } from '../dcql-error/e-dcql.js'\nimport { runCredentialQuery } from '../dcql-parser/dcql-credential-query-result.js'\nimport { DcqlQueryResult } from '../dcql-query-result/m-dcql-query-result.js'\nimport type { DcqlQuery } from '../dcql-query/m-dcql-query.js'\nimport { DcqlCredential } from '../u-dcql-credential.js'\nimport { vIdString } from '../u-dcql.js'\nimport type { DcqlCredentialPresentation } from './m-dcql-credential-presentation.js'\n\nexport namespace DcqlPresentationResult {\n export const vModel = v.object({\n ...v.omit(DcqlQueryResult.vModel, ['credential_matches']).entries,\n\n invalid_matches: v.union([\n v.record(\n v.pipe(vIdString),\n v.object({\n ...v.omit(DcqlCredential.vParseFailure, ['input_credential_index']).entries,\n presentation_id: v.pipe(vIdString),\n })\n ),\n v.undefined(),\n ]),\n\n valid_matches: v.record(\n v.pipe(vIdString),\n v.object({\n ...v.omit(DcqlCredential.vParseSuccess, ['issues', 'input_credential_index']).entries,\n presentation_id: v.pipe(vIdString),\n })\n ),\n })\n\n export type Input = v.InferInput<typeof vModel>\n export type Output = v.InferOutput<typeof vModel>\n\n export const parse = (input: Input | DcqlQueryResult) => {\n return v.parse(vModel, input)\n }\n\n /**\n * Query if the presentation record can be satisfied by the provided presentations\n * considering the dcql query\n *\n * @param dcqlQuery\n * @param dcqlPresentation\n */\n export const fromDcqlPresentation = (\n dcqlPresentation: Record<string, DcqlCredentialPresentation>,\n ctx: { dcqlQuery: DcqlQuery }\n ): Output => {\n const { dcqlQuery } = ctx\n\n const presentationQueriesResults = Object.fromEntries(\n Object.entries(dcqlPresentation).map(([queryId, presentation]) => {\n const credentialQuery = dcqlQuery.credentials.find((c) => c.id === queryId)\n if (!credentialQuery) {\n throw new DcqlPresentationResultError({\n message: `Query ${queryId} not found in the dcql query. Cannot validate presentation.`,\n })\n }\n\n return [\n queryId,\n runCredentialQuery(credentialQuery, {\n presentation: true,\n credentials: [presentation],\n }),\n ]\n })\n )\n\n let invalidMatches: DcqlPresentationResult['invalid_matches'] = {}\n const validMatches: DcqlPresentationResult['valid_matches'] = {}\n\n for (const [queryId, presentationQueryResult] of Object.entries(presentationQueriesResults)) {\n for (const presentationQueryResultForClaimSet of presentationQueryResult) {\n // NOTE: result can be undefined, but this is only the case if there was a valid claim\n // set match previously and we skip other claim set matching. We don't add these to the parse\n // result.\n const result = presentationQueryResultForClaimSet[0]\n\n if (result?.success) {\n const { issues, input_credential_index, ...rest } = result\n validMatches[queryId] = { ...rest, presentation_id: queryId }\n } else if (result?.success === false) {\n const { input_credential_index, ...rest } = result\n invalidMatches[queryId] = {\n ...rest,\n presentation_id: queryId,\n }\n }\n }\n }\n\n // Only keep the invalid matches that do not have a valid match as well\n invalidMatches = Object.fromEntries(\n Object.entries(invalidMatches ?? {}).filter(([queryId, result]) => validMatches[queryId] === undefined)\n )\n\n const credentialSetResults = dcqlQuery.credential_sets?.map((set) => {\n const matchingOptions = set.options.filter((option) =>\n option.every((credentialQueryId) => validMatches[credentialQueryId]?.success)\n )\n\n return {\n ...set,\n matching_options: matchingOptions.length > 0 ? (matchingOptions as [string[], ...string[][]]) : undefined,\n }\n }) as DcqlQueryResult.Output['credential_sets']\n\n const dqclQueryMatched = credentialSetResults\n ? credentialSetResults.every((set) => !set.required || set.matching_options)\n : Object.keys(invalidMatches).length === 0\n\n return {\n ...dcqlQuery,\n canBeSatisfied: dqclQueryMatched,\n valid_matches: validMatches,\n invalid_matches: Object.keys(invalidMatches).length === 0 ? undefined : {},\n credential_sets: credentialSetResults,\n }\n }\n\n export const validate = (dcqlQueryResult: DcqlPresentationResult) => {\n if (!dcqlQueryResult.canBeSatisfied) {\n throw new DcqlInvalidPresentationRecordError({\n message: 'Invalid Presentation record',\n cause: dcqlQueryResult,\n })\n }\n\n return dcqlQueryResult satisfies Output\n }\n}\nexport type DcqlPresentationResult = DcqlPresentationResult.Output\n","import * as v from 'valibot'\nimport type { DcqlQueryResult } from '../dcql-query-result/m-dcql-query-result.js'\nimport type { DcqlCredentialQuery } from '../dcql-query/m-dcql-credential-query.js'\nimport type { DcqlCredential } from '../u-dcql-credential.js'\nimport type {} from '../u-dcql.js'\nimport { getCredentialQueryParser } from './dcql-claims-query-result.js'\n\nexport const runCredentialQuery = (\n credentialQuery: DcqlCredentialQuery,\n ctx: {\n credentials: DcqlCredential[]\n presentation: boolean\n }\n): DcqlQueryResult.CredentialQueryResult => {\n const { credentials, presentation } = ctx\n const claimSets = credentialQuery.claim_sets ?? [undefined]\n\n const credentialQueryResult: v.InferInput<typeof DcqlQueryResult.vCredentialQueryResult> = []\n\n for (const [claimSetIndex, claim_set] of claimSets.entries()) {\n const credentialParser = getCredentialQueryParser(credentialQuery, {\n claimSet: claim_set,\n presentation,\n })\n\n const claimSetResult: (typeof credentialQueryResult)[number] = []\n\n for (const [credentialIndex, credential] of credentials.entries()) {\n if (claimSetIndex > 0) {\n // if one the credential was successfully parsed against a previous claimsset we don't need to further validate other claim sets\n const previous = credentialQueryResult[claimSetIndex - 1][credentialIndex]\n\n // if the previous credential was successfully parsed we don't need to further validate the current credential\n // we set all further parsing attempts to undefined\n if (previous?.success || !previous) {\n claimSetResult[credentialIndex] = undefined\n continue\n }\n }\n\n const parseResult = v.safeParse(credentialParser, credential)\n claimSetResult.push({\n ...parseResult,\n ...(parseResult.issues && {\n flattened: v.flatten<typeof credentialParser>(parseResult.issues),\n }),\n input_credential_index: credentialIndex,\n claim_set_index: credentialQuery.claim_sets ? claimSetIndex : undefined,\n })\n }\n\n credentialQueryResult.push(claimSetResult)\n }\n\n return credentialQueryResult as DcqlQueryResult.CredentialQueryResult\n}\n","import * as v from 'valibot'\nimport { DcqlInvalidClaimsQueryIdError, DcqlMissingClaimSetParseError } from '../dcql-error/e-dcql.js'\nimport { DcqlClaimsQuery } from '../dcql-query/m-dcql-claims-query.js'\nimport type { DcqlCredentialQuery } from '../dcql-query/m-dcql-credential-query.js'\nimport { vWithJT } from '../u-dcql.js'\nimport { vJson, vJsonRecord } from '../u-dcql.js'\n\nconst getClaimParser = (input: {\n value?: string | number | boolean\n values?: (string | number | boolean)[]\n}) => {\n const { value, values } = input\n if (value) {\n return vWithJT(v.literal(value))\n }\n\n if (values) {\n return vWithJT(v.union(values.map((val) => v.literal(val))))\n }\n\n return v.nonNullish(v.any())\n}\n\nexport const getNamespacesParser = (claimsQueries: DcqlClaimsQuery.Mdoc[]) => {\n const claimsForNamespace: Record<string, DcqlClaimsQuery.MdocPath[]> = {}\n\n for (const claimQuery of claimsQueries) {\n // Normalize the query to the latest path syntax\n const mdocPathQuery: DcqlClaimsQuery.MdocPath = v.is(DcqlClaimsQuery.vMdocNamespace, claimQuery)\n ? {\n id: claimQuery.id,\n path: [claimQuery.namespace, claimQuery.claim_name],\n values: claimQuery.values,\n }\n : claimQuery\n\n const namespace = mdocPathQuery.path[0]\n if (claimsForNamespace[namespace]) {\n claimsForNamespace[namespace]?.push({ ...mdocPathQuery })\n } else {\n claimsForNamespace[namespace] = [{ ...mdocPathQuery }]\n }\n }\n\n const parsersForNamespaces = Object.entries(claimsForNamespace).map(([namespace, claims]) => {\n const claimParsers = Object.fromEntries(claims.map((claim) => [claim.path[1], getClaimParser(claim)]))\n return [namespace, v.object(claimParsers)]\n })\n\n return v.object(Object.fromEntries(parsersForNamespaces))\n}\n\nconst getClaimQueryParser = (\n claimQuery: DcqlClaimsQuery.W3cAndSdJwtVc,\n ctx: { index: number; presentation: boolean }\n): typeof vJson => {\n const { index, presentation } = ctx\n const pathElement = claimQuery.path[index]\n const isLast = index === claimQuery.path.length - 1\n\n const vClaimParser = getClaimParser(claimQuery)\n\n if (typeof pathElement === 'number') {\n const elementParser = isLast ? vClaimParser : getClaimQueryParser(claimQuery, { ...ctx, index: index + 1 })\n\n if (presentation) {\n // We allow both the concrete value and an array of one value\n return v.union([\n v.pipe(\n v.array(vJson),\n v.length(1),\n v.transform((input) => input[0]),\n elementParser\n ),\n elementParser,\n ])\n }\n\n return v.pipe(\n v.array(vJson),\n v.transform((input) => input[pathElement]),\n elementParser\n )\n }\n if (typeof pathElement === 'string') {\n return v.object({\n [pathElement]: isLast ? vClaimParser : getClaimQueryParser(claimQuery, { ...ctx, index: index + 1 }),\n })\n }\n return isLast ? v.array(vClaimParser) : v.array(getClaimQueryParser(claimQuery, { ...ctx, index: index + 1 }))\n}\n\nexport const getJsonClaimsParser = (claimsQueries: DcqlClaimsQuery.W3cAndSdJwtVc[], ctx: { presentation: boolean }) => {\n const claimParser = v.intersect(\n claimsQueries.map(\n (claimQuery) =>\n getClaimQueryParser(claimQuery, {\n ...ctx,\n index: 0,\n }) as typeof vJsonRecord\n )\n )\n\n return claimParser\n}\n\nexport const getMdocClaimsQueriesForClaimSet = (\n claimsQueries: DcqlClaimsQuery.Mdoc[],\n claimSet: string[]\n): DcqlClaimsQuery.Mdoc[] => {\n return claimSet.map((credential_id) => {\n const query = claimsQueries.find((query) => query.id === credential_id)\n if (!query) {\n throw new DcqlInvalidClaimsQueryIdError({\n message: `Claims-query with id '${credential_id}' not found.`,\n })\n }\n\n return query\n })\n}\n\nexport const getJsonClaimsQueriesForClaimSet = (\n claimsQueries: DcqlClaimsQuery.W3cAndSdJwtVc[],\n claimSet: string[]\n): DcqlClaimsQuery.W3cAndSdJwtVc[] => {\n return claimSet.map((credential_id) => {\n const query = claimsQueries.find((query) => query.id === credential_id)\n if (!query) {\n throw new DcqlInvalidClaimsQueryIdError({\n message: `Claims-query with id '${credential_id}' not found.`,\n })\n }\n return query\n })\n}\n\nconst getMdocParser = (\n credentialQuery: DcqlCredentialQuery.Mdoc,\n ctx: { claimSet?: NonNullable<DcqlCredentialQuery['claim_sets']>[number] }\n) => {\n const { claimSet } = ctx\n\n const vDoctype = credentialQuery.meta?.doctype_value ? v.literal(credentialQuery.meta.doctype_value) : v.string()\n\n const claimSetQueries =\n credentialQuery.claims && claimSet\n ? getMdocClaimsQueriesForClaimSet(credentialQuery.claims, claimSet)\n : credentialQuery.claims\n\n const credentialParser = v.object({\n credential_format: v.literal('mso_mdoc'),\n doctype: vDoctype,\n namespaces: claimSetQueries\n ? getNamespacesParser(claimSetQueries)\n : v.record(v.string(), v.record(v.string(), v.unknown())),\n })\n\n return credentialParser\n}\n\nconst getW3cVcSdJwtVcParser = (\n credentialQuery: DcqlCredentialQuery.SdJwtVc | DcqlCredentialQuery.W3cVc,\n ctx: {\n claimSet?: NonNullable<DcqlCredentialQuery['claim_sets']>[number]\n presentation: boolean\n }\n) => {\n const { claimSet } = ctx\n const claimSetQueries =\n credentialQuery.claims && claimSet\n ? getJsonClaimsQueriesForClaimSet(credentialQuery.claims, claimSet)\n : credentialQuery.claims\n\n if (credentialQuery.format === 'vc+sd-jwt' || credentialQuery.format === 'dc+sd-jwt') {\n return v.object({\n credential_format: v.literal(credentialQuery.format),\n vct: credentialQuery.meta?.vct_values ? v.picklist(credentialQuery.meta.vct_values) : v.string(),\n claims: claimSetQueries ? getJsonClaimsParser(claimSetQueries, ctx) : vJsonRecord,\n })\n }\n const credentialParser = v.object({\n credential_format: v.picklist(['jwt_vc_json', 'jwt_vc_json-ld']),\n claims: claimSetQueries ? getJsonClaimsParser(claimSetQueries, ctx) : vJsonRecord,\n })\n\n return credentialParser\n}\n\nexport const getCredentialQueryParser = (\n credentialQuery: DcqlCredentialQuery,\n ctx: {\n claimSet?: NonNullable<DcqlCredentialQuery['claim_sets']>[number]\n presentation: boolean\n }\n) => {\n if (credentialQuery.claim_sets && !ctx.claimSet) {\n throw new DcqlMissingClaimSetParseError({\n message: 'credentialQuery specifies claim_sets but no claim_set for parsing is provided.',\n })\n }\n\n if (credentialQuery.format === 'mso_mdoc') {\n return getMdocParser(credentialQuery, ctx)\n }\n return getW3cVcSdJwtVcParser(credentialQuery, ctx)\n}\n","import * as v from 'valibot'\nimport { vIdString, vNonEmptyArray } from '../u-dcql.js'\n\n/**\n * Specifies claims withing a requested Credential.\n */\nexport namespace DcqlClaimsQuery {\n export const vValue = v.union([v.string(), v.pipe(v.number(), v.integer()), v.boolean()])\n\n export const vPath = v.union([v.string(), v.pipe(v.number(), v.integer(), v.minValue(0)), v.null()])\n\n export const vW3cSdJwtVc = v.object({\n id: v.pipe(\n v.optional(vIdString),\n v.description(\n '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.'\n )\n ),\n path: v.pipe(\n v.array(vPath),\n vNonEmptyArray(),\n v.description(\n 'A non-empty array representing a claims path pointer that specifies the path to a claim within the Verifiable Credential.'\n )\n ),\n values: v.pipe(\n v.optional(v.array(vValue)),\n v.description(\n '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.'\n )\n ),\n })\n export type W3cAndSdJwtVc = v.InferOutput<typeof vW3cSdJwtVc>\n\n const vMdocBase = v.object({\n id: v.pipe(\n v.optional(vIdString),\n v.description(\n '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.'\n )\n ),\n values: v.pipe(\n v.optional(v.array(vValue)),\n v.description(\n '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.'\n )\n ),\n })\n\n // Syntax up until Draft 23 of OID4VP. Keeping due to Draft 23 having\n // reach ID-3 status and thus being targeted by several implementations\n export const vMdocNamespace = v.object({\n ...vMdocBase.entries,\n\n namespace: v.pipe(\n v.string(),\n v.description(\n 'A string that specifies the namespace of the data element within the mdoc, e.g., org.iso.18013.5.1.'\n )\n ),\n claim_name: v.pipe(\n v.string(),\n v.description(\n 'A string that specifies the data element identifier of the data element within the provided namespace in the mdoc, e.g., first_name.'\n )\n ),\n })\n\n // Syntax starting from Draft 24 of OID4VP\n export const vMdocPath = v.object({\n ...vMdocBase.entries,\n\n intent_to_retain: v.pipe(\n v.optional(v.boolean()),\n v.description(\n 'A boolean that is equivalent to `IntentToRetain` variable defined in Section 8.3.2.1.2.1 of [@ISO.18013-5].'\n )\n ),\n\n path: v.pipe(\n v.tuple([\n v.pipe(\n v.string(),\n v.description(\n 'A string that specifies the namespace of the data element within the mdoc, e.g., org.iso.18013.5.1.'\n )\n ),\n v.pipe(\n v.string(),\n v.description(\n 'A string that specifies the data element identifier of the data element within the provided namespace in the mdoc, e.g., first_name.'\n )\n ),\n ]),\n v.description(\n '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.'\n )\n ),\n })\n export const vMdoc = v.union([vMdocNamespace, vMdocPath])\n export type MdocNamespace = v.InferOutput<typeof vMdocNamespace>\n export type MdocPath = v.InferOutput<typeof vMdocPath>\n export type Mdoc = v.InferOutput<typeof vMdoc>\n\n export const vModel = v.union([vMdoc, vW3cSdJwtVc])\n export type Input = v.InferInput<typeof vModel>\n export type Out = v.InferOutput<typeof vModel>\n}\nexport type DcqlClaimsQuery = DcqlClaimsQuery.Out\n","import * as v from 'valibot'\nimport { DcqlCredentialQuery } from '../dcql-query/m-dcql-credential-query.js'\nimport { CredentialSetQuery } from '../dcql-query/m-dcql-credential-set-query.js'\nimport { DcqlCredential } from '../u-dcql-credential.js'\nimport { vIdString, vNonEmptyArray } from '../u-dcql.js'\n\nexport namespace DcqlQueryResult {\n export const vCredentialQueryResult = v.pipe(\n v.array(v.array(v.union([v.undefined(), DcqlCredential.vParseSuccess, DcqlCredential.vParseFailure]))),\n vNonEmptyArray()\n )\n\n export type CredentialQueryResult = v.InferOutput<typeof vCredentialQueryResult>\n\n export const vModel = v.object({\n credentials: v.pipe(\n v.array(DcqlCredentialQuery.vModel),\n vNonEmptyArray(),\n v.description(\n 'REQUIRED. A non-empty array of Credential Queries that specify the requested Verifiable Credentials.'\n )\n ),\n\n credential_matches: v.record(\n v.pipe(vIdString),\n v.union([\n v.object({\n ...DcqlCredential.vParseSuccess.entries,\n all: v.pipe(\n v.array(\n v.pipe(\n v.array(v.union([v.undefined(), DcqlCredential.vParseSuccess, DcqlCredential.vParseFailure])),\n vNonEmptyArray()\n )\n ),\n vNonEmptyArray()\n ),\n }),\n v.object({\n success: DcqlCredential.vParseFailure.entries.success,\n all: v.pipe(\n v.array(\n v.pipe(\n v.array(v.union([v.undefined(), DcqlCredential.vParseSuccess, DcqlCredential.vParseFailure])),\n vNonEmptyArray()\n )\n ),\n vNonEmptyArray()\n ),\n }),\n ])\n ),\n\n credential_sets: v.optional(\n v.pipe(\n v.array(\n v.object({\n ...CredentialSetQuery.vModel.entries,\n matching_options: v.union([v.undefined(), v.pipe(v.array(v.array(v.string())), vNonEmptyArray())]),\n })\n ),\n vNonEmptyArray(),\n v.description(\n 'OPTIONAL. A non-empty array of credential set queries that specifies additional constraints on which of the requested Verifiable Credentials to return.'\n )\n )\n ),\n\n canBeSatisfied: v.boolean(),\n })\n export type Input = v.InferInput<typeof vModel>\n export type Output = v.InferOutput<typeof vModel>\n\n export type CredentialMatch = Input['credential_matches'][number]\n export type CredentialMatchRecord = Input['credential_matches']\n}\nexport type DcqlQueryResult = DcqlQueryResult.Output\n","import * as v from 'valibot'\nimport { DcqlUndefinedClaimSetIdError } from '../dcql-error/e-dcql.js'\nimport { idRegex, vIdString, vNonEmptyArray } from '../u-dcql.js'\nimport { DcqlClaimsQuery } from './m-dcql-claims-query.js'\n\n/**\n * A Credential Query is an object representing a request for a presentation of one Credential.\n */\nexport namespace DcqlCredentialQuery {\n const vBase = v.object({\n id: v.pipe(\n v.string(),\n v.regex(idRegex),\n v.description(\n `REQUIRED. A string identifying the Credential in the response and, if provided, the constraints in 'credential_sets'.`\n )\n ),\n claim_sets: v.pipe(\n v.optional(v.pipe(v.array(v.pipe(v.array(vIdString), vNonEmptyArray())), vNonEmptyArray())),\n v.description(\n `OPTIONAL. A non-empty array containing arrays of identifiers for elements in 'claims' that specifies which combinations of 'claims' for the Credential are requested.`\n )\n ),\n })\n\n export const vMdoc = v.object({\n ...vBase.entries,\n format: v.pipe(\n v.literal('mso_mdoc'),\n v.description('REQUIRED. A string that specifies the format of the requested Verifiable Credential.')\n ),\n claims: v.pipe(\n v.optional(v.pipe(v.array(DcqlClaimsQuery.vMdoc), vNonEmptyArray())),\n v.description('OPTIONAL. A non-empty array of objects as that specifies claims in the requested Credential.')\n ),\n meta: v.pipe(\n v.optional(\n v.object({\n doctype_value: v.pipe(\n v.optional(v.string()),\n v.description(\n 'OPTIONAL. String that specifies an allowed value for the doctype of the requested Verifiable Credential.'\n )\n ),\n })\n ),\n v.description(\n 'OPTIONAL. An object defining additional properties requested by the Verifier that apply to the metadata and validity data of the Credential.'\n )\n ),\n })\n export type Mdoc = v.InferOutput<typeof vMdoc>\n\n export const vSdJwtVc = v.object({\n ...vBase.entries,\n format: v.pipe(\n v.picklist(['vc+sd-jwt', 'dc+sd-jwt']),\n v.description('REQUIRED. A string that specifies the format of the requested Verifiable Credential.')\n ),\n claims: v.pipe(\n v.optional(v.pipe(v.array(DcqlClaimsQuery.vW3cSdJwtVc), vNonEmptyArray())),\n v.description('OPTIONAL. A non-empty array of objects as that specifies claims in the requested Credential.')\n ),\n meta: v.pipe(\n v.optional(\n v.pipe(\n v.object({\n vct_values: v.optional(v.array(v.string())),\n }),\n v.description(\n 'OPTIONAL. An array of strings that specifies allowed values for the type of the requested Verifiable Credential.'\n )\n )\n ),\n v.description(\n 'OPTIONAL. An object defining additional properties requested by the Verifier that apply to the metadata and validity data of the Credential.'\n )\n ),\n })\n export type SdJwtVc = v.InferOutput<typeof vSdJwtVc>\n\n export const vW3cVc = v.object({\n ...vBase.entries,\n format: v.picklist(['jwt_vc_json', 'jwt_vc_json-ld']),\n claims: v.optional(v.pipe(v.array(DcqlClaimsQuery.vW3cSdJwtVc), vNonEmptyArray())),\n })\n export type W3cVc = v.InferOutput<typeof vW3cVc>\n\n export const vModel = v.variant('format', [vMdoc, vSdJwtVc, vW3cVc])\n export type Input = v.InferInput<typeof vModel>\n export type Output = v.InferOutput<typeof vModel>\n\n export const validate = (credentialQuery: Output) => {\n claimSetIdsAreDefined(credentialQuery)\n }\n}\nexport type DcqlCredentialQuery = DcqlCredentialQuery.Output\n\n// --- validations --- //\n\nconst claimSetIdsAreDefined = (credentialQuery: DcqlCredentialQuery) => {\n if (!credentialQuery.claim_sets) return\n const claimIds = new Set(credentialQuery.claims?.map((claim) => claim.id))\n\n const undefinedClaims: string[] = []\n for (const claim_set of credentialQuery.claim_sets) {\n for (const claim_id of claim_set) {\n if (!claimIds.has(claim_id)) {\n undefinedClaims.push(claim_id)\n }\n }\n }\n\n if (undefinedClaims.length > 0) {\n throw new DcqlUndefinedClaimSetIdError({\n message: `Credential set contains undefined credential id${undefinedClaims.length === 0 ? '' : '`s'} '${undefinedClaims.join(', ')}'`,\n })\n }\n}\n","import * as v from 'valibot'\nimport { vIdString, vNonEmptyArray } from '../u-dcql.js'\n\n/**\n * A Credential Set Query is an object representing\n * a request for one or more credentials to satisfy a particular use case with the Verifier.\n */\nexport namespace CredentialSetQuery {\n export const vModel = v.object({\n options: v.pipe(\n v.array(v.array(vIdString)),\n vNonEmptyArray(),\n v.description(\n '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.'\n )\n ),\n required: v.pipe(\n v.optional(v.boolean(), true),\n v.description(\n `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'.`\n )\n ),\n purpose: v.pipe(\n v.optional(v.union([v.string(), v.number(), v.record(v.string(), v.unknown())])),\n v.description('OPTIONAL. A string, number or object specifying the purpose of the query.')\n ),\n })\n\n export type Input = v.InferInput<typeof vModel>\n export type Output = v.InferOutput<typeof vModel>\n}\nexport type CredentialSetQuery = CredentialSetQuery.Output\n","import * as v from 'valibot'\nimport { vIdString, vJsonRecord, vStringToJson } from '../u-dcql.js'\n\nexport namespace DcqlPresentation {\n export const vModel = v.record(vIdString, v.union([v.string(), vJsonRecord]))\n\n export type Input = v.InferInput<typeof vModel>\n export type Output = v.InferOutput<typeof vModel>\n export const parse = (input: Input | string) => {\n if (typeof input === 'string') {\n return v.parse(v.pipe(v.string(), vStringToJson, vModel), input)\n }\n\n return v.parse(vModel, input)\n }\n\n export const encode = (input: Output) => {\n return JSON.stringify(input)\n }\n}\nexport type DcqlPresentation = DcqlPresentation.Output\n","import type * as v from 'valibot'\nimport { runCredentialQuery } from '../dcql-parser/dcql-credential-query-result.js'\nimport type { DcqlQuery } from '../dcql-query/m-dcql-query.js'\nimport type { DcqlCredential } from '../u-dcql-credential.js'\nimport type { DcqlQueryResult } from './m-dcql-query-result.js'\n\nexport const runDcqlQuery = (\n dcqlQuery: DcqlQuery.Output,\n ctx: {\n credentials: DcqlCredential[]\n presentation: boolean\n }\n): DcqlQueryResult => {\n const credentialQueriesResults = Object.fromEntries(\n dcqlQuery.credentials.map((credentialQuery) => [credentialQuery.id, runCredentialQuery(credentialQuery, ctx)])\n )\n\n const credentialMatches = Object.fromEntries(\n Object.entries(credentialQueriesResults).map(([key, credentialQueryResult]) => {\n // Find the best match for each credential query\n let bestMatch: v.InferOutput<typeof DcqlCredential.vParseSuccess> | undefined = undefined\n\n for (const credentialParseResult of credentialQueryResult) {\n const bestMatchForCredential = credentialParseResult.find((result) => result?.success === true)\n\n if (!bestMatch && bestMatchForCredential) {\n const { issues, ...matchWithoutIssues } = bestMatchForCredential\n bestMatch = matchWithoutIssues\n continue\n }\n\n // biome-ignore lint/style/noNonNullAssertion: <explanation>\n if (bestMatchForCredential && bestMatchForCredential.claim_set_index! < bestMatch?.claim_set_index!) {\n const { issues, ...matchWithoutIssues } = bestMatchForCredential\n bestMatch = matchWithoutIssues\n }\n }\n\n return [\n key,\n bestMatch ? { ...bestMatch, all: credentialQueryResult } : { success: false, all: credentialQueryResult },\n ]\n })\n ) satisfies DcqlQueryResult.CredentialMatchRecord\n\n const credentialSetResults = dcqlQuery.credential_sets?.map((set) => {\n const matchingOptions = set.options.filter((option) =>\n option.every((credentialQueryId) => credentialMatches[credentialQueryId]?.success)\n )\n\n return {\n ...set,\n matching_options: matchingOptions.length > 0 ? (matchingOptions as [string[], ...string[][]]) : undefined,\n }\n }) as DcqlQueryResult.Output['credential_sets']\n\n const dqclQueryMatched = credentialSetResults\n ? credentialSetResults.every((set) => !set.required || set.matching_options)\n : Object.values(credentialMatches).every((query) => query.success)\n\n return {\n ...dcqlQuery,\n canBeSatisfied: dqclQueryMatched,\n credential_matches: credentialMatches as DcqlQueryResult['credential_matches'],\n credential_sets: credentialSetResults,\n }\n}\n","import * as v from 'valibot'\nimport { DcqlCredentialSetError, DcqlNonUniqueCredentialQueryIdsError } from '../dcql-error/e-dcql.js'\nimport { runDcqlQuery } from '../dcql-query-result/run-dcql-query.js'\nimport type { DcqlCredential } from '../u-dcql-credential.js'\nimport { vNonEmptyArray } from '../u-dcql.js'\nimport { DcqlCredentialQuery } from './m-dcql-credential-query.js'\nimport { CredentialSetQuery } from './m-dcql-credential-set-query.js'\n\n/**\n * The Digital Credentials Query Language (DCQL, pronounced [ˈdakl̩]) is a\n * JSON-encoded query language that allows the Verifier to request Verifiable\n * Presentations that match the query. The Verifier MAY encode constraints on the\n * combinations of credentials and claims that are requested. The Wallet evaluates\n * the query against the Verifiable Credentials it holds and returns Verifiable\n * Presentations matching the query.\n */\nexport namespace DcqlQuery {\n export const vModel = v.object({\n credentials: v.pipe(\n v.array(DcqlCredentialQuery.vModel),\n vNonEmptyArray(),\n v.description(\n 'REQUIRED. A non-empty array of Credential Queries that specify the requested Verifiable Credentials.'\n )\n ),\n credential_sets: v.pipe(\n v.optional(v.pipe(v.array(CredentialSetQuery.vModel), vNonEmptyArray())),\n v.description(\n 'OPTIONAL. A non-empty array of credential set queries that specifies additional constraints on which of the requested Verifiable Credentials to return.'\n )\n ),\n })\n export type Input = v.InferInput<typeof vModel>\n export type Output = v.InferOutput<typeof vModel>\n export const validate = (dcqlQuery: Output) => {\n validateUniqueCredentialQueryIds(dcqlQuery)\n validateCredentialSets(dcqlQuery)\n dcqlQuery.credentials.forEach(DcqlCredentialQuery.validate)\n }\n export const query = (dcqlQuery: Output, credentials: DcqlCredential[]) => {\n return runDcqlQuery(dcqlQuery, { credentials, presentation: false })\n }\n\n export const parse = (input: Input) => {\n return v.parse(vModel, input)\n }\n}\nexport type DcqlQuery = DcqlQuery.Output\n\n// --- validations --- //\n\nconst validateUniqueCredentialQueryIds = (query: DcqlQuery.Output) => {\n const ids = query.credentials.map((c) => c.id)\n const duplicates = ids.filter((id, index) => ids.indexOf(id) !== index)\n\n if (duplicates.length > 0) {\n throw new DcqlNonUniqueCredentialQueryIdsError({\n message: `Duplicate credential query ids found: ${duplicates.join(', ')}`,\n })\n }\n}\n\nconst validateCredentialSets = (query: DcqlQuery.Output) => {\n if (!query.credential_sets) return\n\n const credentialQueryIds = new Set(query.credentials.map((c) => c.id))\n\n const undefinedCredentialQueryIds: string[] = []\n for (const credential_set of query.credential_sets) {\n for (const credentialSetOption of credential_set.options) {\n for (const credentialQueryId of credentialSetOption) {\n if (!credentialQueryIds.has(credentialQueryId)) {\n undefinedCredentialQueryIds.push(credentialQueryId)\n }\n }\n }\n }\n\n if (undefinedCredentialQueryIds.length > 0) {\n throw new DcqlCredentialSetError({\n message: `Credential set contains undefined credential id${undefinedCredentialQueryIds.length === 1 ? '' : '`s'} '${undefinedCredentialQueryIds.join(', ')}'`,\n })\n }\n}\n"],"mappings":"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","names":["v","v","v","DcqlMdocCredential","DcqlSdJwtVcCredential","DcqlW3cVcCredential","DcqlCredential","DcqlMdocPresentation","DcqlSdJwtVcPresentation","DcqlW3cVcPresentation","DcqlCredentialPresentation","v","v","v","v","DcqlClaimsQuery","query","v","v","DcqlCredentialQuery","v","CredentialSetQuery","DcqlQueryResult","DcqlPresentationResult","v","DcqlPresentation","v","DcqlQuery"]}
1
+ {"version":3,"sources":["../src/dcql-error/e-base.ts","../src/dcql-error/e-dcql.ts","../src/dcql-presentation/m-dcql-credential-presentation.ts","../src/u-dcql-credential.ts","../src/u-dcql.ts","../src/u-model.ts","../src/dcql-presentation/m-dcql-presentation-result.ts","../src/dcql-parser/dcql-credential-query-result.ts","../src/dcql-parser/dcql-claims-query-result.ts","../src/dcql-query/m-dcql-claims-query.ts","../src/dcql-query-result/m-dcql-query-result.ts","../src/dcql-query/m-dcql-credential-query.ts","../src/dcql-query/m-dcql-credential-set-query.ts","../src/dcql-presentation/m-dcql-presentation.ts","../src/dcql-query-result/run-dcql-query.ts","../src/dcql-query/m-dcql-query.ts"],"sourcesContent":["function isObject(value: unknown): value is Record<string, unknown> {\n return !!value && !Array.isArray(value) && typeof value === 'object'\n}\n\nclass UnknownCauseError extends Error {\n [key: string]: unknown\n}\n\nexport function getCauseFromUnknown(cause: unknown): Error | undefined {\n if (cause instanceof Error) {\n return cause\n }\n\n const type = typeof cause\n if (type === 'undefined' || type === 'function' || cause === null) {\n return undefined\n }\n\n // Primitive types just get wrapped in an error\n if (type !== 'object') {\n return new Error(String(cause))\n }\n\n // If it's an object, we'll create a synthetic error\n if (isObject(cause)) {\n const err = new UnknownCauseError()\n for (const key in cause) {\n err[key] = cause[key]\n }\n return err\n }\n\n return undefined\n}\n\nexport const isDcqlError = (cause: unknown): cause is DcqlError => {\n if (cause instanceof DcqlError) {\n return true\n }\n if (cause instanceof Error && cause.name === 'DcqlError') {\n // https://github.com/trpc/trpc/pull/4848\n return true\n }\n\n return false\n}\n\nexport function getDcqlErrorFromUnknown(cause: unknown): DcqlError {\n if (isDcqlError(cause)) {\n return cause\n }\n\n const dcqlError = new DcqlError({\n code: 'INTERNAL_SERVER_ERROR',\n cause,\n })\n\n // Inherit stack from error\n if (cause instanceof Error && cause.stack) {\n dcqlError.stack = cause.stack\n }\n\n return dcqlError\n}\n\ntype DCQL_ERROR_CODE = 'PARSE_ERROR' | 'INTERNAL_SERVER_ERROR' | 'NOT_IMPLEMENTED' | 'BAD_REQUEST'\n\nexport class DcqlError extends Error {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore override doesn't work in all environments due to \"This member cannot have an 'override' modifier because it is not declared in the base class 'Error'\"\n public override readonly cause?: Error\n public readonly code\n\n constructor(opts: {\n message?: string\n code: DCQL_ERROR_CODE\n cause?: unknown\n }) {\n const cause = getCauseFromUnknown(opts.cause)\n const message = opts.message ?? cause?.message ?? opts.code\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore https://github.com/tc39/proposal-error-cause\n super(message, { cause })\n\n this.code = opts.code\n this.name = 'DcqlError'\n\n if (!this.cause) {\n // < ES2022 / < Node 16.9.0 compatability\n this.cause = cause\n }\n }\n}\n","import { DcqlError } from './e-base.js'\n\nexport class DcqlCredentialSetError extends DcqlError {\n constructor(opts: { message: string; cause?: unknown }) {\n super({ code: 'BAD_REQUEST', ...opts })\n }\n}\n\nexport class DcqlUndefinedClaimSetIdError extends DcqlError {\n constructor(opts: { message: string; cause?: unknown }) {\n super({ code: 'BAD_REQUEST', ...opts })\n }\n}\n\nexport class DcqlNonUniqueCredentialQueryIdsError extends DcqlError {\n constructor(opts: { message: string; cause?: unknown }) {\n super({ code: 'BAD_REQUEST', ...opts })\n }\n}\n\nexport class DcqlParseError extends DcqlError {\n constructor(opts: { message: string; cause?: unknown }) {\n super({ code: 'PARSE_ERROR', ...opts })\n }\n}\n\nexport class DcqlInvalidClaimsQueryIdError extends DcqlError {\n constructor(opts: { message: string; cause?: unknown }) {\n super({ code: 'BAD_REQUEST', ...opts })\n }\n}\n\nexport class DcqlMissingClaimSetParseError extends DcqlError {\n constructor(opts: { message: string; cause?: unknown }) {\n super({ code: 'PARSE_ERROR', ...opts })\n }\n}\n\nexport class DcqlInvalidPresentationRecordError extends DcqlError {\n constructor(opts: { message: string; cause?: unknown }) {\n super({ code: 'BAD_REQUEST', ...opts })\n }\n}\n\nexport class DcqlPresentationResultError extends DcqlError {\n constructor(opts: { message: string; cause?: unknown }) {\n super({ code: 'BAD_REQUEST', ...opts })\n }\n}\n","import * as v from 'valibot'\nimport { DcqlMdocCredential, DcqlSdJwtVcCredential, DcqlW3cVcCredential } from '../u-dcql-credential'\nimport type { InferModelTypes } from '../u-model'\nimport { Model } from '../u-model'\n\nexport namespace DcqlMdocPresentation {\n export const vModel = DcqlMdocCredential.vModel\n export const model = new Model({ vModel })\n export type Model = InferModelTypes<typeof model>\n}\nexport type DcqlMdocPresentation = DcqlMdocPresentation.Model['Output']\n\nexport namespace DcqlSdJwtVcPresentation {\n export const vModel = DcqlSdJwtVcCredential.vModel\n export const model = new Model({ vModel })\n export type Model = InferModelTypes<typeof model>\n}\nexport type DcqlSdJwtVcPresentation = DcqlSdJwtVcPresentation.Model['Output']\n\nexport namespace DcqlW3cVcPresentation {\n export const vModel = DcqlW3cVcCredential.vModel\n export const model = new Model({ vModel })\n export type Model = InferModelTypes<typeof model>\n}\nexport type DcqlW3cVcPresentation = DcqlW3cVcPresentation.Model['Output']\n\nexport namespace DcqlCredentialPresentation {\n export const model = new Model({\n vModel: v.variant('credential_format', [\n DcqlMdocPresentation.vModel,\n DcqlSdJwtVcPresentation.vModel,\n DcqlW3cVcPresentation.vModel,\n ]),\n })\n export type Model = InferModelTypes<typeof model>\n}\nexport type DcqlCredentialPresentation = DcqlCredentialPresentation.Model['Output']\n","import * as v from 'valibot'\nimport { vJsonRecord, vNonEmptyArray } from './u-dcql.js'\nimport type { InferModelTypes } from './u-model.js'\nimport { Model } from './u-model.js'\n\nexport namespace DcqlMdocCredential {\n export const vNamespaces = v.record(v.string(), v.record(v.string(), v.unknown()))\n export const vModel = v.object({\n credential_format: v.literal('mso_mdoc'),\n doctype: v.string(),\n namespaces: vNamespaces,\n })\n\n export const model = new Model({ vModel })\n export type Model = InferModelTypes<typeof model>\n export type NameSpaces = v.InferOutput<typeof vNamespaces>\n}\nexport type DcqlMdocCredential = DcqlMdocCredential.Model['Output']\n\nexport namespace DcqlSdJwtVcCredential {\n export const vClaims = vJsonRecord\n export const vModel = v.object({\n credential_format: v.picklist(['vc+sd-jwt', 'dc+sd-jwt']),\n vct: v.string(),\n claims: vClaims,\n })\n export const model = new Model({ vModel })\n export type Model = InferModelTypes<typeof model>\n export type Claims = Model['Output']['claims']\n}\nexport type DcqlSdJwtVcCredential = DcqlSdJwtVcCredential.Model['Output']\n\nexport namespace DcqlW3cVcCredential {\n export const vClaims = vJsonRecord\n export const vModel = v.object({\n credential_format: v.picklist(['jwt_vc_json-ld', 'jwt_vc_json']),\n claims: vClaims,\n })\n\n export const model = new Model({ vModel })\n export type Model = InferModelTypes<typeof model>\n export type Claims = Model['Output']['claims']\n}\nexport type DcqlW3cVcCredential = DcqlW3cVcCredential.Model['Output']\n\nexport namespace DcqlCredential {\n export const vModel = v.variant('credential_format', [\n DcqlMdocCredential.vModel,\n DcqlSdJwtVcCredential.vModel,\n DcqlW3cVcCredential.vModel,\n ])\n\n export const vParseSuccess = v.object({\n success: v.literal(true),\n typed: v.literal(true),\n issues: v.optional(v.undefined()),\n input_credential_index: v.number(),\n claim_set_index: v.union([v.number(), v.undefined()]),\n output: DcqlCredential.vModel,\n })\n\n export const vParseFailure = v.object({\n success: v.literal(false),\n typed: v.boolean(),\n output: v.unknown(),\n issues: v.pipe(v.array(v.unknown()), vNonEmptyArray()),\n input_credential_index: v.number(),\n claim_set_index: v.union([v.number(), v.undefined()]),\n })\n export const model = new Model({ vModel })\n export type Model = InferModelTypes<typeof model>\n}\nexport type DcqlCredential = DcqlCredential.Model['Output']\n","import * as v from 'valibot'\nimport type { UnknownBaseSchema } from './u-model'\nexport const idRegex = /^[a-zA-Z0-9_-]+$/\n\nexport const vNonEmptyArray = <T extends unknown[]>() => {\n return v.custom<[T[number], ...T]>((input) => (input as T).length > 0)\n}\n\nexport const vIdString = v.pipe(v.string(), v.regex(idRegex), v.nonEmpty())\n\nexport type Json = string | number | boolean | null | { [key: string]: Json } | Json[]\n\ninterface HasToJson {\n toJson(): Json\n}\n\nfunction isToJsonable(value: unknown): value is HasToJson {\n if (value === null || typeof value !== 'object') return false\n\n // biome-ignore lint/suspicious/noExplicitAny: <explanation>\n const toJsonFn = (value as any).toJson\n return typeof toJsonFn === 'function'\n}\n\nexport const vWithJT = <Schema extends UnknownBaseSchema>(schema: Schema) =>\n v.pipe(\n v.custom<v.InferInput<Schema>>(() => true),\n v.rawTransform<v.InferInput<Schema>, v.InferOutput<Schema>>(({ dataset, addIssue, NEVER }) => {\n const result = v.safeParse(schema, dataset.value)\n if (result.success) return dataset.value\n\n if (!isToJsonable(dataset.value)) {\n for (const safeParseIssue of result.issues) {\n addIssue({\n ...safeParseIssue,\n expected: safeParseIssue.expected ?? undefined,\n })\n }\n\n return NEVER\n }\n\n let json: Json\n\n try {\n json = dataset.value.toJson()\n } catch (error) {\n for (const safeParseIssue of result.issues) {\n addIssue({\n ...safeParseIssue,\n expected: safeParseIssue.expected ?? undefined,\n })\n }\n addIssue({ message: 'Json Transformation failed' })\n return NEVER\n }\n\n const safeParseResult: v.SafeParseResult<Schema> = v.safeParse(schema, json)\n if (safeParseResult.success) return dataset.value\n\n for (const safeParseIssue of safeParseResult.issues) {\n addIssue({\n ...safeParseIssue,\n expected: safeParseIssue.expected ?? undefined,\n })\n }\n\n return NEVER\n })\n )\n\nexport const vJsonLiteral = v.union([v.string(), v.number(), v.boolean(), v.null()])\n\nexport type JsonLiteral = v.InferOutput<typeof vJsonLiteral>\n\nexport const vJson: v.GenericSchema<Json> = v.lazy(() =>\n v.union([vJsonLiteral, v.array(vJson), v.record(v.string(), vJson)])\n)\n\nexport const vJsonWithJT: v.GenericSchema<Json> = v.lazy(() =>\n vWithJT(v.union([vJsonLiteral, v.array(vJson), v.record(v.string(), vJson)]))\n)\n\nexport const vJsonRecord = v.record(v.string(), vJson)\nexport type JsonRecord = v.InferOutput<typeof vJsonRecord>\n\nexport const vStringToJson = v.rawTransform<string, Json>(({ dataset, addIssue, NEVER }) => {\n try {\n return JSON.parse(dataset.value) as Json\n } catch (error) {\n addIssue({ message: 'Invalid JSON' })\n return NEVER\n }\n})\n","import * as v from 'valibot'\nimport { DcqlParseError } from './dcql-error/e-dcql'\n\nexport type UnknownBaseSchema = v.BaseSchema<unknown, unknown, v.BaseIssue<unknown>>\n\ntype EnsureOutputAssignableToInput<T extends UnknownBaseSchema> = v.InferOutput<T> extends v.InferInput<T> ? T : never\n\nexport class Model<T extends UnknownBaseSchema> {\n constructor(private input: { vModel: EnsureOutputAssignableToInput<T> }) {}\n\n public get v() {\n return this.input.vModel\n }\n\n public parse(input: T) {\n const result = this.safeParse(input)\n\n if (result.success) {\n return result.output\n }\n\n return new DcqlParseError({\n message: JSON.stringify(result.flattened),\n cause: result.error,\n })\n }\n\n public safeParse(\n input: unknown\n ):\n | { success: true; output: v.InferOutput<T> }\n | { success: false; flattened: v.FlatErrors<T>; error: v.ValiError<T> } {\n const res = v.safeParse(this.input.vModel, input)\n if (res.success) {\n return { success: true, output: res.output }\n }\n return {\n success: false,\n error: new v.ValiError(res.issues),\n flattened: v.flatten<T>(res.issues),\n }\n }\n\n public is(input: unknown): input is v.InferOutput<T> {\n return v.is(this.v, input)\n }\n}\n\n// biome-ignore lint/suspicious/noExplicitAny: <explanation>\nexport type InferModelTypes<T extends Model<any>> = T extends Model<infer U>\n ? {\n Input: v.InferInput<U>\n Output: v.InferOutput<U>\n }\n : never\n","import * as v from 'valibot'\n\nimport { DcqlInvalidPresentationRecordError, DcqlPresentationResultError } from '../dcql-error/e-dcql.js'\nimport { runCredentialQuery } from '../dcql-parser/dcql-credential-query-result.js'\nimport { DcqlQueryResult } from '../dcql-query-result/m-dcql-query-result.js'\nimport type { DcqlQuery } from '../dcql-query/m-dcql-query.js'\nimport { DcqlCredential } from '../u-dcql-credential.js'\nimport { vIdString } from '../u-dcql.js'\nimport type { DcqlCredentialPresentation } from './m-dcql-credential-presentation.js'\n\nexport namespace DcqlPresentationResult {\n export const vModel = v.object({\n ...v.omit(DcqlQueryResult.vModel, ['credential_matches']).entries,\n\n invalid_matches: v.union([\n v.record(\n v.pipe(vIdString),\n v.object({\n ...v.omit(DcqlCredential.vParseFailure, ['input_credential_index']).entries,\n presentation_id: v.pipe(vIdString),\n })\n ),\n v.undefined(),\n ]),\n\n valid_matches: v.record(\n v.pipe(vIdString),\n v.object({\n ...v.omit(DcqlCredential.vParseSuccess, ['issues', 'input_credential_index']).entries,\n presentation_id: v.pipe(vIdString),\n })\n ),\n })\n\n export type Input = v.InferInput<typeof vModel>\n export type Output = v.InferOutput<typeof vModel>\n\n export const parse = (input: Input | DcqlQueryResult) => {\n return v.parse(vModel, input)\n }\n\n /**\n * Query if the presentation record can be satisfied by the provided presentations\n * considering the dcql query\n *\n * @param dcqlQuery\n * @param dcqlPresentation\n */\n export const fromDcqlPresentation = (\n dcqlPresentation: Record<string, DcqlCredentialPresentation>,\n ctx: { dcqlQuery: DcqlQuery }\n ): Output => {\n const { dcqlQuery } = ctx\n\n const presentationQueriesResults = Object.fromEntries(\n Object.entries(dcqlPresentation).map(([queryId, presentation]) => {\n const credentialQuery = dcqlQuery.credentials.find((c) => c.id === queryId)\n if (!credentialQuery) {\n throw new DcqlPresentationResultError({\n message: `Query ${queryId} not found in the dcql query. Cannot validate presentation.`,\n })\n }\n\n return [\n queryId,\n runCredentialQuery(credentialQuery, {\n presentation: true,\n credentials: [presentation],\n }),\n ]\n })\n )\n\n let invalidMatches: DcqlPresentationResult['invalid_matches'] = {}\n const validMatches: DcqlPresentationResult['valid_matches'] = {}\n\n for (const [queryId, presentationQueryResult] of Object.entries(presentationQueriesResults)) {\n for (const presentationQueryResultForClaimSet of presentationQueryResult) {\n // NOTE: result can be undefined, but this is only the case if there was a valid claim\n // set match previously and we skip other claim set matching. We don't add these to the parse\n // result.\n const result = presentationQueryResultForClaimSet[0]\n\n if (result?.success) {\n const { issues, input_credential_index, ...rest } = result\n validMatches[queryId] = { ...rest, presentation_id: queryId }\n } else if (result?.success === false) {\n const { input_credential_index, ...rest } = result\n invalidMatches[queryId] = {\n ...rest,\n presentation_id: queryId,\n }\n }\n }\n }\n\n // Only keep the invalid matches that do not have a valid match as well\n invalidMatches = Object.fromEntries(\n Object.entries(invalidMatches ?? {}).filter(([queryId]) => validMatches[queryId] === undefined)\n )\n\n const credentialSetResults = dcqlQuery.credential_sets?.map((set) => {\n const matchingOptions = set.options.filter((option) =>\n option.every((credentialQueryId) => validMatches[credentialQueryId]?.success)\n )\n\n return {\n ...set,\n matching_options: matchingOptions.length > 0 ? (matchingOptions as [string[], ...string[][]]) : undefined,\n }\n }) as DcqlQueryResult.Output['credential_sets']\n\n const dqclQueryMatched = credentialSetResults\n ? credentialSetResults.every((set) => !set.required || set.matching_options)\n : Object.keys(validMatches).length === ctx.dcqlQuery.credentials.length\n\n return {\n ...dcqlQuery,\n canBeSatisfied: dqclQueryMatched,\n valid_matches: validMatches,\n invalid_matches: Object.keys(invalidMatches).length === 0 ? undefined : {},\n credential_sets: credentialSetResults,\n }\n }\n\n export const validate = (dcqlQueryResult: DcqlPresentationResult) => {\n if (!dcqlQueryResult.canBeSatisfied) {\n throw new DcqlInvalidPresentationRecordError({\n message: 'Invalid Presentation record',\n cause: dcqlQueryResult,\n })\n }\n\n return dcqlQueryResult satisfies Output\n }\n}\nexport type DcqlPresentationResult = DcqlPresentationResult.Output\n","import * as v from 'valibot'\nimport type { DcqlQueryResult } from '../dcql-query-result/m-dcql-query-result.js'\nimport type { DcqlCredentialQuery } from '../dcql-query/m-dcql-credential-query.js'\nimport type { DcqlCredential } from '../u-dcql-credential.js'\nimport type {} from '../u-dcql.js'\nimport { getCredentialQueryParser } from './dcql-claims-query-result.js'\n\nexport const runCredentialQuery = (\n credentialQuery: DcqlCredentialQuery,\n ctx: {\n credentials: DcqlCredential[]\n presentation: boolean\n }\n): DcqlQueryResult.CredentialQueryResult => {\n const { credentials, presentation } = ctx\n const claimSets = credentialQuery.claim_sets ?? [undefined]\n\n const credentialQueryResult: v.InferInput<typeof DcqlQueryResult.vCredentialQueryResult> = []\n\n for (const [claimSetIndex, claim_set] of claimSets.entries()) {\n const credentialParser = getCredentialQueryParser(credentialQuery, {\n claimSet: claim_set,\n presentation,\n })\n\n const claimSetResult: (typeof credentialQueryResult)[number] = []\n\n for (const [credentialIndex, credential] of credentials.entries()) {\n if (claimSetIndex > 0) {\n // if one the credential was successfully parsed against a previous claimsset we don't need to further validate other claim sets\n const previous = credentialQueryResult[claimSetIndex - 1][credentialIndex]\n\n // if the previous credential was successfully parsed we don't need to further validate the current credential\n // we set all further parsing attempts to undefined\n if (previous?.success || !previous) {\n claimSetResult[credentialIndex] = undefined\n continue\n }\n }\n\n const parseResult = v.safeParse(credentialParser, credential)\n claimSetResult.push({\n ...parseResult,\n ...(parseResult.issues && {\n flattened: v.flatten<typeof credentialParser>(parseResult.issues),\n }),\n input_credential_index: credentialIndex,\n claim_set_index: credentialQuery.claim_sets ? claimSetIndex : undefined,\n })\n }\n\n credentialQueryResult.push(claimSetResult)\n }\n\n return credentialQueryResult as DcqlQueryResult.CredentialQueryResult\n}\n","import * as v from 'valibot'\nimport { DcqlInvalidClaimsQueryIdError, DcqlMissingClaimSetParseError } from '../dcql-error/e-dcql.js'\nimport { DcqlClaimsQuery } from '../dcql-query/m-dcql-claims-query.js'\nimport type { DcqlCredentialQuery } from '../dcql-query/m-dcql-credential-query.js'\nimport { vWithJT } from '../u-dcql.js'\nimport { vJson, vJsonRecord } from '../u-dcql.js'\n\nconst getClaimParser = (input: {\n value?: string | number | boolean\n values?: (string | number | boolean)[]\n}) => {\n const { value, values } = input\n if (value) {\n return vWithJT(v.literal(value))\n }\n\n if (values) {\n return vWithJT(v.union(values.map((val) => v.literal(val))))\n }\n\n return v.nonNullish(v.any())\n}\n\nexport const getNamespacesParser = (claimsQueries: DcqlClaimsQuery.Mdoc[]) => {\n const claimsForNamespace: Record<string, DcqlClaimsQuery.MdocPath[]> = {}\n\n for (const claimQuery of claimsQueries) {\n // Normalize the query to the latest path syntax\n const mdocPathQuery: DcqlClaimsQuery.MdocPath = v.is(DcqlClaimsQuery.vMdocNamespace, claimQuery)\n ? {\n id: claimQuery.id,\n path: [claimQuery.namespace, claimQuery.claim_name],\n values: claimQuery.values,\n }\n : claimQuery\n\n const namespace = mdocPathQuery.path[0]\n if (claimsForNamespace[namespace]) {\n claimsForNamespace[namespace]?.push({ ...mdocPathQuery })\n } else {\n claimsForNamespace[namespace] = [{ ...mdocPathQuery }]\n }\n }\n\n const parsersForNamespaces = Object.entries(claimsForNamespace).map(([namespace, claims]) => {\n const claimParsers = Object.fromEntries(claims.map((claim) => [claim.path[1], getClaimParser(claim)]))\n return [namespace, v.object(claimParsers)]\n })\n\n return v.object(Object.fromEntries(parsersForNamespaces))\n}\n\nconst getClaimQueryParser = (\n claimQuery: DcqlClaimsQuery.W3cAndSdJwtVc,\n ctx: { index: number; presentation: boolean }\n): typeof vJson => {\n const { index, presentation } = ctx\n const pathElement = claimQuery.path[index]\n const isLast = index === claimQuery.path.length - 1\n\n const vClaimParser = getClaimParser(claimQuery)\n\n if (typeof pathElement === 'number') {\n const elementParser = isLast ? vClaimParser : getClaimQueryParser(claimQuery, { ...ctx, index: index + 1 })\n\n if (presentation) {\n // We allow both the concrete value and an array of one value\n return v.union([\n v.pipe(\n v.array(vJson),\n v.length(1),\n v.transform((input) => input[0]),\n elementParser\n ),\n elementParser,\n ])\n }\n\n return v.pipe(\n v.array(vJson),\n v.transform((input) => input[pathElement]),\n elementParser\n )\n }\n if (typeof pathElement === 'string') {\n return v.object({\n [pathElement]: isLast ? vClaimParser : getClaimQueryParser(claimQuery, { ...ctx, index: index + 1 }),\n })\n }\n return isLast ? v.array(vClaimParser) : v.array(getClaimQueryParser(claimQuery, { ...ctx, index: index + 1 }))\n}\n\nexport const getJsonClaimsParser = (claimsQueries: DcqlClaimsQuery.W3cAndSdJwtVc[], ctx: { presentation: boolean }) => {\n const claimParser = v.intersect(\n claimsQueries.map(\n (claimQuery) =>\n getClaimQueryParser(claimQuery, {\n ...ctx,\n index: 0,\n }) as typeof vJsonRecord\n )\n )\n\n return claimParser\n}\n\nexport const getMdocClaimsQueriesForClaimSet = (\n claimsQueries: DcqlClaimsQuery.Mdoc[],\n claimSet: string[]\n): DcqlClaimsQuery.Mdoc[] => {\n return claimSet.map((credential_id) => {\n const query = claimsQueries.find((query) => query.id === credential_id)\n if (!query) {\n throw new DcqlInvalidClaimsQueryIdError({\n message: `Claims-query with id '${credential_id}' not found.`,\n })\n }\n\n return query\n })\n}\n\nexport const getJsonClaimsQueriesForClaimSet = (\n claimsQueries: DcqlClaimsQuery.W3cAndSdJwtVc[],\n claimSet: string[]\n): DcqlClaimsQuery.W3cAndSdJwtVc[] => {\n return claimSet.map((credential_id) => {\n const query = claimsQueries.find((query) => query.id === credential_id)\n if (!query) {\n throw new DcqlInvalidClaimsQueryIdError({\n message: `Claims-query with id '${credential_id}' not found.`,\n })\n }\n return query\n })\n}\n\nconst getMdocParser = (\n credentialQuery: DcqlCredentialQuery.Mdoc,\n ctx: { claimSet?: NonNullable<DcqlCredentialQuery['claim_sets']>[number] }\n) => {\n const { claimSet } = ctx\n\n const vDoctype = credentialQuery.meta?.doctype_value ? v.literal(credentialQuery.meta.doctype_value) : v.string()\n\n const claimSetQueries =\n credentialQuery.claims && claimSet\n ? getMdocClaimsQueriesForClaimSet(credentialQuery.claims, claimSet)\n : credentialQuery.claims\n\n const credentialParser = v.object({\n credential_format: v.literal('mso_mdoc'),\n doctype: vDoctype,\n namespaces: claimSetQueries\n ? getNamespacesParser(claimSetQueries)\n : v.record(v.string(), v.record(v.string(), v.unknown())),\n })\n\n return credentialParser\n}\n\nconst getW3cVcSdJwtVcParser = (\n credentialQuery: DcqlCredentialQuery.SdJwtVc | DcqlCredentialQuery.W3cVc,\n ctx: {\n claimSet?: NonNullable<DcqlCredentialQuery['claim_sets']>[number]\n presentation: boolean\n }\n) => {\n const { claimSet } = ctx\n const claimSetQueries =\n credentialQuery.claims && claimSet\n ? getJsonClaimsQueriesForClaimSet(credentialQuery.claims, claimSet)\n : credentialQuery.claims\n\n if (credentialQuery.format === 'vc+sd-jwt' || credentialQuery.format === 'dc+sd-jwt') {\n return v.object({\n credential_format: v.literal(credentialQuery.format),\n vct: credentialQuery.meta?.vct_values ? v.picklist(credentialQuery.meta.vct_values) : v.string(),\n claims: claimSetQueries ? getJsonClaimsParser(claimSetQueries, ctx) : vJsonRecord,\n })\n }\n const credentialParser = v.object({\n credential_format: v.picklist(['jwt_vc_json', 'jwt_vc_json-ld']),\n claims: claimSetQueries ? getJsonClaimsParser(claimSetQueries, ctx) : vJsonRecord,\n })\n\n return credentialParser\n}\n\nexport const getCredentialQueryParser = (\n credentialQuery: DcqlCredentialQuery,\n ctx: {\n claimSet?: NonNullable<DcqlCredentialQuery['claim_sets']>[number]\n presentation: boolean\n }\n) => {\n if (credentialQuery.claim_sets && !ctx.claimSet) {\n throw new DcqlMissingClaimSetParseError({\n message: 'credentialQuery specifies claim_sets but no claim_set for parsing is provided.',\n })\n }\n\n if (credentialQuery.format === 'mso_mdoc') {\n return getMdocParser(credentialQuery, ctx)\n }\n return getW3cVcSdJwtVcParser(credentialQuery, ctx)\n}\n","import * as v from 'valibot'\nimport { vIdString, vNonEmptyArray } from '../u-dcql.js'\n\n/**\n * Specifies claims withing a requested Credential.\n */\nexport namespace DcqlClaimsQuery {\n export const vValue = v.union([v.string(), v.pipe(v.number(), v.integer()), v.boolean()])\n\n export const vPath = v.union([v.string(), v.pipe(v.number(), v.integer(), v.minValue(0)), v.null()])\n\n export const vW3cSdJwtVc = v.object({\n id: v.pipe(\n v.optional(vIdString),\n v.description(\n '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.'\n )\n ),\n path: v.pipe(\n v.array(vPath),\n vNonEmptyArray(),\n v.description(\n 'A non-empty array representing a claims path pointer that specifies the path to a claim within the Verifiable Credential.'\n )\n ),\n values: v.pipe(\n v.optional(v.array(vValue)),\n v.description(\n '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.'\n )\n ),\n })\n export type W3cAndSdJwtVc = v.InferOutput<typeof vW3cSdJwtVc>\n\n const vMdocBase = v.object({\n id: v.pipe(\n v.optional(vIdString),\n v.description(\n '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.'\n )\n ),\n values: v.pipe(\n v.optional(v.array(vValue)),\n v.description(\n '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.'\n )\n ),\n })\n\n // Syntax up until Draft 23 of OID4VP. Keeping due to Draft 23 having\n // reach ID-3 status and thus being targeted by several implementations\n export const vMdocNamespace = v.object({\n ...vMdocBase.entries,\n\n namespace: v.pipe(\n v.string(),\n v.description(\n 'A string that specifies the namespace of the data element within the mdoc, e.g., org.iso.18013.5.1.'\n )\n ),\n claim_name: v.pipe(\n v.string(),\n v.description(\n 'A string that specifies the data element identifier of the data element within the provided namespace in the mdoc, e.g., first_name.'\n )\n ),\n })\n\n // Syntax starting from Draft 24 of OID4VP\n export const vMdocPath = v.object({\n ...vMdocBase.entries,\n\n intent_to_retain: v.pipe(\n v.optional(v.boolean()),\n v.description(\n 'A boolean that is equivalent to `IntentToRetain` variable defined in Section 8.3.2.1.2.1 of [@ISO.18013-5].'\n )\n ),\n\n path: v.pipe(\n v.tuple([\n v.pipe(\n v.string(),\n v.description(\n 'A string that specifies the namespace of the data element within the mdoc, e.g., org.iso.18013.5.1.'\n )\n ),\n v.pipe(\n v.string(),\n v.description(\n 'A string that specifies the data element identifier of the data element within the provided namespace in the mdoc, e.g., first_name.'\n )\n ),\n ]),\n v.description(\n '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.'\n )\n ),\n })\n export const vMdoc = v.union([vMdocNamespace, vMdocPath])\n export type MdocNamespace = v.InferOutput<typeof vMdocNamespace>\n export type MdocPath = v.InferOutput<typeof vMdocPath>\n export type Mdoc = v.InferOutput<typeof vMdoc>\n\n export const vModel = v.union([vMdoc, vW3cSdJwtVc])\n export type Input = v.InferInput<typeof vModel>\n export type Out = v.InferOutput<typeof vModel>\n}\nexport type DcqlClaimsQuery = DcqlClaimsQuery.Out\n","import * as v from 'valibot'\nimport { DcqlCredentialQuery } from '../dcql-query/m-dcql-credential-query.js'\nimport { CredentialSetQuery } from '../dcql-query/m-dcql-credential-set-query.js'\nimport { DcqlCredential } from '../u-dcql-credential.js'\nimport { vIdString, vNonEmptyArray } from '../u-dcql.js'\n\nexport namespace DcqlQueryResult {\n export const vCredentialQueryResult = v.pipe(\n v.array(v.array(v.union([v.undefined(), DcqlCredential.vParseSuccess, DcqlCredential.vParseFailure]))),\n vNonEmptyArray()\n )\n\n export type CredentialQueryResult = v.InferOutput<typeof vCredentialQueryResult>\n\n export const vModel = v.object({\n credentials: v.pipe(\n v.array(DcqlCredentialQuery.vModel),\n vNonEmptyArray(),\n v.description(\n 'REQUIRED. A non-empty array of Credential Queries that specify the requested Verifiable Credentials.'\n )\n ),\n\n credential_matches: v.record(\n v.pipe(vIdString),\n v.union([\n v.object({\n ...DcqlCredential.vParseSuccess.entries,\n all: v.pipe(\n v.array(\n v.pipe(\n v.array(v.union([v.undefined(), DcqlCredential.vParseSuccess, DcqlCredential.vParseFailure])),\n vNonEmptyArray()\n )\n ),\n vNonEmptyArray()\n ),\n }),\n v.object({\n success: DcqlCredential.vParseFailure.entries.success,\n all: v.pipe(\n v.array(\n v.pipe(\n v.array(v.union([v.undefined(), DcqlCredential.vParseSuccess, DcqlCredential.vParseFailure])),\n vNonEmptyArray()\n )\n ),\n vNonEmptyArray()\n ),\n }),\n ])\n ),\n\n credential_sets: v.optional(\n v.pipe(\n v.array(\n v.object({\n ...CredentialSetQuery.vModel.entries,\n matching_options: v.union([v.undefined(), v.pipe(v.array(v.array(v.string())), vNonEmptyArray())]),\n })\n ),\n vNonEmptyArray(),\n v.description(\n 'OPTIONAL. A non-empty array of credential set queries that specifies additional constraints on which of the requested Verifiable Credentials to return.'\n )\n )\n ),\n\n canBeSatisfied: v.boolean(),\n })\n export type Input = v.InferInput<typeof vModel>\n export type Output = v.InferOutput<typeof vModel>\n\n export type CredentialMatch = Input['credential_matches'][number]\n export type CredentialMatchRecord = Input['credential_matches']\n}\nexport type DcqlQueryResult = DcqlQueryResult.Output\n","import * as v from 'valibot'\nimport { DcqlUndefinedClaimSetIdError } from '../dcql-error/e-dcql.js'\nimport { idRegex, vIdString, vNonEmptyArray } from '../u-dcql.js'\nimport { DcqlClaimsQuery } from './m-dcql-claims-query.js'\n\n/**\n * A Credential Query is an object representing a request for a presentation of one Credential.\n */\nexport namespace DcqlCredentialQuery {\n const vBase = v.object({\n id: v.pipe(\n v.string(),\n v.regex(idRegex),\n v.description(\n `REQUIRED. A string identifying the Credential in the response and, if provided, the constraints in 'credential_sets'.`\n )\n ),\n claim_sets: v.pipe(\n v.optional(v.pipe(v.array(v.pipe(v.array(vIdString), vNonEmptyArray())), vNonEmptyArray())),\n v.description(\n `OPTIONAL. A non-empty array containing arrays of identifiers for elements in 'claims' that specifies which combinations of 'claims' for the Credential are requested.`\n )\n ),\n })\n\n export const vMdoc = v.object({\n ...vBase.entries,\n format: v.pipe(\n v.literal('mso_mdoc'),\n v.description('REQUIRED. A string that specifies the format of the requested Verifiable Credential.')\n ),\n claims: v.pipe(\n v.optional(v.pipe(v.array(DcqlClaimsQuery.vMdoc), vNonEmptyArray())),\n v.description('OPTIONAL. A non-empty array of objects as that specifies claims in the requested Credential.')\n ),\n meta: v.pipe(\n v.optional(\n v.object({\n doctype_value: v.pipe(\n v.optional(v.string()),\n v.description(\n 'OPTIONAL. String that specifies an allowed value for the doctype of the requested Verifiable Credential.'\n )\n ),\n })\n ),\n v.description(\n 'OPTIONAL. An object defining additional properties requested by the Verifier that apply to the metadata and validity data of the Credential.'\n )\n ),\n })\n export type Mdoc = v.InferOutput<typeof vMdoc>\n\n export const vSdJwtVc = v.object({\n ...vBase.entries,\n format: v.pipe(\n v.picklist(['vc+sd-jwt', 'dc+sd-jwt']),\n v.description('REQUIRED. A string that specifies the format of the requested Verifiable Credential.')\n ),\n claims: v.pipe(\n v.optional(v.pipe(v.array(DcqlClaimsQuery.vW3cSdJwtVc), vNonEmptyArray())),\n v.description('OPTIONAL. A non-empty array of objects as that specifies claims in the requested Credential.')\n ),\n meta: v.pipe(\n v.optional(\n v.pipe(\n v.object({\n vct_values: v.optional(v.array(v.string())),\n }),\n v.description(\n 'OPTIONAL. An array of strings that specifies allowed values for the type of the requested Verifiable Credential.'\n )\n )\n ),\n v.description(\n 'OPTIONAL. An object defining additional properties requested by the Verifier that apply to the metadata and validity data of the Credential.'\n )\n ),\n })\n export type SdJwtVc = v.InferOutput<typeof vSdJwtVc>\n\n export const vW3cVc = v.object({\n ...vBase.entries,\n format: v.picklist(['jwt_vc_json', 'jwt_vc_json-ld']),\n claims: v.optional(v.pipe(v.array(DcqlClaimsQuery.vW3cSdJwtVc), vNonEmptyArray())),\n })\n export type W3cVc = v.InferOutput<typeof vW3cVc>\n\n export const vModel = v.variant('format', [vMdoc, vSdJwtVc, vW3cVc])\n export type Input = v.InferInput<typeof vModel>\n export type Output = v.InferOutput<typeof vModel>\n\n export const validate = (credentialQuery: Output) => {\n claimSetIdsAreDefined(credentialQuery)\n }\n}\nexport type DcqlCredentialQuery = DcqlCredentialQuery.Output\n\n// --- validations --- //\n\nconst claimSetIdsAreDefined = (credentialQuery: DcqlCredentialQuery) => {\n if (!credentialQuery.claim_sets) return\n const claimIds = new Set(credentialQuery.claims?.map((claim) => claim.id))\n\n const undefinedClaims: string[] = []\n for (const claim_set of credentialQuery.claim_sets) {\n for (const claim_id of claim_set) {\n if (!claimIds.has(claim_id)) {\n undefinedClaims.push(claim_id)\n }\n }\n }\n\n if (undefinedClaims.length > 0) {\n throw new DcqlUndefinedClaimSetIdError({\n message: `Credential set contains undefined credential id${undefinedClaims.length === 0 ? '' : '`s'} '${undefinedClaims.join(', ')}'`,\n })\n }\n}\n","import * as v from 'valibot'\nimport { vIdString, vNonEmptyArray } from '../u-dcql.js'\n\n/**\n * A Credential Set Query is an object representing\n * a request for one or more credentials to satisfy a particular use case with the Verifier.\n */\nexport namespace CredentialSetQuery {\n export const vModel = v.object({\n options: v.pipe(\n v.array(v.array(vIdString)),\n vNonEmptyArray(),\n v.description(\n '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.'\n )\n ),\n required: v.pipe(\n v.optional(v.boolean(), true),\n v.description(\n `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'.`\n )\n ),\n purpose: v.pipe(\n v.optional(v.union([v.string(), v.number(), v.record(v.string(), v.unknown())])),\n v.description('OPTIONAL. A string, number or object specifying the purpose of the query.')\n ),\n })\n\n export type Input = v.InferInput<typeof vModel>\n export type Output = v.InferOutput<typeof vModel>\n}\nexport type CredentialSetQuery = CredentialSetQuery.Output\n","import * as v from 'valibot'\nimport { vIdString, vJsonRecord, vStringToJson } from '../u-dcql.js'\n\nexport namespace DcqlPresentation {\n export const vModel = v.record(vIdString, v.union([v.string(), vJsonRecord]))\n\n export type Input = v.InferInput<typeof vModel>\n export type Output = v.InferOutput<typeof vModel>\n export const parse = (input: Input | string) => {\n if (typeof input === 'string') {\n return v.parse(v.pipe(v.string(), vStringToJson, vModel), input)\n }\n\n return v.parse(vModel, input)\n }\n\n export const encode = (input: Output) => {\n return JSON.stringify(input)\n }\n}\nexport type DcqlPresentation = DcqlPresentation.Output\n","import type * as v from 'valibot'\nimport { runCredentialQuery } from '../dcql-parser/dcql-credential-query-result.js'\nimport type { DcqlQuery } from '../dcql-query/m-dcql-query.js'\nimport type { DcqlCredential } from '../u-dcql-credential.js'\nimport type { DcqlQueryResult } from './m-dcql-query-result.js'\n\nexport const runDcqlQuery = (\n dcqlQuery: DcqlQuery.Output,\n ctx: {\n credentials: DcqlCredential[]\n presentation: boolean\n }\n): DcqlQueryResult => {\n const credentialQueriesResults = Object.fromEntries(\n dcqlQuery.credentials.map((credentialQuery) => [credentialQuery.id, runCredentialQuery(credentialQuery, ctx)])\n )\n\n const credentialMatches = Object.fromEntries(\n Object.entries(credentialQueriesResults).map(([key, credentialQueryResult]) => {\n // Find the best match for each credential query\n let bestMatch: v.InferOutput<typeof DcqlCredential.vParseSuccess> | undefined = undefined\n\n for (const credentialParseResult of credentialQueryResult) {\n const bestMatchForCredential = credentialParseResult.find((result) => result?.success === true)\n\n if (!bestMatch && bestMatchForCredential) {\n const { issues, ...matchWithoutIssues } = bestMatchForCredential\n bestMatch = matchWithoutIssues\n continue\n }\n\n // biome-ignore lint/style/noNonNullAssertion: <explanation>\n if (bestMatchForCredential && bestMatchForCredential.claim_set_index! < bestMatch?.claim_set_index!) {\n const { issues, ...matchWithoutIssues } = bestMatchForCredential\n bestMatch = matchWithoutIssues\n }\n }\n\n return [\n key,\n bestMatch ? { ...bestMatch, all: credentialQueryResult } : { success: false, all: credentialQueryResult },\n ]\n })\n ) satisfies DcqlQueryResult.CredentialMatchRecord\n\n const credentialSetResults = dcqlQuery.credential_sets?.map((set) => {\n const matchingOptions = set.options.filter((option) =>\n option.every((credentialQueryId) => credentialMatches[credentialQueryId]?.success)\n )\n\n return {\n ...set,\n matching_options: matchingOptions.length > 0 ? (matchingOptions as [string[], ...string[][]]) : undefined,\n }\n }) as DcqlQueryResult.Output['credential_sets']\n\n const dqclQueryMatched = credentialSetResults\n ? credentialSetResults.every((set) => !set.required || set.matching_options)\n : Object.values(credentialMatches).every((query) => query.success)\n\n return {\n ...dcqlQuery,\n canBeSatisfied: dqclQueryMatched,\n credential_matches: credentialMatches as DcqlQueryResult['credential_matches'],\n credential_sets: credentialSetResults,\n }\n}\n","import * as v from 'valibot'\nimport { DcqlCredentialSetError, DcqlNonUniqueCredentialQueryIdsError } from '../dcql-error/e-dcql.js'\nimport { runDcqlQuery } from '../dcql-query-result/run-dcql-query.js'\nimport type { DcqlCredential } from '../u-dcql-credential.js'\nimport { vNonEmptyArray } from '../u-dcql.js'\nimport { DcqlCredentialQuery } from './m-dcql-credential-query.js'\nimport { CredentialSetQuery } from './m-dcql-credential-set-query.js'\n\n/**\n * The Digital Credentials Query Language (DCQL, pronounced [ˈdakl̩]) is a\n * JSON-encoded query language that allows the Verifier to request Verifiable\n * Presentations that match the query. The Verifier MAY encode constraints on the\n * combinations of credentials and claims that are requested. The Wallet evaluates\n * the query against the Verifiable Credentials it holds and returns Verifiable\n * Presentations matching the query.\n */\nexport namespace DcqlQuery {\n export const vModel = v.object({\n credentials: v.pipe(\n v.array(DcqlCredentialQuery.vModel),\n vNonEmptyArray(),\n v.description(\n 'REQUIRED. A non-empty array of Credential Queries that specify the requested Verifiable Credentials.'\n )\n ),\n credential_sets: v.pipe(\n v.optional(v.pipe(v.array(CredentialSetQuery.vModel), vNonEmptyArray())),\n v.description(\n 'OPTIONAL. A non-empty array of credential set queries that specifies additional constraints on which of the requested Verifiable Credentials to return.'\n )\n ),\n })\n export type Input = v.InferInput<typeof vModel>\n export type Output = v.InferOutput<typeof vModel>\n export const validate = (dcqlQuery: Output) => {\n validateUniqueCredentialQueryIds(dcqlQuery)\n validateCredentialSets(dcqlQuery)\n dcqlQuery.credentials.forEach(DcqlCredentialQuery.validate)\n }\n export const query = (dcqlQuery: Output, credentials: DcqlCredential[]) => {\n return runDcqlQuery(dcqlQuery, { credentials, presentation: false })\n }\n\n export const parse = (input: Input) => {\n return v.parse(vModel, input)\n }\n}\nexport type DcqlQuery = DcqlQuery.Output\n\n// --- validations --- //\n\nconst validateUniqueCredentialQueryIds = (query: DcqlQuery.Output) => {\n const ids = query.credentials.map((c) => c.id)\n const duplicates = ids.filter((id, index) => ids.indexOf(id) !== index)\n\n if (duplicates.length > 0) {\n throw new DcqlNonUniqueCredentialQueryIdsError({\n message: `Duplicate credential query ids found: ${duplicates.join(', ')}`,\n })\n }\n}\n\nconst validateCredentialSets = (query: DcqlQuery.Output) => {\n if (!query.credential_sets) return\n\n const credentialQueryIds = new Set(query.credentials.map((c) => c.id))\n\n const undefinedCredentialQueryIds: string[] = []\n for (const credential_set of query.credential_sets) {\n for (const credentialSetOption of credential_set.options) {\n for (const credentialQueryId of credentialSetOption) {\n if (!credentialQueryIds.has(credentialQueryId)) {\n undefinedCredentialQueryIds.push(credentialQueryId)\n }\n }\n }\n }\n\n if (undefinedCredentialQueryIds.length > 0) {\n throw new DcqlCredentialSetError({\n message: `Credential set contains undefined credential id${undefinedCredentialQueryIds.length === 1 ? '' : '`s'} '${undefinedCredentialQueryIds.join(', ')}'`,\n })\n }\n}\n"],"mappings":"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","names":["v","v","v","DcqlMdocCredential","DcqlSdJwtVcCredential","DcqlW3cVcCredential","DcqlCredential","DcqlMdocPresentation","DcqlSdJwtVcPresentation","DcqlW3cVcPresentation","DcqlCredentialPresentation","v","v","v","v","DcqlClaimsQuery","query","v","v","DcqlCredentialQuery","v","CredentialSetQuery","DcqlQueryResult","DcqlPresentationResult","v","DcqlPresentation","v","DcqlQuery"]}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "dcql",
3
3
  "description": "Digital Credentials Query Language (DCQL)",
4
4
  "author": "Martin Auer",
5
- "version": "0.2.21",
5
+ "version": "0.2.22",
6
6
  "private": false,
7
7
  "files": [
8
8
  "dist"