dcql 0.2.18 → 0.2.19
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/LICENSE +201 -0
- package/README.md +131 -0
- package/dist/index.d.mts +2885 -0
- package/dist/index.d.ts +2885 -0
- package/dist/index.js +1014 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +951 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +18 -23
- package/dist/src/dcql-error/e-base.d.ts +0 -15
- package/dist/src/dcql-error/e-base.d.ts.map +0 -1
- package/dist/src/dcql-error/e-base.js +0 -78
- package/dist/src/dcql-error/e-base.js.map +0 -1
- package/dist/src/dcql-error/e-dcql.d.ts +0 -50
- package/dist/src/dcql-error/e-dcql.d.ts.map +0 -1
- package/dist/src/dcql-error/e-dcql.js +0 -53
- package/dist/src/dcql-error/e-dcql.js.map +0 -1
- package/dist/src/dcql-error/index.d.ts +0 -3
- package/dist/src/dcql-error/index.d.ts.map +0 -1
- package/dist/src/dcql-error/index.js +0 -23
- package/dist/src/dcql-error/index.js.map +0 -1
- package/dist/src/dcql-parser/claims-path.test.d.ts +0 -2
- package/dist/src/dcql-parser/claims-path.test.d.ts.map +0 -1
- package/dist/src/dcql-parser/claims-path.test.js +0 -103
- package/dist/src/dcql-parser/claims-path.test.js.map +0 -1
- package/dist/src/dcql-parser/dcql-claims-query-result.d.ts +0 -25
- package/dist/src/dcql-parser/dcql-claims-query-result.d.ts.map +0 -1
- package/dist/src/dcql-parser/dcql-claims-query-result.js +0 -179
- package/dist/src/dcql-parser/dcql-claims-query-result.js.map +0 -1
- package/dist/src/dcql-parser/dcql-credential-query-result.d.ts +0 -8
- package/dist/src/dcql-parser/dcql-credential-query-result.d.ts.map +0 -1
- package/dist/src/dcql-parser/dcql-credential-query-result.js +0 -65
- package/dist/src/dcql-parser/dcql-credential-query-result.js.map +0 -1
- package/dist/src/dcql-presentation/index.d.ts +0 -4
- package/dist/src/dcql-presentation/index.d.ts.map +0 -1
- package/dist/src/dcql-presentation/index.js +0 -13
- package/dist/src/dcql-presentation/index.js.map +0 -1
- package/dist/src/dcql-presentation/m-dcql-credential-presentation.d.ts +0 -59
- package/dist/src/dcql-presentation/m-dcql-credential-presentation.d.ts.map +0 -1
- package/dist/src/dcql-presentation/m-dcql-credential-presentation.js +0 -55
- package/dist/src/dcql-presentation/m-dcql-credential-presentation.js.map +0 -1
- package/dist/src/dcql-presentation/m-dcql-presentation-result.d.ts +0 -660
- package/dist/src/dcql-presentation/m-dcql-presentation-result.d.ts.map +0 -1
- package/dist/src/dcql-presentation/m-dcql-presentation-result.js +0 -132
- package/dist/src/dcql-presentation/m-dcql-presentation-result.js.map +0 -1
- package/dist/src/dcql-presentation/m-dcql-presentation.d.ts +0 -14
- package/dist/src/dcql-presentation/m-dcql-presentation.d.ts.map +0 -1
- package/dist/src/dcql-presentation/m-dcql-presentation.js +0 -42
- package/dist/src/dcql-presentation/m-dcql-presentation.js.map +0 -1
- package/dist/src/dcql-query/dcql-query-complex.test.d.ts +0 -2
- package/dist/src/dcql-query/dcql-query-complex.test.d.ts.map +0 -1
- package/dist/src/dcql-query/dcql-query-complex.test.js +0 -3204
- package/dist/src/dcql-query/dcql-query-complex.test.js.map +0 -1
- package/dist/src/dcql-query/dcql-query-with-json-transform.test.d.ts +0 -2
- package/dist/src/dcql-query/dcql-query-with-json-transform.test.d.ts.map +0 -1
- package/dist/src/dcql-query/dcql-query-with-json-transform.test.js +0 -188
- package/dist/src/dcql-query/dcql-query-with-json-transform.test.js.map +0 -1
- package/dist/src/dcql-query/dcql-query.test.d.ts +0 -2
- package/dist/src/dcql-query/dcql-query.test.d.ts.map +0 -1
- package/dist/src/dcql-query/dcql-query.test.js +0 -378
- package/dist/src/dcql-query/dcql-query.test.js.map +0 -1
- package/dist/src/dcql-query/index.d.ts +0 -5
- package/dist/src/dcql-query/index.d.ts.map +0 -1
- package/dist/src/dcql-query/index.js +0 -12
- package/dist/src/dcql-query/index.js.map +0 -1
- package/dist/src/dcql-query/m-dcql-claims-query.d.ts +0 -35
- package/dist/src/dcql-query/m-dcql-claims-query.d.ts.map +0 -1
- package/dist/src/dcql-query/m-dcql-claims-query.js +0 -57
- package/dist/src/dcql-query/m-dcql-claims-query.js.map +0 -1
- package/dist/src/dcql-query/m-dcql-credential-query.d.ts +0 -186
- package/dist/src/dcql-query/m-dcql-credential-query.d.ts.map +0 -1
- package/dist/src/dcql-query/m-dcql-credential-query.js +0 -85
- package/dist/src/dcql-query/m-dcql-credential-query.js.map +0 -1
- package/dist/src/dcql-query/m-dcql-credential-set-query.d.ts +0 -18
- package/dist/src/dcql-query/m-dcql-credential-set-query.d.ts.map +0 -1
- package/dist/src/dcql-query/m-dcql-credential-set-query.js +0 -41
- package/dist/src/dcql-query/m-dcql-credential-set-query.js.map +0 -1
- package/dist/src/dcql-query/m-dcql-query.d.ts +0 -843
- package/dist/src/dcql-query/m-dcql-query.d.ts.map +0 -1
- package/dist/src/dcql-query/m-dcql-query.js +0 -89
- package/dist/src/dcql-query/m-dcql-query.js.map +0 -1
- package/dist/src/dcql-query-result/index.d.ts +0 -3
- package/dist/src/dcql-query-result/index.d.ts.map +0 -1
- package/dist/src/dcql-query-result/index.js +0 -8
- package/dist/src/dcql-query-result/index.js.map +0 -1
- package/dist/src/dcql-query-result/m-dcql-query-result.d.ts +0 -883
- package/dist/src/dcql-query-result/m-dcql-query-result.d.ts.map +0 -1
- package/dist/src/dcql-query-result/m-dcql-query-result.js +0 -69
- package/dist/src/dcql-query-result/m-dcql-query-result.js.map +0 -1
- package/dist/src/dcql-query-result/run-dcql-query.d.ts +0 -8
- package/dist/src/dcql-query-result/run-dcql-query.d.ts.map +0 -1
- package/dist/src/dcql-query-result/run-dcql-query.js +0 -56
- package/dist/src/dcql-query-result/run-dcql-query.js.map +0 -1
- package/dist/src/index.d.ts +0 -6
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/index.js +0 -27
- package/dist/src/index.js.map +0 -1
- package/dist/src/u-dcql-credential.d.ts +0 -104
- package/dist/src/u-dcql-credential.d.ts.map +0 -1
- package/dist/src/u-dcql-credential.js +0 -84
- package/dist/src/u-dcql-credential.js.map +0 -1
- package/dist/src/u-dcql.d.ts +0 -17
- package/dist/src/u-dcql.d.ts.map +0 -1
- package/dist/src/u-dcql.js +0 -98
- package/dist/src/u-dcql.js.map +0 -1
- package/dist/src/u-model.d.ts +0 -27
- package/dist/src/u-model.d.ts.map +0 -1
- package/dist/src/u-model.js +0 -65
- package/dist/src/u-model.js.map +0 -1
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"m-dcql-query.d.ts","sourceRoot":"","sources":["../../../src/dcql-query/m-dcql-query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAC;AAM7B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAK9D;;;;;;;GAOG;AACH,yBAAiB,SAAS,CAAC;IAClB,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAcjB,CAAC;IACH,KAAY,KAAK,GAAG,CAAC,CAAC,UAAU,CAAC,OAAO,MAAM,CAAC,CAAC;IAChD,KAAY,MAAM,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,MAAM,CAAC,CAAC;IAC3C,MAAM,QAAQ,cAAe,MAAM,SAIzC,CAAC;IACK,MAAM,KAAK,cAAe,MAAM,eAAe,cAAc,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAErE,CAAC;IAEK,MAAM,KAAK,UAAW,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAEjC,CAAC;CACH;AACD,MAAM,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC"}
|
@@ -1,89 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
3
|
-
if (k2 === undefined) k2 = k;
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
7
|
-
}
|
8
|
-
Object.defineProperty(o, k2, desc);
|
9
|
-
}) : (function(o, m, k, k2) {
|
10
|
-
if (k2 === undefined) k2 = k;
|
11
|
-
o[k2] = m[k];
|
12
|
-
}));
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
15
|
-
}) : function(o, v) {
|
16
|
-
o["default"] = v;
|
17
|
-
});
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
19
|
-
if (mod && mod.__esModule) return mod;
|
20
|
-
var result = {};
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
22
|
-
__setModuleDefault(result, mod);
|
23
|
-
return result;
|
24
|
-
};
|
25
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
26
|
-
exports.DcqlQuery = void 0;
|
27
|
-
const v = __importStar(require("valibot"));
|
28
|
-
const e_dcql_js_1 = require("../dcql-error/e-dcql.js");
|
29
|
-
const run_dcql_query_js_1 = require("../dcql-query-result/run-dcql-query.js");
|
30
|
-
const u_dcql_js_1 = require("../u-dcql.js");
|
31
|
-
const m_dcql_credential_query_js_1 = require("./m-dcql-credential-query.js");
|
32
|
-
const m_dcql_credential_set_query_js_1 = require("./m-dcql-credential-set-query.js");
|
33
|
-
/**
|
34
|
-
* The Digital Credentials Query Language (DCQL, pronounced [ˈdakl̩]) is a
|
35
|
-
* JSON-encoded query language that allows the Verifier to request Verifiable
|
36
|
-
* Presentations that match the query. The Verifier MAY encode constraints on the
|
37
|
-
* combinations of credentials and claims that are requested. The Wallet evaluates
|
38
|
-
* the query against the Verifiable Credentials it holds and returns Verifiable
|
39
|
-
* Presentations matching the query.
|
40
|
-
*/
|
41
|
-
var DcqlQuery;
|
42
|
-
(function (DcqlQuery) {
|
43
|
-
DcqlQuery.vModel = v.object({
|
44
|
-
credentials: v.pipe(v.array(m_dcql_credential_query_js_1.DcqlCredentialQuery.vModel), (0, u_dcql_js_1.vNonEmptyArray)(), v.description(`REQUIRED. A non-empty array of Credential Queries that specify the requested Verifiable Credentials.`)),
|
45
|
-
credential_sets: v.pipe(v.optional(v.pipe(v.array(m_dcql_credential_set_query_js_1.CredentialSetQuery.vModel), (0, u_dcql_js_1.vNonEmptyArray)())), v.description(`OPTIONAL. A non-empty array of credential set queries that specifies additional constraints on which of the requested Verifiable Credentials to return.`)),
|
46
|
-
});
|
47
|
-
DcqlQuery.validate = (dcqlQuery) => {
|
48
|
-
validateUniqueCredentialQueryIds(dcqlQuery);
|
49
|
-
validateCredentialSets(dcqlQuery);
|
50
|
-
dcqlQuery.credentials.forEach(m_dcql_credential_query_js_1.DcqlCredentialQuery.validate);
|
51
|
-
};
|
52
|
-
DcqlQuery.query = (dcqlQuery, credentials) => {
|
53
|
-
return (0, run_dcql_query_js_1.runDcqlQuery)(dcqlQuery, { credentials, presentation: false });
|
54
|
-
};
|
55
|
-
DcqlQuery.parse = (input) => {
|
56
|
-
return v.parse(DcqlQuery.vModel, input);
|
57
|
-
};
|
58
|
-
})(DcqlQuery || (exports.DcqlQuery = DcqlQuery = {}));
|
59
|
-
// --- validations --- //
|
60
|
-
const validateUniqueCredentialQueryIds = (query) => {
|
61
|
-
const ids = query.credentials.map(c => c.id);
|
62
|
-
const duplicates = ids.filter((id, index) => ids.indexOf(id) !== index);
|
63
|
-
if (duplicates.length > 0) {
|
64
|
-
throw new e_dcql_js_1.DcqlNonUniqueCredentialQueryIdsError({
|
65
|
-
message: `Duplicate credential query ids found: ${duplicates.join(', ')}`,
|
66
|
-
});
|
67
|
-
}
|
68
|
-
};
|
69
|
-
const validateCredentialSets = (query) => {
|
70
|
-
if (!query.credential_sets)
|
71
|
-
return;
|
72
|
-
const credentialQueryIds = new Set(query.credentials.map(c => c.id));
|
73
|
-
const undefinedCredentialQueryIds = [];
|
74
|
-
for (const credential_set of query.credential_sets) {
|
75
|
-
for (const credentialSetOption of credential_set.options) {
|
76
|
-
for (const credentialQueryId of credentialSetOption) {
|
77
|
-
if (!credentialQueryIds.has(credentialQueryId)) {
|
78
|
-
undefinedCredentialQueryIds.push(credentialQueryId);
|
79
|
-
}
|
80
|
-
}
|
81
|
-
}
|
82
|
-
}
|
83
|
-
if (undefinedCredentialQueryIds.length > 0) {
|
84
|
-
throw new e_dcql_js_1.DcqlCredentialSetError({
|
85
|
-
message: `Credential set contains undefined credential id${undefinedCredentialQueryIds.length === 1 ? '' : '`s'} '${undefinedCredentialQueryIds.join(', ')}'`,
|
86
|
-
});
|
87
|
-
}
|
88
|
-
};
|
89
|
-
//# sourceMappingURL=m-dcql-query.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"m-dcql-query.js","sourceRoot":"","sources":["../../../src/dcql-query/m-dcql-query.ts"],"names":[],"mappings":"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"}
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/dcql-query-result/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC"}
|
@@ -1,8 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.runDcqlQuery = exports.DcqlQueryResult = void 0;
|
4
|
-
var m_dcql_query_result_js_1 = require("./m-dcql-query-result.js");
|
5
|
-
Object.defineProperty(exports, "DcqlQueryResult", { enumerable: true, get: function () { return m_dcql_query_result_js_1.DcqlQueryResult; } });
|
6
|
-
var run_dcql_query_js_1 = require("./run-dcql-query.js");
|
7
|
-
Object.defineProperty(exports, "runDcqlQuery", { enumerable: true, get: function () { return run_dcql_query_js_1.runDcqlQuery; } });
|
8
|
-
//# sourceMappingURL=index.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/dcql-query-result/index.ts"],"names":[],"mappings":";;;AAAA,mEAA2D;AAAlD,yHAAA,eAAe,OAAA;AACxB,yDAAmD;AAA1C,iHAAA,YAAY,OAAA"}
|