@sphereon/ssi-sdk.siopv2-oid4vp-op-auth 0.33.1-feature.vcdm2.tsup.31 → 0.33.1-next.2

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.
Files changed (88) hide show
  1. package/dist/agent/DidAuthSiopOpAuthenticator.d.ts +36 -0
  2. package/dist/agent/DidAuthSiopOpAuthenticator.d.ts.map +1 -0
  3. package/dist/agent/DidAuthSiopOpAuthenticator.js +392 -0
  4. package/dist/agent/DidAuthSiopOpAuthenticator.js.map +1 -0
  5. package/dist/index.d.ts +8 -555
  6. package/dist/index.d.ts.map +1 -0
  7. package/dist/index.js +31 -2420
  8. package/dist/index.js.map +1 -1
  9. package/dist/link-handler/index.d.ts +22 -0
  10. package/dist/link-handler/index.d.ts.map +1 -0
  11. package/dist/link-handler/index.js +57 -0
  12. package/dist/link-handler/index.js.map +1 -0
  13. package/dist/localization/Localization.d.ts +9 -0
  14. package/dist/localization/Localization.d.ts.map +1 -0
  15. package/dist/localization/Localization.js +46 -0
  16. package/dist/localization/Localization.js.map +1 -0
  17. package/dist/localization/translations/en.json +9 -0
  18. package/dist/localization/translations/nl.json +8 -0
  19. package/dist/machine/CallbackStateListener.d.ts +3 -0
  20. package/dist/machine/CallbackStateListener.d.ts.map +1 -0
  21. package/dist/machine/CallbackStateListener.js +48 -0
  22. package/dist/machine/CallbackStateListener.js.map +1 -0
  23. package/dist/machine/Siopv2Machine.d.ts +8 -0
  24. package/dist/machine/Siopv2Machine.d.ts.map +1 -0
  25. package/dist/machine/Siopv2Machine.js +364 -0
  26. package/dist/machine/Siopv2Machine.js.map +1 -0
  27. package/dist/services/IdentifierService.d.ts +3 -0
  28. package/dist/services/IdentifierService.d.ts.map +1 -0
  29. package/dist/services/IdentifierService.js +28 -0
  30. package/dist/services/IdentifierService.js.map +1 -0
  31. package/dist/services/Siopv2MachineService.d.ts +18 -0
  32. package/dist/services/Siopv2MachineService.d.ts.map +1 -0
  33. package/dist/services/Siopv2MachineService.js +299 -0
  34. package/dist/services/Siopv2MachineService.js.map +1 -0
  35. package/dist/session/OID4VP.d.ts +72 -0
  36. package/dist/session/OID4VP.d.ts.map +1 -0
  37. package/dist/session/OID4VP.js +224 -0
  38. package/dist/session/OID4VP.js.map +1 -0
  39. package/dist/session/OpSession.d.ts +39 -0
  40. package/dist/session/OpSession.d.ts.map +1 -0
  41. package/dist/session/OpSession.js +365 -0
  42. package/dist/session/OpSession.js.map +1 -0
  43. package/dist/session/functions.d.ts +37 -0
  44. package/dist/session/functions.d.ts.map +1 -0
  45. package/dist/session/functions.js +163 -0
  46. package/dist/session/functions.js.map +1 -0
  47. package/dist/session/index.d.ts +4 -0
  48. package/dist/session/index.d.ts.map +1 -0
  49. package/dist/session/index.js +20 -0
  50. package/dist/session/index.js.map +1 -0
  51. package/dist/types/IDidAuthSiopOpAuthenticator.d.ts +120 -0
  52. package/dist/types/IDidAuthSiopOpAuthenticator.d.ts.map +1 -0
  53. package/dist/types/IDidAuthSiopOpAuthenticator.js +10 -0
  54. package/dist/types/IDidAuthSiopOpAuthenticator.js.map +1 -0
  55. package/dist/types/error/index.d.ts +8 -0
  56. package/dist/types/error/index.d.ts.map +1 -0
  57. package/dist/types/error/index.js +3 -0
  58. package/dist/types/error/index.js.map +1 -0
  59. package/dist/types/identifier/index.d.ts +53 -0
  60. package/dist/types/identifier/index.d.ts.map +1 -0
  61. package/dist/types/identifier/index.js +5 -0
  62. package/dist/types/identifier/index.js.map +1 -0
  63. package/dist/types/index.d.ts +6 -0
  64. package/dist/types/index.d.ts.map +1 -0
  65. package/dist/types/index.js +22 -0
  66. package/dist/types/index.js.map +1 -0
  67. package/dist/types/machine/index.d.ts +124 -0
  68. package/dist/types/machine/index.d.ts.map +1 -0
  69. package/dist/types/machine/index.js +57 -0
  70. package/dist/types/machine/index.js.map +1 -0
  71. package/dist/types/siop-service/index.d.ts +80 -0
  72. package/dist/types/siop-service/index.d.ts.map +1 -0
  73. package/dist/types/siop-service/index.js +14 -0
  74. package/dist/types/siop-service/index.js.map +1 -0
  75. package/dist/utils/CredentialUtils.d.ts +23 -0
  76. package/dist/utils/CredentialUtils.d.ts.map +1 -0
  77. package/dist/utils/CredentialUtils.js +65 -0
  78. package/dist/utils/CredentialUtils.js.map +1 -0
  79. package/dist/utils/dcql.d.ts +5 -0
  80. package/dist/utils/dcql.d.ts.map +1 -0
  81. package/dist/utils/dcql.js +37 -0
  82. package/dist/utils/dcql.js.map +1 -0
  83. package/package.json +30 -40
  84. package/src/agent/DidAuthSiopOpAuthenticator.ts +14 -13
  85. package/src/session/OpSession.ts +13 -13
  86. package/dist/index.cjs +0 -2451
  87. package/dist/index.cjs.map +0 -1
  88. package/dist/index.d.cts +0 -559
@@ -0,0 +1,36 @@
1
+ import { IAgentPlugin } from '@veramo/core';
2
+ import { DidAuthSiopOpAuthenticatorOptions, RequiredContext } from '../index';
3
+ import { IDidAuthSiopOpAuthenticator } from '../types';
4
+ export declare const didAuthSiopOpAuthenticatorMethods: Array<string>;
5
+ export declare class DidAuthSiopOpAuthenticator implements IAgentPlugin {
6
+ readonly schema: any;
7
+ readonly methods: IDidAuthSiopOpAuthenticator;
8
+ private readonly sessions;
9
+ private readonly customApprovals;
10
+ private readonly presentationSignCallback?;
11
+ private readonly onContactIdentityCreated?;
12
+ private readonly onIdentifierCreated?;
13
+ private readonly eventEmitter?;
14
+ private readonly hasher?;
15
+ constructor(options?: DidAuthSiopOpAuthenticatorOptions);
16
+ onEvent(event: any, context: RequiredContext): Promise<void>;
17
+ private siopGetOPSession;
18
+ private siopRegisterOPSession;
19
+ private siopRemoveOPSession;
20
+ private siopRegisterOPCustomApproval;
21
+ private siopRemoveOPCustomApproval;
22
+ private siopGetMachineInterpreter;
23
+ private siopCreateConfig;
24
+ private siopGetSiopRequest;
25
+ private determineCorrelationId;
26
+ private siopRetrieveContact;
27
+ private siopAddContactIdentity;
28
+ private siopSendResponse;
29
+ private hasMDocCredentials;
30
+ private isMDocCredential;
31
+ private hasSdJwtCredentials;
32
+ private isSdJwtCredential;
33
+ private retrieveEncodedCredential;
34
+ private siopGetSelectableCredentials;
35
+ }
36
+ //# sourceMappingURL=DidAuthSiopOpAuthenticator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DidAuthSiopOpAuthenticator.d.ts","sourceRoot":"","sources":["../../src/agent/DidAuthSiopOpAuthenticator.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAE3C,OAAO,EACL,iCAAiC,EAKjC,eAAe,EAKhB,MAAM,UAAU,CAAA;AAQjB,OAAO,EACL,2BAA2B,EAM5B,MAAM,UAAU,CAAA;AAqBjB,eAAO,MAAM,iCAAiC,EAAE,KAAK,CAAC,MAAM,CAW3D,CAAA;AAED,qBAAa,0BAA2B,YAAW,YAAY;IAC7D,QAAQ,CAAC,MAAM,MAAqC;IACpD,QAAQ,CAAC,OAAO,EAAE,2BAA2B,CAc5C;IAED,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAwB;IACjD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkH;IAClJ,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAA0B;IACpE,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAuD;IACjG,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAkD;IACvF,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAc;IAC5C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAY;gBAExB,OAAO,CAAC,EAAE,iCAAiC;IAW1C,OAAO,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;YAa3D,gBAAgB;YAShB,qBAAqB;YAcrB,mBAAmB;YAInB,4BAA4B;YAQ5B,0BAA0B;YAI1B,yBAAyB;YAyBzB,gBAAgB;YAehB,kBAAkB;YAqDlB,sBAAsB;YAsBtB,mBAAmB;YAuBnB,sBAAsB;YAuCtB,gBAAgB;IA+G9B,OAAO,CAAC,kBAAkB,CAEzB;IAED,OAAO,CAAC,gBAAgB,CAKvB;IAED,OAAO,CAAC,mBAAmB,CAE1B;IAED,OAAO,CAAC,iBAAiB,CAIxB;IAED,OAAO,CAAC,yBAAyB,CAOhC;YAEa,4BAA4B;CAgB3C"}
@@ -0,0 +1,392 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.DidAuthSiopOpAuthenticator = exports.didAuthSiopOpAuthenticatorMethods = void 0;
13
+ const did_auth_siop_1 = require("@sphereon/did-auth-siop");
14
+ const ssi_sdk_data_store_1 = require("@sphereon/ssi-sdk.data-store");
15
+ const ssi_types_1 = require("@sphereon/ssi-types");
16
+ const uuid_1 = require("uuid");
17
+ const index_1 = require("../index");
18
+ const Siopv2Machine_1 = require("../machine/Siopv2Machine");
19
+ const Siopv2MachineService_1 = require("../services/Siopv2MachineService");
20
+ const session_1 = require("../session");
21
+ const pex_1 = require("@sphereon/pex");
22
+ const utils_1 = require("@veramo/utils");
23
+ const types_1 = require("../types");
24
+ const dcql_1 = require("dcql");
25
+ const logger = ssi_types_1.Loggers.DEFAULT.options(index_1.LOGGER_NAMESPACE, {}).get(index_1.LOGGER_NAMESPACE);
26
+ // Exposing the methods here for any REST implementation
27
+ exports.didAuthSiopOpAuthenticatorMethods = [
28
+ 'cmGetContacts',
29
+ 'cmGetContact',
30
+ 'cmAddContact',
31
+ 'cmAddIdentity',
32
+ 'didManagerFind',
33
+ 'didManagerGet',
34
+ 'keyManagerSign',
35
+ 'didManagerGetProviders',
36
+ 'dataStoreORMGetVerifiableCredentials',
37
+ 'createVerifiablePresentation',
38
+ ];
39
+ class DidAuthSiopOpAuthenticator {
40
+ constructor(options) {
41
+ this.schema = index_1.schema.IDidAuthSiopOpAuthenticator;
42
+ this.methods = {
43
+ siopGetOPSession: this.siopGetOPSession.bind(this),
44
+ siopRegisterOPSession: this.siopRegisterOPSession.bind(this),
45
+ siopRemoveOPSession: this.siopRemoveOPSession.bind(this),
46
+ siopRegisterOPCustomApproval: this.siopRegisterOPCustomApproval.bind(this),
47
+ siopRemoveOPCustomApproval: this.siopRemoveOPCustomApproval.bind(this),
48
+ siopGetMachineInterpreter: this.siopGetMachineInterpreter.bind(this),
49
+ siopCreateConfig: this.siopCreateConfig.bind(this),
50
+ siopGetSiopRequest: this.siopGetSiopRequest.bind(this),
51
+ siopRetrieveContact: this.siopRetrieveContact.bind(this),
52
+ siopAddIdentity: this.siopAddContactIdentity.bind(this),
53
+ siopSendResponse: this.siopSendResponse.bind(this),
54
+ siopGetSelectableCredentials: this.siopGetSelectableCredentials.bind(this),
55
+ };
56
+ this.hasMDocCredentials = (credentials) => {
57
+ return credentials.some(this.isMDocCredential);
58
+ };
59
+ this.isMDocCredential = (credential) => {
60
+ return (credential.digitalCredential.documentFormat === ssi_sdk_data_store_1.CredentialDocumentFormat.MSO_MDOC &&
61
+ credential.digitalCredential.documentType === ssi_sdk_data_store_1.DocumentType.VC);
62
+ };
63
+ this.hasSdJwtCredentials = (credentials) => {
64
+ return credentials.some(this.isSdJwtCredential);
65
+ };
66
+ this.isSdJwtCredential = (credential) => {
67
+ return (credential.digitalCredential.documentFormat === ssi_sdk_data_store_1.CredentialDocumentFormat.SD_JWT && credential.digitalCredential.documentType === ssi_sdk_data_store_1.DocumentType.VC);
68
+ };
69
+ this.retrieveEncodedCredential = (credential) => {
70
+ var _a, _b;
71
+ return credential.originalVerifiableCredential !== undefined &&
72
+ credential.originalVerifiableCredential !== null &&
73
+ ((_a = credential === null || credential === void 0 ? void 0 : credential.originalVerifiableCredential) === null || _a === void 0 ? void 0 : _a.compactSdJwtVc) !== undefined &&
74
+ ((_b = credential === null || credential === void 0 ? void 0 : credential.originalVerifiableCredential) === null || _b === void 0 ? void 0 : _b.compactSdJwtVc) !== null
75
+ ? credential.originalVerifiableCredential.compactSdJwtVc
76
+ : credential.originalVerifiableCredential;
77
+ };
78
+ const { onContactIdentityCreated, onIdentifierCreated, hasher, customApprovals = {}, presentationSignCallback } = Object.assign({}, options);
79
+ this.hasher = hasher;
80
+ this.onContactIdentityCreated = onContactIdentityCreated;
81
+ this.onIdentifierCreated = onIdentifierCreated;
82
+ this.presentationSignCallback = presentationSignCallback;
83
+ this.sessions = new Map();
84
+ this.customApprovals = customApprovals;
85
+ }
86
+ onEvent(event, context) {
87
+ return __awaiter(this, void 0, void 0, function* () {
88
+ var _a, _b;
89
+ switch (event.type) {
90
+ case types_1.Siopv2HolderEvent.CONTACT_IDENTITY_CREATED:
91
+ (_a = this.onContactIdentityCreated) === null || _a === void 0 ? void 0 : _a.call(this, event.data);
92
+ break;
93
+ case types_1.Siopv2HolderEvent.IDENTIFIER_CREATED:
94
+ (_b = this.onIdentifierCreated) === null || _b === void 0 ? void 0 : _b.call(this, event.data);
95
+ break;
96
+ default:
97
+ return Promise.reject(Error(`Event type ${event.type} not supported`));
98
+ }
99
+ });
100
+ }
101
+ siopGetOPSession(args, context) {
102
+ return __awaiter(this, void 0, void 0, function* () {
103
+ // TODO add cleaning up sessions https://sphereon.atlassian.net/browse/MYC-143
104
+ if (!this.sessions.has(args.sessionId)) {
105
+ throw Error(`No session found for id: ${args.sessionId}`);
106
+ }
107
+ return this.sessions.get(args.sessionId);
108
+ });
109
+ }
110
+ siopRegisterOPSession(args, context) {
111
+ return __awaiter(this, void 0, void 0, function* () {
112
+ var _a;
113
+ const sessionId = args.sessionId || (0, uuid_1.v4)();
114
+ if (this.sessions.has(sessionId)) {
115
+ return Promise.reject(new Error(`Session with id: ${args.sessionId} already present`));
116
+ }
117
+ const opts = Object.assign(Object.assign({}, args), { sessionId, context });
118
+ if (!((_a = opts.op) === null || _a === void 0 ? void 0 : _a.presentationSignCallback)) {
119
+ opts.op = Object.assign(Object.assign({}, opts.op), { presentationSignCallback: this.presentationSignCallback });
120
+ }
121
+ const session = yield session_1.OpSession.init(opts);
122
+ this.sessions.set(sessionId, session);
123
+ return session;
124
+ });
125
+ }
126
+ siopRemoveOPSession(args, context) {
127
+ return __awaiter(this, void 0, void 0, function* () {
128
+ return this.sessions.delete(args.sessionId);
129
+ });
130
+ }
131
+ siopRegisterOPCustomApproval(args, context) {
132
+ return __awaiter(this, void 0, void 0, function* () {
133
+ if (this.customApprovals[args.key] !== undefined) {
134
+ return Promise.reject(new Error(`Custom approval with key: ${args.key} already present`));
135
+ }
136
+ this.customApprovals[args.key] = args.customApproval;
137
+ });
138
+ }
139
+ siopRemoveOPCustomApproval(args, context) {
140
+ return __awaiter(this, void 0, void 0, function* () {
141
+ return delete this.customApprovals[args.key];
142
+ });
143
+ }
144
+ siopGetMachineInterpreter(opts, context) {
145
+ return __awaiter(this, void 0, void 0, function* () {
146
+ const { stateNavigationListener, url } = opts;
147
+ const services = Object.assign({ createConfig: (args) => this.siopCreateConfig(args), getSiopRequest: (args) => this.siopGetSiopRequest(args, context), getSelectableCredentials: (args) => this.siopGetSelectableCredentials(args, context), retrieveContact: (args) => this.siopRetrieveContact(args, context), addContactIdentity: (args) => this.siopAddContactIdentity(args, context), sendResponse: (args) => this.siopSendResponse(args, context) }, opts === null || opts === void 0 ? void 0 : opts.services);
148
+ const siopv2MachineOpts = Object.assign(Object.assign({}, opts), { url,
149
+ stateNavigationListener, services: Object.assign(Object.assign({}, services), opts.services) });
150
+ return Siopv2Machine_1.Siopv2Machine.newInstance(siopv2MachineOpts);
151
+ });
152
+ }
153
+ siopCreateConfig(context) {
154
+ return __awaiter(this, void 0, void 0, function* () {
155
+ const { url } = context;
156
+ if (!url) {
157
+ return Promise.reject(Error('Missing request uri in context'));
158
+ }
159
+ return {
160
+ id: (0, uuid_1.v4)(),
161
+ // FIXME: Update these values in SSI-SDK. Only the URI (not a redirectURI) would be available at this point
162
+ sessionId: (0, uuid_1.v4)(),
163
+ redirectUrl: url,
164
+ };
165
+ });
166
+ }
167
+ siopGetSiopRequest(args, context) {
168
+ return __awaiter(this, void 0, void 0, function* () {
169
+ var _a, _b, _c, _d, _e;
170
+ const { agent } = context;
171
+ const { didAuthConfig } = args;
172
+ if (args.url === undefined) {
173
+ return Promise.reject(Error('Missing request uri in context'));
174
+ }
175
+ if (didAuthConfig === undefined) {
176
+ return Promise.reject(Error('Missing config in context'));
177
+ }
178
+ const { sessionId, redirectUrl } = didAuthConfig;
179
+ const session = yield agent.siopGetOPSession({ sessionId }).catch(() => __awaiter(this, void 0, void 0, function* () {
180
+ return yield agent.siopRegisterOPSession({
181
+ requestJwtOrUri: redirectUrl,
182
+ sessionId,
183
+ op: { eventEmitter: this.eventEmitter, hasher: this.hasher },
184
+ });
185
+ }));
186
+ logger.debug(`session: ${JSON.stringify(session.id, null, 2)}`);
187
+ const verifiedAuthorizationRequest = yield session.getAuthorizationRequest();
188
+ // logger.trace('Request: ' + JSON.stringify(verifiedAuthorizationRequest, null, 2))
189
+ const clientName = (_a = verifiedAuthorizationRequest.registrationMetadataPayload) === null || _a === void 0 ? void 0 : _a.client_name;
190
+ const url = (_b = verifiedAuthorizationRequest.responseURI) !== null && _b !== void 0 ? _b : (args.url.includes('request_uri')
191
+ ? decodeURIComponent(args.url.split('?request_uri=')[1].trim())
192
+ : ((_c = verifiedAuthorizationRequest.issuer) !== null && _c !== void 0 ? _c : (_d = verifiedAuthorizationRequest.registrationMetadataPayload) === null || _d === void 0 ? void 0 : _d.client_id));
193
+ const uri = url.includes('://') ? new URL(url) : undefined;
194
+ const correlationId = (_e = uri === null || uri === void 0 ? void 0 : uri.hostname) !== null && _e !== void 0 ? _e : (yield this.determineCorrelationId(uri, verifiedAuthorizationRequest, clientName, context));
195
+ const clientId = yield verifiedAuthorizationRequest.authorizationRequest.getMergedProperty('client_id');
196
+ return {
197
+ issuer: verifiedAuthorizationRequest.issuer,
198
+ correlationId,
199
+ registrationMetadataPayload: verifiedAuthorizationRequest.registrationMetadataPayload,
200
+ uri,
201
+ name: clientName,
202
+ clientId,
203
+ presentationDefinitions: (yield verifiedAuthorizationRequest.authorizationRequest.containsResponseType('vp_token')) ||
204
+ (verifiedAuthorizationRequest.versions.every((version) => version <= did_auth_siop_1.SupportedVersion.JWT_VC_PRESENTATION_PROFILE_v1) &&
205
+ verifiedAuthorizationRequest.presentationDefinitions &&
206
+ verifiedAuthorizationRequest.presentationDefinitions.length > 0)
207
+ ? verifiedAuthorizationRequest.presentationDefinitions
208
+ : undefined,
209
+ dcqlQuery: verifiedAuthorizationRequest.dcqlQuery,
210
+ };
211
+ });
212
+ }
213
+ determineCorrelationId(uri, verifiedAuthorizationRequest, clientName, context) {
214
+ return __awaiter(this, void 0, void 0, function* () {
215
+ var _a, _b;
216
+ if (uri) {
217
+ return (_a = (yield (0, Siopv2MachineService_1.translateCorrelationIdToName)(uri.hostname, context))) !== null && _a !== void 0 ? _a : uri.hostname;
218
+ }
219
+ if (verifiedAuthorizationRequest.issuer) {
220
+ const issuerHostname = verifiedAuthorizationRequest.issuer.split('://')[1];
221
+ return (_b = (yield (0, Siopv2MachineService_1.translateCorrelationIdToName)(issuerHostname, context))) !== null && _b !== void 0 ? _b : issuerHostname;
222
+ }
223
+ if (clientName) {
224
+ return clientName;
225
+ }
226
+ throw new Error("Can't determine correlationId from request");
227
+ });
228
+ }
229
+ siopRetrieveContact(args, context) {
230
+ return __awaiter(this, void 0, void 0, function* () {
231
+ const { authorizationRequestData } = args;
232
+ const { agent } = context;
233
+ if (authorizationRequestData === undefined) {
234
+ return Promise.reject(Error('Missing authorization request data in context'));
235
+ }
236
+ return agent
237
+ .cmGetContacts({
238
+ filter: [
239
+ {
240
+ identities: {
241
+ identifier: {
242
+ correlationId: authorizationRequestData.correlationId,
243
+ },
244
+ },
245
+ },
246
+ ],
247
+ })
248
+ .then((contacts) => (contacts.length === 1 ? contacts[0] : undefined));
249
+ });
250
+ }
251
+ siopAddContactIdentity(args, context) {
252
+ return __awaiter(this, void 0, void 0, function* () {
253
+ var _a;
254
+ const { agent } = context;
255
+ const { contact, authorizationRequestData } = args;
256
+ if (contact === undefined) {
257
+ return Promise.reject(Error('Missing contact in context'));
258
+ }
259
+ if (authorizationRequestData === undefined) {
260
+ return Promise.reject(Error('Missing authorization request data in context'));
261
+ }
262
+ // TODO: Makes sense to move these types of common queries/retrievals to the SIOP auth request object
263
+ const clientId = (_a = authorizationRequestData.clientId) !== null && _a !== void 0 ? _a : authorizationRequestData.issuer;
264
+ const correlationId = clientId
265
+ ? clientId.startsWith('did:')
266
+ ? clientId
267
+ : `${new URL(clientId).protocol}//${new URL(clientId).hostname}`
268
+ : undefined;
269
+ if (correlationId) {
270
+ const identity = {
271
+ alias: correlationId,
272
+ origin: ssi_sdk_data_store_1.IdentityOrigin.EXTERNAL,
273
+ roles: [ssi_sdk_data_store_1.CredentialRole.ISSUER],
274
+ identifier: {
275
+ type: correlationId.startsWith('did:') ? ssi_sdk_data_store_1.CorrelationIdentifierType.DID : ssi_sdk_data_store_1.CorrelationIdentifierType.URL,
276
+ correlationId,
277
+ },
278
+ };
279
+ const addedIdentity = yield agent.cmAddIdentity({ contactId: contact.id, identity });
280
+ yield context.agent.emit(types_1.Siopv2HolderEvent.CONTACT_IDENTITY_CREATED, {
281
+ contactId: contact.id,
282
+ identity: addedIdentity,
283
+ });
284
+ logger.info(`Contact identity created: ${JSON.stringify(addedIdentity)}`);
285
+ }
286
+ });
287
+ }
288
+ siopSendResponse(args, context) {
289
+ return __awaiter(this, void 0, void 0, function* () {
290
+ var _a;
291
+ const { didAuthConfig, authorizationRequestData, selectedCredentials, isFirstParty } = args;
292
+ if (didAuthConfig === undefined) {
293
+ return Promise.reject(Error('Missing config in context'));
294
+ }
295
+ if (authorizationRequestData === undefined) {
296
+ return Promise.reject(Error('Missing authorization request data in context'));
297
+ }
298
+ const pex = new pex_1.PEX({ hasher: this.hasher });
299
+ const verifiableCredentialsWithDefinition = [];
300
+ const dcqlCredentialsWithCredentials = new Map();
301
+ if (Array.isArray(authorizationRequestData.presentationDefinitions) && (authorizationRequestData === null || authorizationRequestData === void 0 ? void 0 : authorizationRequestData.presentationDefinitions.length) > 0) {
302
+ try {
303
+ (_a = authorizationRequestData.presentationDefinitions) === null || _a === void 0 ? void 0 : _a.forEach((presentationDefinition) => {
304
+ const { areRequiredCredentialsPresent, verifiableCredential: verifiableCredentials } = pex.selectFrom(presentationDefinition.definition, selectedCredentials.map((udc) => udc.originalVerifiableCredential));
305
+ if (areRequiredCredentialsPresent !== pex_1.Status.ERROR && verifiableCredentials) {
306
+ let uniqueDigitalCredentials = [];
307
+ uniqueDigitalCredentials = verifiableCredentials.map((vc) => {
308
+ // @ts-ignore FIXME Funke
309
+ const hash = typeof vc === 'string' ? (0, utils_1.computeEntryHash)(vc.split('~'[0])) : (0, utils_1.computeEntryHash)(vc);
310
+ const udc = selectedCredentials.find((udc) => udc.hash == hash || udc.originalVerifiableCredential == vc);
311
+ if (!udc) {
312
+ throw Error(`UniqueDigitalCredential could not be found in store. Either the credential is not present in the store or the hash is not correct.`);
313
+ }
314
+ return udc;
315
+ });
316
+ verifiableCredentialsWithDefinition.push({
317
+ definition: presentationDefinition,
318
+ credentials: uniqueDigitalCredentials,
319
+ });
320
+ }
321
+ });
322
+ }
323
+ catch (e) {
324
+ return Promise.reject(e);
325
+ }
326
+ if (verifiableCredentialsWithDefinition.length === 0) {
327
+ return Promise.reject(Error('None of the selected credentials match any of the presentation definitions.'));
328
+ }
329
+ }
330
+ else if (authorizationRequestData.dcqlQuery) {
331
+ //TODO Only SD-JWT and MSO MDOC are supported at the moment
332
+ if (this.hasMDocCredentials(selectedCredentials) || this.hasSdJwtCredentials(selectedCredentials)) {
333
+ try {
334
+ selectedCredentials.forEach((vc) => {
335
+ if (this.isSdJwtCredential(vc)) {
336
+ const payload = vc.originalVerifiableCredential.decodedPayload;
337
+ const result = {
338
+ claims: payload,
339
+ vct: payload.vct,
340
+ credential_format: 'vc+sd-jwt',
341
+ };
342
+ dcqlCredentialsWithCredentials.set(result, vc);
343
+ //FIXME MDoc namespaces are incompatible: array of strings vs complex object - https://sphereon.atlassian.net/browse/SPRIND-143
344
+ }
345
+ else {
346
+ throw Error(`Invalid credential format: ${vc.digitalCredential.documentFormat}`);
347
+ }
348
+ });
349
+ }
350
+ catch (e) {
351
+ return Promise.reject(e);
352
+ }
353
+ const dcqlPresentationRecord = {};
354
+ const queryResult = dcql_1.DcqlQuery.query(authorizationRequestData.dcqlQuery, Array.from(dcqlCredentialsWithCredentials.keys()));
355
+ for (const [key, value] of Object.entries(queryResult.credential_matches)) {
356
+ if (value.success) {
357
+ dcqlPresentationRecord[key] = this.retrieveEncodedCredential(dcqlCredentialsWithCredentials.get(value.output));
358
+ }
359
+ }
360
+ }
361
+ }
362
+ const response = yield (0, Siopv2MachineService_1.siopSendAuthorizationResponse)(ssi_sdk_data_store_1.ConnectionType.SIOPv2_OpenID4VP, Object.assign(Object.assign(Object.assign({ sessionId: didAuthConfig.sessionId }, (args.idOpts && { idOpts: args.idOpts })), (authorizationRequestData.presentationDefinitions !== undefined && { verifiableCredentialsWithDefinition })), { isFirstParty, hasher: this.hasher }), context);
363
+ const contentType = response.headers.get('content-type') || '';
364
+ let responseBody = null;
365
+ const text = yield response.text();
366
+ if (text) {
367
+ responseBody = contentType.includes('application/json') || text.startsWith('{') ? JSON.parse(text) : text;
368
+ }
369
+ return {
370
+ body: responseBody,
371
+ url: response === null || response === void 0 ? void 0 : response.url,
372
+ queryParams: (0, did_auth_siop_1.decodeUriAsJson)(response === null || response === void 0 ? void 0 : response.url),
373
+ };
374
+ });
375
+ }
376
+ siopGetSelectableCredentials(args, context) {
377
+ return __awaiter(this, void 0, void 0, function* () {
378
+ const { authorizationRequestData } = args;
379
+ if (!authorizationRequestData ||
380
+ !authorizationRequestData.presentationDefinitions ||
381
+ authorizationRequestData.presentationDefinitions.length === 0) {
382
+ return Promise.reject(Error('Missing required fields in arguments or context'));
383
+ }
384
+ if (authorizationRequestData.presentationDefinitions.length > 1) {
385
+ return Promise.reject(Error('Multiple presentation definitions present'));
386
+ }
387
+ return (0, Siopv2MachineService_1.getSelectableCredentials)(authorizationRequestData.presentationDefinitions[0].definition, context);
388
+ });
389
+ }
390
+ }
391
+ exports.DidAuthSiopOpAuthenticator = DidAuthSiopOpAuthenticator;
392
+ //# sourceMappingURL=DidAuthSiopOpAuthenticator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DidAuthSiopOpAuthenticator.js","sourceRoot":"","sources":["../../src/agent/DidAuthSiopOpAuthenticator.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2DAAmI;AACnI,qEAUqC;AACrC,mDAA2F;AAE3F,+BAAmC;AACnC,oCAWiB;AACjB,4DAAwD;AACxD,2EAAwI;AACxI,wCAAsC;AACtC,uCAA2C;AAC3C,yCAAgD;AAYhD,oCAaiB;AACjB,+BAAyF;AAEzF,MAAM,MAAM,GAAG,mBAAO,CAAC,OAAO,CAAC,OAAO,CAAC,wBAAgB,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,wBAAgB,CAAC,CAAA;AAElF,wDAAwD;AAC3C,QAAA,iCAAiC,GAAkB;IAC9D,eAAe;IACf,cAAc;IACd,cAAc;IACd,eAAe;IACf,gBAAgB;IAChB,eAAe;IACf,gBAAgB;IAChB,wBAAwB;IACxB,sCAAsC;IACtC,8BAA8B;CAC/B,CAAA;AAED,MAAa,0BAA0B;IA0BrC,YAAY,OAA2C;QAzB9C,WAAM,GAAG,cAAM,CAAC,2BAA2B,CAAA;QAC3C,YAAO,GAAgC;YAC9C,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;YAClD,qBAAqB,EAAE,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC;YAC5D,mBAAmB,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC;YACxD,4BAA4B,EAAE,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC;YAC1E,0BAA0B,EAAE,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC;YAEtE,yBAAyB,EAAE,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC;YACpE,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;YAClD,kBAAkB,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;YACtD,mBAAmB,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC;YACxD,eAAe,EAAE,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC;YACvD,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;YAClD,4BAA4B,EAAE,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC;SAC3E,CAAA;QAyWO,uBAAkB,GAAG,CAAC,WAAsC,EAAW,EAAE;YAC/E,OAAO,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;QAChD,CAAC,CAAA;QAEO,qBAAgB,GAAG,CAAC,UAAmC,EAAE,EAAE;YACjE,OAAO,CACL,UAAU,CAAC,iBAAiB,CAAC,cAAc,KAAK,6CAAwB,CAAC,QAAQ;gBACjF,UAAU,CAAC,iBAAiB,CAAC,YAAY,KAAK,iCAAY,CAAC,EAAE,CAC9D,CAAA;QACH,CAAC,CAAA;QAEO,wBAAmB,GAAG,CAAC,WAAsC,EAAW,EAAE;YAChF,OAAO,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;QACjD,CAAC,CAAA;QAEO,sBAAiB,GAAG,CAAC,UAAmC,EAAE,EAAE;YAClE,OAAO,CACL,UAAU,CAAC,iBAAiB,CAAC,cAAc,KAAK,6CAAwB,CAAC,MAAM,IAAI,UAAU,CAAC,iBAAiB,CAAC,YAAY,KAAK,iCAAY,CAAC,EAAE,CACjJ,CAAA;QACH,CAAC,CAAA;QAEO,8BAAyB,GAAG,CAAC,UAAmC,EAAE,EAAE;;YAC1E,OAAO,UAAU,CAAC,4BAA4B,KAAK,SAAS;gBAC1D,UAAU,CAAC,4BAA4B,KAAK,IAAI;gBAChD,CAAA,MAAC,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,4BAAiE,0CAAE,cAAc,MAAK,SAAS;gBAC5G,CAAA,MAAC,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,4BAAiE,0CAAE,cAAc,MAAK,IAAI;gBACvG,CAAC,CAAE,UAAU,CAAC,4BAAiE,CAAC,cAAc;gBAC9F,CAAC,CAAC,UAAU,CAAC,4BAA4B,CAAA;QAC7C,CAAC,CAAA;QA1XC,MAAM,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,EAAE,eAAe,GAAG,EAAE,EAAE,wBAAwB,EAAE,qBAAQ,OAAO,CAAE,CAAA;QAEhI,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,wBAAwB,GAAG,wBAAwB,CAAA;QACxD,IAAI,CAAC,mBAAmB,GAAG,mBAAmB,CAAA;QAC9C,IAAI,CAAC,wBAAwB,GAAG,wBAAwB,CAAA;QACxD,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,EAAqB,CAAA;QAC5C,IAAI,CAAC,eAAe,GAAG,eAAe,CAAA;IACxC,CAAC;IAEY,OAAO,CAAC,KAAU,EAAE,OAAwB;;;YACvD,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;gBACnB,KAAK,yBAAiB,CAAC,wBAAwB;oBAC7C,MAAA,IAAI,CAAC,wBAAwB,qDAAG,KAAK,CAAC,IAAI,CAAC,CAAA;oBAC3C,MAAK;gBACP,KAAK,yBAAiB,CAAC,kBAAkB;oBACvC,MAAA,IAAI,CAAC,mBAAmB,qDAAG,KAAK,CAAC,IAAI,CAAC,CAAA;oBACtC,MAAK;gBACP;oBACE,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,KAAK,CAAC,IAAI,gBAAgB,CAAC,CAAC,CAAA;YAC1E,CAAC;QACH,CAAC;KAAA;IAEa,gBAAgB,CAAC,IAAyB,EAAE,OAAyB;;YACjF,8EAA8E;YAC9E,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;gBACvC,MAAM,KAAK,CAAC,4BAA4B,IAAI,CAAC,SAAS,EAAE,CAAC,CAAA;YAC3D,CAAC;YAED,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAE,CAAA;QAC3C,CAAC;KAAA;IAEa,qBAAqB,CAAC,IAAqC,EAAE,OAAyB;;;YAClG,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,IAAA,SAAM,GAAE,CAAA;YAC5C,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;gBACjC,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,oBAAoB,IAAI,CAAC,SAAS,kBAAkB,CAAC,CAAC,CAAA;YACxF,CAAC;YACD,MAAM,IAAI,GAAG,gCAAK,IAAI,KAAE,SAAS,EAAE,OAAO,GAA8B,CAAA;YACxE,IAAI,CAAC,CAAA,MAAA,IAAI,CAAC,EAAE,0CAAE,wBAAwB,CAAA,EAAE,CAAC;gBACvC,IAAI,CAAC,EAAE,mCAAQ,IAAI,CAAC,EAAE,KAAE,wBAAwB,EAAE,IAAI,CAAC,wBAAwB,GAAE,CAAA;YACnF,CAAC;YACD,MAAM,OAAO,GAAG,MAAM,mBAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAC1C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;YACrC,OAAO,OAAO,CAAA;QAChB,CAAC;KAAA;IAEa,mBAAmB,CAAC,IAA4B,EAAE,OAAyB;;YACvF,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAC7C,CAAC;KAAA;IAEa,4BAA4B,CAAC,IAAwC,EAAE,OAAyB;;YAC5G,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE,CAAC;gBACjD,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,6BAA6B,IAAI,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAA;YAC3F,CAAC;YAED,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,cAAc,CAAA;QACtD,CAAC;KAAA;IAEa,0BAA0B,CAAC,IAAsC,EAAE,OAAyB;;YACxG,OAAO,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC9C,CAAC;KAAA;IAEa,yBAAyB,CAAC,IAA+B,EAAE,OAAwB;;YAC/F,MAAM,EAAE,uBAAuB,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA;YAC7C,MAAM,QAAQ,mBACZ,YAAY,EAAE,CAAC,IAAsB,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EACrE,cAAc,EAAE,CAAC,IAAwB,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,OAAO,CAAC,EACpF,wBAAwB,EAAE,CAAC,IAAkC,EAAE,EAAE,CAAC,IAAI,CAAC,4BAA4B,CAAC,IAAI,EAAE,OAAO,CAAC,EAClH,eAAe,EAAE,CAAC,IAAyB,EAAE,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,OAAO,CAAC,EACvF,kBAAkB,EAAE,CAAC,IAAqB,EAAE,EAAE,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,OAAO,CAAC,EACzF,YAAY,EAAE,CAAC,IAAsB,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,IAC3E,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,QAAQ,CAClB,CAAA;YAED,MAAM,iBAAiB,mCAClB,IAAI,KACP,GAAG;gBACH,uBAAuB,EACvB,QAAQ,kCACH,QAAQ,GACR,IAAI,CAAC,QAAQ,IAEnB,CAAA;YAED,OAAO,6BAAa,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAA;QACrD,CAAC;KAAA;IAEa,gBAAgB,CAAoC,OAAiB;;YACjF,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAA;YAEvB,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC,CAAA;YAChE,CAAC;YAED,OAAO;gBACL,EAAE,EAAE,IAAA,SAAM,GAAE;gBACZ,2GAA2G;gBAC3G,SAAS,EAAE,IAAA,SAAM,GAAE;gBACnB,WAAW,EAAE,GAAG;aACjB,CAAA;QACH,CAAC;KAAA;IAEa,kBAAkB,CAAC,IAAwB,EAAE,OAAwB;;;YACjF,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAA;YACzB,MAAM,EAAE,aAAa,EAAE,GAAG,IAAI,CAAA;YAE9B,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;gBAC3B,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC,CAAA;YAChE,CAAC;YAED,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;gBAChC,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC,CAAA;YAC3D,CAAC;YACD,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,aAAa,CAAA;YAEhD,MAAM,OAAO,GAAc,MAAM,KAAK,CAAC,gBAAgB,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,KAAK,CAC1E,GAAS,EAAE;gBACT,OAAA,MAAM,KAAK,CAAC,qBAAqB,CAAC;oBAChC,eAAe,EAAE,WAAW;oBAC5B,SAAS;oBACT,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;iBAC7D,CAAC,CAAA;cAAA,CACL,CAAA;YAED,MAAM,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAA;YAC/D,MAAM,4BAA4B,GAAG,MAAM,OAAO,CAAC,uBAAuB,EAAE,CAAA;YAC5E,oFAAoF;YACpF,MAAM,UAAU,GAAG,MAAA,4BAA4B,CAAC,2BAA2B,0CAAE,WAAW,CAAA;YACxF,MAAM,GAAG,GACP,MAAA,4BAA4B,CAAC,WAAW,mCACxC,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC;gBAC/B,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC/D,CAAC,CAAC,CAAC,MAAA,4BAA4B,CAAC,MAAM,mCAAI,MAAA,4BAA4B,CAAC,2BAA2B,0CAAE,SAAS,CAAC,CAAC,CAAA;YACnH,MAAM,GAAG,GAAoB,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;YAC3E,MAAM,aAAa,GAAW,MAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,QAAQ,mCAAI,CAAC,MAAM,IAAI,CAAC,sBAAsB,CAAC,GAAG,EAAE,4BAA4B,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CAAA;YAC1I,MAAM,QAAQ,GAAuB,MAAM,4BAA4B,CAAC,oBAAoB,CAAC,iBAAiB,CAAS,WAAW,CAAC,CAAA;YAEnI,OAAO;gBACL,MAAM,EAAE,4BAA4B,CAAC,MAAM;gBAC3C,aAAa;gBACb,2BAA2B,EAAE,4BAA4B,CAAC,2BAA2B;gBACrF,GAAG;gBACH,IAAI,EAAE,UAAU;gBAChB,QAAQ;gBACR,uBAAuB,EACrB,CAAC,MAAM,4BAA4B,CAAC,oBAAoB,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC;oBAC1F,CAAC,4BAA4B,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,IAAI,gCAAgB,CAAC,8BAA8B,CAAC;wBACnH,4BAA4B,CAAC,uBAAuB;wBACpD,4BAA4B,CAAC,uBAAuB,CAAC,MAAM,GAAG,CAAC,CAAC;oBAChE,CAAC,CAAC,4BAA4B,CAAC,uBAAuB;oBACtD,CAAC,CAAC,SAAS;gBACf,SAAS,EAAE,4BAA4B,CAAC,SAAS;aAClD,CAAA;QACH,CAAC;KAAA;IAEa,sBAAsB,CAClC,GAAoB,EACpB,4BAAiC,EACjC,UAA8B,EAC9B,OAAwB;;;YAExB,IAAI,GAAG,EAAE,CAAC;gBACR,OAAO,MAAA,CAAC,MAAM,IAAA,mDAA4B,EAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,mCAAI,GAAG,CAAC,QAAQ,CAAA;YACpF,CAAC;YAED,IAAI,4BAA4B,CAAC,MAAM,EAAE,CAAC;gBACxC,MAAM,cAAc,GAAG,4BAA4B,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;gBAC1E,OAAO,MAAA,CAAC,MAAM,IAAA,mDAA4B,EAAC,cAAc,EAAE,OAAO,CAAC,CAAC,mCAAI,cAAc,CAAA;YACxF,CAAC;YAED,IAAI,UAAU,EAAE,CAAC;gBACf,OAAO,UAAU,CAAA;YACnB,CAAC;YAED,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAA;QAC/D,CAAC;KAAA;IAEa,mBAAmB,CAAC,IAAyB,EAAE,OAAwB;;YACnF,MAAM,EAAE,wBAAwB,EAAE,GAAG,IAAI,CAAA;YACzC,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAA;YAEzB,IAAI,wBAAwB,KAAK,SAAS,EAAE,CAAC;gBAC3C,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC,CAAA;YAC/E,CAAC;YAED,OAAO,KAAK;iBACT,aAAa,CAAC;gBACb,MAAM,EAAE;oBACN;wBACE,UAAU,EAAE;4BACV,UAAU,EAAE;gCACV,aAAa,EAAE,wBAAwB,CAAC,aAAa;6BACtD;yBACF;qBACF;iBACF;aACF,CAAC;iBACD,IAAI,CAAC,CAAC,QAAsB,EAAqB,EAAE,CAAC,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAA;QAC3G,CAAC;KAAA;IAEa,sBAAsB,CAAC,IAAqB,EAAE,OAAwB;;;YAClF,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAA;YACzB,MAAM,EAAE,OAAO,EAAE,wBAAwB,EAAE,GAAG,IAAI,CAAA;YAElD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC1B,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC,CAAA;YAC5D,CAAC;YAED,IAAI,wBAAwB,KAAK,SAAS,EAAE,CAAC;gBAC3C,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC,CAAA;YAC/E,CAAC;YAED,qGAAqG;YACrG,MAAM,QAAQ,GAAuB,MAAA,wBAAwB,CAAC,QAAQ,mCAAI,wBAAwB,CAAC,MAAM,CAAA;YACzG,MAAM,aAAa,GAAuB,QAAQ;gBAChD,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC;oBAC3B,CAAC,CAAC,QAAQ;oBACV,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,QAAQ,KAAK,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE;gBAClE,CAAC,CAAC,SAAS,CAAA;YAEb,IAAI,aAAa,EAAE,CAAC;gBAClB,MAAM,QAAQ,GAAyB;oBACrC,KAAK,EAAE,aAAa;oBACpB,MAAM,EAAE,mCAAc,CAAC,QAAQ;oBAC/B,KAAK,EAAE,CAAC,mCAAc,CAAC,MAAM,CAAC;oBAC9B,UAAU,EAAE;wBACV,IAAI,EAAE,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,8CAAyB,CAAC,GAAG,CAAC,CAAC,CAAC,8CAAyB,CAAC,GAAG;wBACtG,aAAa;qBACd;iBACF,CAAA;gBACD,MAAM,aAAa,GAAa,MAAM,KAAK,CAAC,aAAa,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAA;gBAC9F,MAAM,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,yBAAiB,CAAC,wBAAwB,EAAE;oBACnE,SAAS,EAAE,OAAO,CAAC,EAAE;oBACrB,QAAQ,EAAE,aAAa;iBACxB,CAAC,CAAA;gBACF,MAAM,CAAC,IAAI,CAAC,6BAA6B,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,EAAE,CAAC,CAAA;YAC3E,CAAC;QACH,CAAC;KAAA;IAEa,gBAAgB,CAAC,IAAsB,EAAE,OAAwB;;;YAC7E,MAAM,EAAE,aAAa,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,YAAY,EAAE,GAAG,IAAI,CAAA;YAE3F,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;gBAChC,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC,CAAA;YAC3D,CAAC;YAED,IAAI,wBAAwB,KAAK,SAAS,EAAE,CAAC;gBAC3C,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC,CAAA;YAC/E,CAAC;YAED,MAAM,GAAG,GAAG,IAAI,SAAG,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAA;YAC5C,MAAM,mCAAmC,GAA+C,EAAE,CAAA;YAC1F,MAAM,8BAA8B,GAAiD,IAAI,GAAG,EAAE,CAAA;YAE9F,IAAI,KAAK,CAAC,OAAO,CAAC,wBAAwB,CAAC,uBAAuB,CAAC,IAAI,CAAA,wBAAwB,aAAxB,wBAAwB,uBAAxB,wBAAwB,CAAE,uBAAuB,CAAC,MAAM,IAAG,CAAC,EAAE,CAAC;gBACpI,IAAI,CAAC;oBACH,MAAA,wBAAwB,CAAC,uBAAuB,0CAAE,OAAO,CAAC,CAAC,sBAAsB,EAAE,EAAE;wBACnF,MAAM,EAAE,6BAA6B,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,GAAG,GAAG,CAAC,UAAU,CACnG,sBAAsB,CAAC,UAAU,EACjC,mBAAmB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,4BAA6B,CAAC,CACpE,CAAA;wBAED,IAAI,6BAA6B,KAAK,YAAM,CAAC,KAAK,IAAI,qBAAqB,EAAE,CAAC;4BAC5E,IAAI,wBAAwB,GAA8B,EAAE,CAAA;4BAC5D,wBAAwB,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;gCAC1D,yBAAyB;gCACzB,MAAM,IAAI,GAAG,OAAO,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAA,wBAAgB,EAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAA,wBAAgB,EAAC,EAAE,CAAC,CAAA;gCAC/F,MAAM,GAAG,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,IAAI,GAAG,CAAC,4BAA4B,IAAI,EAAE,CAAC,CAAA;gCAEzG,IAAI,CAAC,GAAG,EAAE,CAAC;oCACT,MAAM,KAAK,CACT,oIAAoI,CACrI,CAAA;gCACH,CAAC;gCACD,OAAO,GAAG,CAAA;4BACZ,CAAC,CAAC,CAAA;4BACF,mCAAmC,CAAC,IAAI,CAAC;gCACvC,UAAU,EAAE,sBAAsB;gCAClC,WAAW,EAAE,wBAAwB;6BACtC,CAAC,CAAA;wBACJ,CAAC;oBACH,CAAC,CAAC,CAAA;gBACJ,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;gBAC1B,CAAC;gBAED,IAAI,mCAAmC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACrD,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,6EAA6E,CAAC,CAAC,CAAA;gBAC7G,CAAC;YACH,CAAC;iBAAM,IAAI,wBAAwB,CAAC,SAAS,EAAE,CAAC;gBAC9C,2DAA2D;gBAC3D,IAAI,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,IAAI,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,EAAE,CAAC;oBAClG,IAAI,CAAC;wBACH,mBAAmB,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;4BACjC,IAAI,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,EAAE,CAAC;gCAC/B,MAAM,OAAO,GAAI,EAAE,CAAC,4BAAiE,CAAC,cAAc,CAAA;gCACpG,MAAM,MAAM,GAA0B;oCACpC,MAAM,EAAE,OAAgC;oCACxC,GAAG,EAAE,OAAO,CAAC,GAAG;oCAChB,iBAAiB,EAAE,WAAW;iCAC/B,CAAA;gCACD,8BAA8B,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;gCAC9C,+HAA+H;4BACjI,CAAC;iCAAM,CAAC;gCACN,MAAM,KAAK,CAAC,8BAA8B,EAAE,CAAC,iBAAiB,CAAC,cAAc,EAAE,CAAC,CAAA;4BAClF,CAAC;wBACH,CAAC,CAAC,CAAA;oBACJ,CAAC;oBAAC,OAAO,CAAC,EAAE,CAAC;wBACX,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;oBAC1B,CAAC;oBAED,MAAM,sBAAsB,GAA4B,EAAE,CAAA;oBAC1D,MAAM,WAAW,GAAG,gBAAS,CAAC,KAAK,CAAC,wBAAwB,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;oBAC1H,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,kBAAkB,CAAC,EAAE,CAAC;wBAC1E,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;4BAClB,sBAAsB,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,yBAAyB,CAAC,8BAA8B,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAE,CAErF,CAAA;wBAC3B,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,IAAA,oDAA6B,EAClD,mCAAc,CAAC,gBAAgB,8CAE7B,SAAS,EAAE,aAAa,CAAC,SAAS,IAC/B,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,GACxC,CAAC,wBAAwB,CAAC,uBAAuB,KAAK,SAAS,IAAI,EAAE,mCAAmC,EAAE,CAAC,KAC9G,YAAY,EACZ,MAAM,EAAE,IAAI,CAAC,MAAM,KAErB,OAAO,CACR,CAAA;YAED,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAA;YAC9D,IAAI,YAAY,GAAQ,IAAI,CAAA;YAE5B,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;YAClC,IAAI,IAAI,EAAE,CAAC;gBACT,YAAY,GAAG,WAAW,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;YAC3G,CAAC;YAED,OAAO;gBACL,IAAI,EAAE,YAAY;gBAClB,GAAG,EAAE,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,GAAG;gBAClB,WAAW,EAAE,IAAA,+BAAe,EAAC,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,GAAG,CAAC;aAC5C,CAAA;QACH,CAAC;KAAA;IAgCa,4BAA4B,CAAC,IAAkC,EAAE,OAAwB;;YACrG,MAAM,EAAE,wBAAwB,EAAE,GAAG,IAAI,CAAA;YAEzC,IACE,CAAC,wBAAwB;gBACzB,CAAC,wBAAwB,CAAC,uBAAuB;gBACjD,wBAAwB,CAAC,uBAAuB,CAAC,MAAM,KAAK,CAAC,EAC7D,CAAC;gBACD,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC,CAAA;YACjF,CAAC;YACD,IAAI,wBAAwB,CAAC,uBAAuB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChE,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC,CAAA;YAC3E,CAAC;YAED,OAAO,IAAA,+CAAwB,EAAC,wBAAwB,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;QAC1G,CAAC;KAAA;CACF;AAvaD,gEAuaC"}