@sphereon/ssi-sdk.siopv2-oid4vp-op-auth 0.34.1-feature.SSISDK.46.40 → 0.34.1-feature.SSISDK.50.98
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.cjs +598 -1120
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +709 -111
- package/dist/index.d.ts +709 -111
- package/dist/index.js +521 -1043
- package/dist/index.js.map +1 -1
- package/package.json +24 -25
- package/src/agent/DidAuthSiopOpAuthenticator.ts +9 -144
- package/src/index.ts +2 -1
- package/src/machine/Siopv2Machine.ts +4 -4
- package/src/services/Siopv2MachineService.ts +133 -265
- package/src/session/OID4VP.ts +310 -299
- package/src/session/OpSession.ts +22 -114
- package/src/types/IDidAuthSiopOpAuthenticator.ts +5 -58
- package/src/types/identifier/index.ts +0 -4
- package/src/types/siop-service/index.ts +1 -3
- package/src/utils/CredentialUtils.ts +1 -39
- package/src/utils/dcql.ts +21 -19
package/dist/index.cjs
CHANGED
|
@@ -60,376 +60,372 @@ var require_nl = __commonJS({
|
|
|
60
60
|
}
|
|
61
61
|
});
|
|
62
62
|
|
|
63
|
+
// src/index.ts
|
|
64
|
+
var index_exports = {};
|
|
65
|
+
__export(index_exports, {
|
|
66
|
+
DEFAULT_JWT_PROOF_TYPE: () => DEFAULT_JWT_PROOF_TYPE,
|
|
67
|
+
DID_PREFIX: () => DID_PREFIX,
|
|
68
|
+
DidAuthSiopOpAuthenticator: () => DidAuthSiopOpAuthenticator,
|
|
69
|
+
LOGGER_NAMESPACE: () => LOGGER_NAMESPACE,
|
|
70
|
+
OID4VP: () => OID4VP,
|
|
71
|
+
OID4VPCallbackStateListener: () => OID4VPCallbackStateListener,
|
|
72
|
+
OpSession: () => OpSession,
|
|
73
|
+
Siopv2HolderEvent: () => Siopv2HolderEvent,
|
|
74
|
+
Siopv2Machine: () => Siopv2Machine,
|
|
75
|
+
Siopv2MachineAddContactStates: () => Siopv2MachineAddContactStates,
|
|
76
|
+
Siopv2MachineEvents: () => Siopv2MachineEvents,
|
|
77
|
+
Siopv2MachineGuards: () => Siopv2MachineGuards,
|
|
78
|
+
Siopv2MachineServices: () => Siopv2MachineServices,
|
|
79
|
+
Siopv2MachineStates: () => Siopv2MachineStates,
|
|
80
|
+
Siopv2OID4VPLinkHandler: () => Siopv2OID4VPLinkHandler,
|
|
81
|
+
SupportedLanguage: () => SupportedLanguage,
|
|
82
|
+
convertToDcqlCredentials: () => convertToDcqlCredentials,
|
|
83
|
+
createJwtCallbackWithIdOpts: () => createJwtCallbackWithIdOpts,
|
|
84
|
+
createJwtCallbackWithOpOpts: () => createJwtCallbackWithOpOpts,
|
|
85
|
+
createOID4VPPresentationSignCallback: () => createOID4VPPresentationSignCallback,
|
|
86
|
+
createOP: () => createOP,
|
|
87
|
+
createOPBuilder: () => createOPBuilder,
|
|
88
|
+
didAuthSiopOpAuthenticatorMethods: () => didAuthSiopOpAuthenticatorMethods,
|
|
89
|
+
getSigningAlgo: () => getSigningAlgo,
|
|
90
|
+
schema: () => plugin_schema_default
|
|
91
|
+
});
|
|
92
|
+
module.exports = __toCommonJS(index_exports);
|
|
93
|
+
|
|
63
94
|
// plugin.schema.json
|
|
64
|
-
var
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
sessionId: {
|
|
74
|
-
type: "string"
|
|
75
|
-
},
|
|
76
|
-
additionalProperties: false
|
|
77
|
-
},
|
|
78
|
-
required: ["sessionId"],
|
|
79
|
-
description: "Arguments needed for {@link DidAuthSiopOpAuthenticator.getSessionForSiop } "
|
|
95
|
+
var plugin_schema_default = {
|
|
96
|
+
IDidAuthSiopOpAuthenticator: {
|
|
97
|
+
components: {
|
|
98
|
+
schemas: {
|
|
99
|
+
IGetSiopSessionArgs: {
|
|
100
|
+
type: "object",
|
|
101
|
+
properties: {
|
|
102
|
+
sessionId: {
|
|
103
|
+
type: "string"
|
|
80
104
|
},
|
|
81
|
-
|
|
105
|
+
additionalProperties: false
|
|
106
|
+
},
|
|
107
|
+
required: ["sessionId"],
|
|
108
|
+
description: "Arguments needed for {@link DidAuthSiopOpAuthenticator.getSessionForSiop } "
|
|
109
|
+
},
|
|
110
|
+
IRegisterSiopSessionArgs: {
|
|
111
|
+
type: "object",
|
|
112
|
+
properties: {
|
|
113
|
+
identifier: {
|
|
82
114
|
type: "object",
|
|
83
115
|
properties: {
|
|
84
|
-
|
|
85
|
-
type: "object",
|
|
86
|
-
properties: {
|
|
87
|
-
did: {
|
|
88
|
-
type: "string"
|
|
89
|
-
},
|
|
90
|
-
alias: {
|
|
91
|
-
type: "string"
|
|
92
|
-
},
|
|
93
|
-
provider: {
|
|
94
|
-
type: "string"
|
|
95
|
-
},
|
|
96
|
-
controllerKeyId: {
|
|
97
|
-
type: "string"
|
|
98
|
-
},
|
|
99
|
-
keys: {
|
|
100
|
-
type: "array",
|
|
101
|
-
items: {
|
|
102
|
-
type: "object",
|
|
103
|
-
properties: {
|
|
104
|
-
additionalProperties: true
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
},
|
|
108
|
-
services: {
|
|
109
|
-
type: "array",
|
|
110
|
-
items: {
|
|
111
|
-
type: "object",
|
|
112
|
-
properties: {
|
|
113
|
-
additionalProperties: true
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
},
|
|
118
|
-
additionalProperties: false,
|
|
119
|
-
required: ["did", "provider", "keys", "services"]
|
|
120
|
-
},
|
|
121
|
-
sessionId: {
|
|
116
|
+
did: {
|
|
122
117
|
type: "string"
|
|
123
118
|
},
|
|
124
|
-
|
|
125
|
-
type: "number"
|
|
126
|
-
},
|
|
127
|
-
additionalProperties: false
|
|
128
|
-
},
|
|
129
|
-
required: ["identifier"],
|
|
130
|
-
description: "Arguments needed for {@link DidAuthSiopOpAuthenticator.registerSessionForSiop } "
|
|
131
|
-
},
|
|
132
|
-
IRemoveSiopSessionArgs: {
|
|
133
|
-
type: "object",
|
|
134
|
-
properties: {
|
|
135
|
-
sessionId: {
|
|
119
|
+
alias: {
|
|
136
120
|
type: "string"
|
|
137
121
|
},
|
|
138
|
-
|
|
139
|
-
},
|
|
140
|
-
required: ["sessionId"],
|
|
141
|
-
description: "Arguments needed for {@link DidAuthSiopOpAuthenticator.removeSessionForSiop } "
|
|
142
|
-
},
|
|
143
|
-
IAuthenticateWithSiopArgs: {
|
|
144
|
-
type: "object",
|
|
145
|
-
properties: {
|
|
146
|
-
sessionId: {
|
|
122
|
+
provider: {
|
|
147
123
|
type: "string"
|
|
148
124
|
},
|
|
149
|
-
|
|
125
|
+
controllerKeyId: {
|
|
150
126
|
type: "string"
|
|
151
127
|
},
|
|
152
|
-
|
|
153
|
-
type: "
|
|
128
|
+
keys: {
|
|
129
|
+
type: "array",
|
|
130
|
+
items: {
|
|
131
|
+
type: "object",
|
|
132
|
+
properties: {
|
|
133
|
+
additionalProperties: true
|
|
134
|
+
}
|
|
135
|
+
}
|
|
154
136
|
},
|
|
155
|
-
|
|
137
|
+
services: {
|
|
138
|
+
type: "array",
|
|
139
|
+
items: {
|
|
140
|
+
type: "object",
|
|
141
|
+
properties: {
|
|
142
|
+
additionalProperties: true
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
156
146
|
},
|
|
157
|
-
|
|
158
|
-
|
|
147
|
+
additionalProperties: false,
|
|
148
|
+
required: ["did", "provider", "keys", "services"]
|
|
149
|
+
},
|
|
150
|
+
sessionId: {
|
|
151
|
+
type: "string"
|
|
152
|
+
},
|
|
153
|
+
expiresIn: {
|
|
154
|
+
type: "number"
|
|
155
|
+
},
|
|
156
|
+
additionalProperties: false
|
|
157
|
+
},
|
|
158
|
+
required: ["identifier"],
|
|
159
|
+
description: "Arguments needed for {@link DidAuthSiopOpAuthenticator.registerSessionForSiop } "
|
|
160
|
+
},
|
|
161
|
+
IRemoveSiopSessionArgs: {
|
|
162
|
+
type: "object",
|
|
163
|
+
properties: {
|
|
164
|
+
sessionId: {
|
|
165
|
+
type: "string"
|
|
166
|
+
},
|
|
167
|
+
additionalProperties: false
|
|
168
|
+
},
|
|
169
|
+
required: ["sessionId"],
|
|
170
|
+
description: "Arguments needed for {@link DidAuthSiopOpAuthenticator.removeSessionForSiop } "
|
|
171
|
+
},
|
|
172
|
+
IAuthenticateWithSiopArgs: {
|
|
173
|
+
type: "object",
|
|
174
|
+
properties: {
|
|
175
|
+
sessionId: {
|
|
176
|
+
type: "string"
|
|
177
|
+
},
|
|
178
|
+
stateId: {
|
|
179
|
+
type: "string"
|
|
180
|
+
},
|
|
181
|
+
redirectUrl: {
|
|
182
|
+
type: "string"
|
|
159
183
|
},
|
|
160
|
-
|
|
184
|
+
additionalProperties: false
|
|
185
|
+
},
|
|
186
|
+
required: ["sessionId", "stateId", "redirectUrl"],
|
|
187
|
+
description: "Arguments needed for {@link DidAuthSiopOpAuthenticator.authenticateWithSiop } "
|
|
188
|
+
},
|
|
189
|
+
IResponse: {
|
|
190
|
+
type: "object",
|
|
191
|
+
properties: {
|
|
192
|
+
status: {
|
|
193
|
+
type: "number"
|
|
194
|
+
},
|
|
195
|
+
additionalProperties: true
|
|
196
|
+
},
|
|
197
|
+
required: ["status"],
|
|
198
|
+
description: "Result of {@link DidAuthSiopOpAuthenticator.authenticateWithSiop & DidAuthSiopOpAuthenticator.sendSiopAuthenticationResponse } "
|
|
199
|
+
},
|
|
200
|
+
IGetSiopAuthenticationRequestFromRpArgs: {
|
|
201
|
+
type: "object",
|
|
202
|
+
properties: {
|
|
203
|
+
sessionId: {
|
|
204
|
+
type: "string"
|
|
205
|
+
},
|
|
206
|
+
stateId: {
|
|
207
|
+
type: "string"
|
|
208
|
+
},
|
|
209
|
+
redirectUrl: {
|
|
210
|
+
type: "string"
|
|
211
|
+
},
|
|
212
|
+
additionalProperties: false
|
|
213
|
+
},
|
|
214
|
+
required: ["sessionId", "stateId", "redirectUrl"],
|
|
215
|
+
description: "Arguments needed for {@link DidAuthSiopOpAuthenticator.getSiopAuthenticationRequestFromRP } "
|
|
216
|
+
},
|
|
217
|
+
ParsedAuthenticationRequestURI: {
|
|
218
|
+
type: "object",
|
|
219
|
+
properties: {
|
|
220
|
+
jwt: {
|
|
221
|
+
type: "string"
|
|
222
|
+
},
|
|
223
|
+
requestPayload: {
|
|
161
224
|
type: "object",
|
|
162
225
|
properties: {
|
|
163
|
-
status: {
|
|
164
|
-
type: "number"
|
|
165
|
-
},
|
|
166
226
|
additionalProperties: true
|
|
167
|
-
}
|
|
168
|
-
required: ["status"],
|
|
169
|
-
description: "Result of {@link DidAuthSiopOpAuthenticator.authenticateWithSiop & DidAuthSiopOpAuthenticator.sendSiopAuthenticationResponse } "
|
|
227
|
+
}
|
|
170
228
|
},
|
|
171
|
-
|
|
229
|
+
registration: {
|
|
172
230
|
type: "object",
|
|
173
231
|
properties: {
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
},
|
|
177
|
-
stateId: {
|
|
178
|
-
type: "string"
|
|
179
|
-
},
|
|
180
|
-
redirectUrl: {
|
|
181
|
-
type: "string"
|
|
182
|
-
},
|
|
183
|
-
additionalProperties: false
|
|
184
|
-
},
|
|
185
|
-
required: ["sessionId", "stateId", "redirectUrl"],
|
|
186
|
-
description: "Arguments needed for {@link DidAuthSiopOpAuthenticator.getSiopAuthenticationRequestFromRP } "
|
|
232
|
+
additionalProperties: true
|
|
233
|
+
}
|
|
187
234
|
},
|
|
188
|
-
|
|
235
|
+
additionalProperties: false
|
|
236
|
+
},
|
|
237
|
+
required: ["jwt", "requestPayload", "registration"],
|
|
238
|
+
description: "Result of {@link DidAuthSiopOpAuthenticator.getSiopAuthenticationRequestFromRP } "
|
|
239
|
+
},
|
|
240
|
+
IGetSiopAuthenticationRequestDetailsArgs: {
|
|
241
|
+
type: "object",
|
|
242
|
+
properties: {
|
|
243
|
+
sessionId: {
|
|
244
|
+
type: "string"
|
|
245
|
+
},
|
|
246
|
+
verifiedAuthenticationRequest: {
|
|
189
247
|
type: "object",
|
|
190
248
|
properties: {
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
},
|
|
194
|
-
requestPayload: {
|
|
195
|
-
type: "object",
|
|
196
|
-
properties: {
|
|
197
|
-
additionalProperties: true
|
|
198
|
-
}
|
|
199
|
-
},
|
|
200
|
-
registration: {
|
|
201
|
-
type: "object",
|
|
202
|
-
properties: {
|
|
203
|
-
additionalProperties: true
|
|
204
|
-
}
|
|
205
|
-
},
|
|
206
|
-
additionalProperties: false
|
|
207
|
-
},
|
|
208
|
-
required: ["jwt", "requestPayload", "registration"],
|
|
209
|
-
description: "Result of {@link DidAuthSiopOpAuthenticator.getSiopAuthenticationRequestFromRP } "
|
|
249
|
+
additionalProperties: true
|
|
250
|
+
}
|
|
210
251
|
},
|
|
211
|
-
|
|
252
|
+
credentialFilter: {
|
|
212
253
|
type: "object",
|
|
213
254
|
properties: {
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
},
|
|
217
|
-
verifiedAuthenticationRequest: {
|
|
218
|
-
type: "object",
|
|
219
|
-
properties: {
|
|
220
|
-
additionalProperties: true
|
|
221
|
-
}
|
|
222
|
-
},
|
|
223
|
-
credentialFilter: {
|
|
224
|
-
type: "object",
|
|
225
|
-
properties: {
|
|
226
|
-
additionalProperties: true
|
|
227
|
-
}
|
|
228
|
-
},
|
|
229
|
-
additionalProperties: false
|
|
230
|
-
},
|
|
231
|
-
required: ["sessionId", "verifiedAuthenticationRequest"],
|
|
232
|
-
description: "Arguments needed for {@link DidAuthSiopOpAuthenticator.getSiopAuthenticationRequestDetails } "
|
|
255
|
+
additionalProperties: true
|
|
256
|
+
}
|
|
233
257
|
},
|
|
234
|
-
|
|
258
|
+
additionalProperties: false
|
|
259
|
+
},
|
|
260
|
+
required: ["sessionId", "verifiedAuthenticationRequest"],
|
|
261
|
+
description: "Arguments needed for {@link DidAuthSiopOpAuthenticator.getSiopAuthenticationRequestDetails } "
|
|
262
|
+
},
|
|
263
|
+
IAuthRequestDetails: {
|
|
264
|
+
type: "object",
|
|
265
|
+
properties: {
|
|
266
|
+
id: {
|
|
267
|
+
type: "string"
|
|
268
|
+
},
|
|
269
|
+
alsoKnownAs: {
|
|
270
|
+
type: "array",
|
|
271
|
+
items: {
|
|
272
|
+
type: "string"
|
|
273
|
+
}
|
|
274
|
+
},
|
|
275
|
+
vpResponseOpts: {
|
|
235
276
|
type: "object",
|
|
236
277
|
properties: {
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
},
|
|
240
|
-
alsoKnownAs: {
|
|
241
|
-
type: "array",
|
|
242
|
-
items: {
|
|
243
|
-
type: "string"
|
|
244
|
-
}
|
|
245
|
-
},
|
|
246
|
-
vpResponseOpts: {
|
|
247
|
-
type: "object",
|
|
248
|
-
properties: {
|
|
249
|
-
additionalProperties: true
|
|
250
|
-
}
|
|
251
|
-
},
|
|
252
|
-
additionalProperties: false
|
|
253
|
-
},
|
|
254
|
-
required: ["id", "vpResponseOpts"],
|
|
255
|
-
description: "Result of {@link DidAuthSiopOpAuthenticator.getSiopAuthenticationRequestDetails } "
|
|
278
|
+
additionalProperties: true
|
|
279
|
+
}
|
|
256
280
|
},
|
|
257
|
-
|
|
281
|
+
additionalProperties: false
|
|
282
|
+
},
|
|
283
|
+
required: ["id", "vpResponseOpts"],
|
|
284
|
+
description: "Result of {@link DidAuthSiopOpAuthenticator.getSiopAuthenticationRequestDetails } "
|
|
285
|
+
},
|
|
286
|
+
IVerifySiopAuthenticationRequestUriArgs: {
|
|
287
|
+
type: "object",
|
|
288
|
+
properties: {
|
|
289
|
+
sessionId: {
|
|
290
|
+
type: "string"
|
|
291
|
+
},
|
|
292
|
+
ParsedAuthenticationRequestURI: {
|
|
258
293
|
type: "object",
|
|
259
294
|
properties: {
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
},
|
|
263
|
-
ParsedAuthenticationRequestURI: {
|
|
264
|
-
type: "object",
|
|
265
|
-
properties: {
|
|
266
|
-
additionalProperties: true
|
|
267
|
-
}
|
|
268
|
-
},
|
|
269
|
-
additionalProperties: false
|
|
270
|
-
},
|
|
271
|
-
required: ["sessionId", "ParsedAuthenticationRequestURI"],
|
|
272
|
-
description: "Arguments needed for {@link DidAuthSiopOpAuthenticator.verifySiopAuthenticationRequestURI } "
|
|
295
|
+
additionalProperties: true
|
|
296
|
+
}
|
|
273
297
|
},
|
|
274
|
-
|
|
298
|
+
additionalProperties: false
|
|
299
|
+
},
|
|
300
|
+
required: ["sessionId", "ParsedAuthenticationRequestURI"],
|
|
301
|
+
description: "Arguments needed for {@link DidAuthSiopOpAuthenticator.verifySiopAuthenticationRequestURI } "
|
|
302
|
+
},
|
|
303
|
+
VerifiedAuthorizationRequest: {
|
|
304
|
+
type: "object",
|
|
305
|
+
properties: {
|
|
306
|
+
payload: {
|
|
275
307
|
type: "object",
|
|
276
308
|
properties: {
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
properties: {
|
|
280
|
-
additionalProperties: true
|
|
281
|
-
}
|
|
282
|
-
},
|
|
283
|
-
presentationDefinitions: {
|
|
284
|
-
type: "object",
|
|
285
|
-
properties: {
|
|
286
|
-
additionalProperties: true
|
|
287
|
-
}
|
|
288
|
-
},
|
|
289
|
-
verifyOpts: {
|
|
290
|
-
type: "object",
|
|
291
|
-
properties: {
|
|
292
|
-
additionalProperties: true
|
|
293
|
-
}
|
|
294
|
-
},
|
|
295
|
-
additionalProperties: false
|
|
296
|
-
},
|
|
297
|
-
required: ["payload", "verifyOpts"],
|
|
298
|
-
description: "Result of {@link DidAuthSiopOpAuthenticator.verifySiopAuthenticationRequestURI } "
|
|
309
|
+
additionalProperties: true
|
|
310
|
+
}
|
|
299
311
|
},
|
|
300
|
-
|
|
312
|
+
presentationDefinitions: {
|
|
301
313
|
type: "object",
|
|
302
314
|
properties: {
|
|
303
|
-
|
|
304
|
-
type: "string"
|
|
305
|
-
},
|
|
306
|
-
verifiedAuthenticationRequest: {
|
|
307
|
-
type: "object",
|
|
308
|
-
properties: {
|
|
309
|
-
additionalProperties: true
|
|
310
|
-
}
|
|
311
|
-
},
|
|
312
|
-
verifiablePresentationResponse: {
|
|
313
|
-
type: "object",
|
|
314
|
-
properties: {
|
|
315
|
-
additionalProperties: true
|
|
316
|
-
}
|
|
317
|
-
},
|
|
318
|
-
additionalProperties: false
|
|
319
|
-
},
|
|
320
|
-
required: ["sessionId", "verifiedAuthenticationRequest"],
|
|
321
|
-
description: "Arguments needed for {@link DidAuthSiopOpAuthenticator.sendSiopAuthenticationResponse } "
|
|
322
|
-
}
|
|
323
|
-
},
|
|
324
|
-
methods: {
|
|
325
|
-
getSessionForSiop: {
|
|
326
|
-
description: "Get SIOP session",
|
|
327
|
-
arguments: {
|
|
328
|
-
$ref: "#/components/schemas/IGetSiopSessionArgs"
|
|
329
|
-
},
|
|
330
|
-
returnType: "object"
|
|
331
|
-
},
|
|
332
|
-
registerSessionForSiop: {
|
|
333
|
-
description: "Register SIOP session",
|
|
334
|
-
arguments: {
|
|
335
|
-
$ref: "#/components/schemas/IRegisterSiopSessionArgs"
|
|
336
|
-
},
|
|
337
|
-
returnType: "object"
|
|
338
|
-
},
|
|
339
|
-
removeSessionForSiop: {
|
|
340
|
-
description: "Remove SIOP session",
|
|
341
|
-
arguments: {
|
|
342
|
-
$ref: "#/components/schemas/IRemoveSiopSessionArgs"
|
|
343
|
-
},
|
|
344
|
-
returnType: "boolean"
|
|
345
|
-
},
|
|
346
|
-
authenticateWithSiop: {
|
|
347
|
-
description: "Authenticate using DID Auth SIOP",
|
|
348
|
-
arguments: {
|
|
349
|
-
$ref: "#/components/schemas/IAuthenticateWithSiopArgs"
|
|
350
|
-
},
|
|
351
|
-
returnType: {
|
|
352
|
-
$ref: "#/components/schemas/Response"
|
|
315
|
+
additionalProperties: true
|
|
353
316
|
}
|
|
354
317
|
},
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
},
|
|
360
|
-
returnType: {
|
|
361
|
-
$ref: "#/components/schemas/ParsedAuthenticationRequestURI"
|
|
318
|
+
verifyOpts: {
|
|
319
|
+
type: "object",
|
|
320
|
+
properties: {
|
|
321
|
+
additionalProperties: true
|
|
362
322
|
}
|
|
363
323
|
},
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
324
|
+
additionalProperties: false
|
|
325
|
+
},
|
|
326
|
+
required: ["payload", "verifyOpts"],
|
|
327
|
+
description: "Result of {@link DidAuthSiopOpAuthenticator.verifySiopAuthenticationRequestURI } "
|
|
328
|
+
},
|
|
329
|
+
ISendSiopAuthenticationResponseArgs: {
|
|
330
|
+
type: "object",
|
|
331
|
+
properties: {
|
|
332
|
+
sessionId: {
|
|
333
|
+
type: "string"
|
|
372
334
|
},
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
},
|
|
378
|
-
returnType: {
|
|
379
|
-
$ref: "#/components/schemas/VerifiedAuthorizationRequest"
|
|
335
|
+
verifiedAuthenticationRequest: {
|
|
336
|
+
type: "object",
|
|
337
|
+
properties: {
|
|
338
|
+
additionalProperties: true
|
|
380
339
|
}
|
|
381
340
|
},
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
},
|
|
387
|
-
returnType: {
|
|
388
|
-
$ref: "#/components/schemas/IRequiredContext"
|
|
341
|
+
verifiablePresentationResponse: {
|
|
342
|
+
type: "object",
|
|
343
|
+
properties: {
|
|
344
|
+
additionalProperties: true
|
|
389
345
|
}
|
|
390
|
-
}
|
|
346
|
+
},
|
|
347
|
+
additionalProperties: false
|
|
348
|
+
},
|
|
349
|
+
required: ["sessionId", "verifiedAuthenticationRequest"],
|
|
350
|
+
description: "Arguments needed for {@link DidAuthSiopOpAuthenticator.sendSiopAuthenticationResponse } "
|
|
351
|
+
}
|
|
352
|
+
},
|
|
353
|
+
methods: {
|
|
354
|
+
getSessionForSiop: {
|
|
355
|
+
description: "Get SIOP session",
|
|
356
|
+
arguments: {
|
|
357
|
+
$ref: "#/components/schemas/IGetSiopSessionArgs"
|
|
358
|
+
},
|
|
359
|
+
returnType: "object"
|
|
360
|
+
},
|
|
361
|
+
registerSessionForSiop: {
|
|
362
|
+
description: "Register SIOP session",
|
|
363
|
+
arguments: {
|
|
364
|
+
$ref: "#/components/schemas/IRegisterSiopSessionArgs"
|
|
365
|
+
},
|
|
366
|
+
returnType: "object"
|
|
367
|
+
},
|
|
368
|
+
removeSessionForSiop: {
|
|
369
|
+
description: "Remove SIOP session",
|
|
370
|
+
arguments: {
|
|
371
|
+
$ref: "#/components/schemas/IRemoveSiopSessionArgs"
|
|
372
|
+
},
|
|
373
|
+
returnType: "boolean"
|
|
374
|
+
},
|
|
375
|
+
authenticateWithSiop: {
|
|
376
|
+
description: "Authenticate using DID Auth SIOP",
|
|
377
|
+
arguments: {
|
|
378
|
+
$ref: "#/components/schemas/IAuthenticateWithSiopArgs"
|
|
379
|
+
},
|
|
380
|
+
returnType: {
|
|
381
|
+
$ref: "#/components/schemas/Response"
|
|
382
|
+
}
|
|
383
|
+
},
|
|
384
|
+
getSiopAuthenticationRequestFromRP: {
|
|
385
|
+
description: "Get authentication request from RP",
|
|
386
|
+
arguments: {
|
|
387
|
+
$ref: "#/components/schemas/IGetSiopAuthenticationRequestFromRpArgs"
|
|
388
|
+
},
|
|
389
|
+
returnType: {
|
|
390
|
+
$ref: "#/components/schemas/ParsedAuthenticationRequestURI"
|
|
391
|
+
}
|
|
392
|
+
},
|
|
393
|
+
getSiopAuthenticationRequestDetails: {
|
|
394
|
+
description: "Get authentication request details",
|
|
395
|
+
arguments: {
|
|
396
|
+
$ref: "#/components/schemas/IGetSiopAuthenticationRequestDetailsArgs"
|
|
397
|
+
},
|
|
398
|
+
returnType: {
|
|
399
|
+
$ref: "#/components/schemas/IAuthRequestDetails"
|
|
400
|
+
}
|
|
401
|
+
},
|
|
402
|
+
verifySiopAuthenticationRequestURI: {
|
|
403
|
+
description: "Verify authentication request URI",
|
|
404
|
+
arguments: {
|
|
405
|
+
$ref: "#/components/schemas/IVerifySiopAuthenticationRequestUriArgs"
|
|
406
|
+
},
|
|
407
|
+
returnType: {
|
|
408
|
+
$ref: "#/components/schemas/VerifiedAuthorizationRequest"
|
|
409
|
+
}
|
|
410
|
+
},
|
|
411
|
+
sendSiopAuthenticationResponse: {
|
|
412
|
+
description: "Send authentication response",
|
|
413
|
+
arguments: {
|
|
414
|
+
$ref: "#/components/schemas/ISendSiopAuthenticationResponseArgs"
|
|
415
|
+
},
|
|
416
|
+
returnType: {
|
|
417
|
+
$ref: "#/components/schemas/IRequiredContext"
|
|
391
418
|
}
|
|
392
419
|
}
|
|
393
420
|
}
|
|
394
|
-
}
|
|
421
|
+
}
|
|
395
422
|
}
|
|
396
|
-
}
|
|
397
|
-
|
|
398
|
-
// src/index.ts
|
|
399
|
-
var index_exports = {};
|
|
400
|
-
__export(index_exports, {
|
|
401
|
-
DEFAULT_JWT_PROOF_TYPE: () => DEFAULT_JWT_PROOF_TYPE,
|
|
402
|
-
DID_PREFIX: () => DID_PREFIX,
|
|
403
|
-
DidAuthSiopOpAuthenticator: () => DidAuthSiopOpAuthenticator,
|
|
404
|
-
LOGGER_NAMESPACE: () => LOGGER_NAMESPACE,
|
|
405
|
-
OID4VP: () => OID4VP,
|
|
406
|
-
OID4VPCallbackStateListener: () => OID4VPCallbackStateListener,
|
|
407
|
-
OpSession: () => OpSession,
|
|
408
|
-
Siopv2HolderEvent: () => Siopv2HolderEvent,
|
|
409
|
-
Siopv2Machine: () => Siopv2Machine,
|
|
410
|
-
Siopv2MachineAddContactStates: () => Siopv2MachineAddContactStates,
|
|
411
|
-
Siopv2MachineEvents: () => Siopv2MachineEvents,
|
|
412
|
-
Siopv2MachineGuards: () => Siopv2MachineGuards,
|
|
413
|
-
Siopv2MachineServices: () => Siopv2MachineServices,
|
|
414
|
-
Siopv2MachineStates: () => Siopv2MachineStates,
|
|
415
|
-
Siopv2OID4VPLinkHandler: () => Siopv2OID4VPLinkHandler,
|
|
416
|
-
SupportedLanguage: () => SupportedLanguage,
|
|
417
|
-
createJwtCallbackWithIdOpts: () => createJwtCallbackWithIdOpts,
|
|
418
|
-
createJwtCallbackWithOpOpts: () => createJwtCallbackWithOpOpts,
|
|
419
|
-
createOID4VPPresentationSignCallback: () => createOID4VPPresentationSignCallback,
|
|
420
|
-
createOP: () => createOP,
|
|
421
|
-
createOPBuilder: () => createOPBuilder,
|
|
422
|
-
didAuthSiopOpAuthenticatorMethods: () => didAuthSiopOpAuthenticatorMethods,
|
|
423
|
-
events: () => events,
|
|
424
|
-
getSigningAlgo: () => getSigningAlgo,
|
|
425
|
-
schema: () => schema
|
|
426
|
-
});
|
|
427
|
-
module.exports = __toCommonJS(index_exports);
|
|
423
|
+
};
|
|
428
424
|
|
|
429
425
|
// src/agent/DidAuthSiopOpAuthenticator.ts
|
|
430
426
|
var import_did_auth_siop5 = require("@sphereon/did-auth-siop");
|
|
431
|
-
var
|
|
432
|
-
var
|
|
427
|
+
var import_ssi_sdk6 = require("@sphereon/ssi-sdk.data-store");
|
|
428
|
+
var import_ssi_types8 = require("@sphereon/ssi-types");
|
|
433
429
|
var import_uuid2 = require("uuid");
|
|
434
430
|
|
|
435
431
|
// src/session/functions.ts
|
|
@@ -559,130 +555,41 @@ function getVerifyJwtCallback(_opts, context) {
|
|
|
559
555
|
return !result.error;
|
|
560
556
|
};
|
|
561
557
|
}
|
|
562
|
-
__name(getVerifyJwtCallback, "getVerifyJwtCallback");
|
|
563
|
-
async function createOP({ opOptions, idOpts: idOpts1, context }) {
|
|
564
|
-
return (await createOPBuilder({
|
|
565
|
-
opOptions,
|
|
566
|
-
idOpts: idOpts1,
|
|
567
|
-
context
|
|
568
|
-
})).build();
|
|
569
|
-
}
|
|
570
|
-
__name(createOP, "createOP");
|
|
571
|
-
function getSigningAlgo(type) {
|
|
572
|
-
switch (type) {
|
|
573
|
-
case "Ed25519":
|
|
574
|
-
return import_oid4vc_common.SigningAlgo.EDDSA;
|
|
575
|
-
case "Secp256k1":
|
|
576
|
-
return import_oid4vc_common.SigningAlgo.ES256K;
|
|
577
|
-
case "Secp256r1":
|
|
578
|
-
return import_oid4vc_common.SigningAlgo.ES256;
|
|
579
|
-
// @ts-ignore
|
|
580
|
-
case "RSA":
|
|
581
|
-
return import_oid4vc_common.SigningAlgo.RS256;
|
|
582
|
-
default:
|
|
583
|
-
throw Error("Key type not yet supported");
|
|
584
|
-
}
|
|
585
|
-
}
|
|
586
|
-
__name(getSigningAlgo, "getSigningAlgo");
|
|
587
|
-
|
|
588
|
-
// src/session/OID4VP.ts
|
|
589
|
-
var import_did_auth_siop2 = require("@sphereon/did-auth-siop");
|
|
590
|
-
var import_pex = require("@sphereon/pex");
|
|
591
|
-
var import_ssi_sdk_ext2 = require("@sphereon/ssi-sdk-ext.identifier-resolution");
|
|
592
|
-
var import_ssi_sdk2 = require("@sphereon/ssi-sdk.core");
|
|
593
|
-
var import_ssi_sdk3 = require("@sphereon/ssi-sdk.credential-store");
|
|
594
|
-
|
|
595
|
-
// src/types/IDidAuthSiopOpAuthenticator.ts
|
|
596
|
-
var LOGGER_NAMESPACE = "sphereon:siopv2-oid4vp:op-auth";
|
|
597
|
-
var events = /* @__PURE__ */ (function(events2) {
|
|
598
|
-
events2["DID_SIOP_AUTHENTICATED"] = "didSiopAuthenticated";
|
|
599
|
-
return events2;
|
|
600
|
-
})({});
|
|
601
|
-
var DEFAULT_JWT_PROOF_TYPE = "JwtProof2020";
|
|
602
|
-
|
|
603
|
-
// src/types/siop-service/index.ts
|
|
604
|
-
var Siopv2HolderEvent = /* @__PURE__ */ (function(Siopv2HolderEvent2) {
|
|
605
|
-
Siopv2HolderEvent2["CONTACT_IDENTITY_CREATED"] = "contact_identity_created";
|
|
606
|
-
Siopv2HolderEvent2["IDENTIFIER_CREATED"] = "identifier_created";
|
|
607
|
-
return Siopv2HolderEvent2;
|
|
608
|
-
})({});
|
|
609
|
-
var SupportedLanguage = /* @__PURE__ */ (function(SupportedLanguage2) {
|
|
610
|
-
SupportedLanguage2["ENGLISH"] = "en";
|
|
611
|
-
SupportedLanguage2["DUTCH"] = "nl";
|
|
612
|
-
return SupportedLanguage2;
|
|
613
|
-
})({});
|
|
614
|
-
|
|
615
|
-
// src/types/machine/index.ts
|
|
616
|
-
var Siopv2MachineStates = /* @__PURE__ */ (function(Siopv2MachineStates2) {
|
|
617
|
-
Siopv2MachineStates2["createConfig"] = "createConfig";
|
|
618
|
-
Siopv2MachineStates2["getSiopRequest"] = "getSiopRequest";
|
|
619
|
-
Siopv2MachineStates2["getSelectableCredentials"] = "getSelectableCredentials";
|
|
620
|
-
Siopv2MachineStates2["retrieveContact"] = "retrieveContact";
|
|
621
|
-
Siopv2MachineStates2["transitionFromSetup"] = "transitionFromSetup";
|
|
622
|
-
Siopv2MachineStates2["addContact"] = "addContact";
|
|
623
|
-
Siopv2MachineStates2["addContactIdentity"] = "addContactIdentity";
|
|
624
|
-
Siopv2MachineStates2["selectCredentials"] = "selectCredentials";
|
|
625
|
-
Siopv2MachineStates2["sendResponse"] = "sendResponse";
|
|
626
|
-
Siopv2MachineStates2["handleError"] = "handleError";
|
|
627
|
-
Siopv2MachineStates2["aborted"] = "aborted";
|
|
628
|
-
Siopv2MachineStates2["declined"] = "declined";
|
|
629
|
-
Siopv2MachineStates2["error"] = "error";
|
|
630
|
-
Siopv2MachineStates2["done"] = "done";
|
|
631
|
-
return Siopv2MachineStates2;
|
|
632
|
-
})({});
|
|
633
|
-
var Siopv2MachineAddContactStates = /* @__PURE__ */ (function(Siopv2MachineAddContactStates2) {
|
|
634
|
-
Siopv2MachineAddContactStates2["idle"] = "idle";
|
|
635
|
-
Siopv2MachineAddContactStates2["executing"] = "executing";
|
|
636
|
-
Siopv2MachineAddContactStates2["next"] = "next";
|
|
637
|
-
return Siopv2MachineAddContactStates2;
|
|
638
|
-
})({});
|
|
639
|
-
var Siopv2MachineEvents = /* @__PURE__ */ (function(Siopv2MachineEvents2) {
|
|
640
|
-
Siopv2MachineEvents2["NEXT"] = "NEXT";
|
|
641
|
-
Siopv2MachineEvents2["PREVIOUS"] = "PREVIOUS";
|
|
642
|
-
Siopv2MachineEvents2["DECLINE"] = "DECLINE";
|
|
643
|
-
Siopv2MachineEvents2["SET_CONTACT_ALIAS"] = "SET_CONTACT_ALIAS";
|
|
644
|
-
Siopv2MachineEvents2["SET_CONTACT_CONSENT"] = "SET_CONTACT_CONSENT";
|
|
645
|
-
Siopv2MachineEvents2["CREATE_CONTACT"] = "CREATE_CONTACT";
|
|
646
|
-
Siopv2MachineEvents2["SET_SELECTED_CREDENTIALS"] = "SET_SELECTED_CREDENTIALS";
|
|
647
|
-
return Siopv2MachineEvents2;
|
|
648
|
-
})({});
|
|
649
|
-
var Siopv2MachineGuards = /* @__PURE__ */ (function(Siopv2MachineGuards2) {
|
|
650
|
-
Siopv2MachineGuards2["hasNoContactGuard"] = "Siopv2HasNoContactGuard";
|
|
651
|
-
Siopv2MachineGuards2["createContactGuard"] = "Siopv2CreateContactGuard";
|
|
652
|
-
Siopv2MachineGuards2["hasContactGuard"] = "Siopv2HasContactGuard";
|
|
653
|
-
Siopv2MachineGuards2["hasAuthorizationRequestGuard"] = "Siopv2HasAuthorizationRequestGuard";
|
|
654
|
-
Siopv2MachineGuards2["hasSelectableCredentialsAndContactGuard"] = "Siopv2HasSelectableCredentialsAndContactGuard";
|
|
655
|
-
Siopv2MachineGuards2["hasSelectedRequiredCredentialsGuard"] = "Siopv2HasSelectedRequiredCredentialsGuard";
|
|
656
|
-
Siopv2MachineGuards2["siopOnlyGuard"] = "Siopv2IsSiopOnlyGuard";
|
|
657
|
-
Siopv2MachineGuards2["siopWithOID4VPGuard"] = "Siopv2IsSiopWithOID4VPGuard";
|
|
658
|
-
return Siopv2MachineGuards2;
|
|
659
|
-
})({});
|
|
660
|
-
var Siopv2MachineServices = /* @__PURE__ */ (function(Siopv2MachineServices2) {
|
|
661
|
-
Siopv2MachineServices2["getSiopRequest"] = "getSiopRequest";
|
|
662
|
-
Siopv2MachineServices2["getSelectableCredentials"] = "getSelectableCredentials";
|
|
663
|
-
Siopv2MachineServices2["retrieveContact"] = "retrieveContact";
|
|
664
|
-
Siopv2MachineServices2["addContactIdentity"] = "addContactIdentity";
|
|
665
|
-
Siopv2MachineServices2["sendResponse"] = "sendResponse";
|
|
666
|
-
Siopv2MachineServices2["createConfig"] = "createConfig";
|
|
667
|
-
return Siopv2MachineServices2;
|
|
668
|
-
})({});
|
|
669
|
-
|
|
670
|
-
// src/types/identifier/index.ts
|
|
671
|
-
var DID_PREFIX = "did";
|
|
558
|
+
__name(getVerifyJwtCallback, "getVerifyJwtCallback");
|
|
559
|
+
async function createOP({ opOptions, idOpts: idOpts1, context }) {
|
|
560
|
+
return (await createOPBuilder({
|
|
561
|
+
opOptions,
|
|
562
|
+
idOpts: idOpts1,
|
|
563
|
+
context
|
|
564
|
+
})).build();
|
|
565
|
+
}
|
|
566
|
+
__name(createOP, "createOP");
|
|
567
|
+
function getSigningAlgo(type) {
|
|
568
|
+
switch (type) {
|
|
569
|
+
case "Ed25519":
|
|
570
|
+
return import_oid4vc_common.SigningAlgo.EDDSA;
|
|
571
|
+
case "Secp256k1":
|
|
572
|
+
return import_oid4vc_common.SigningAlgo.ES256K;
|
|
573
|
+
case "Secp256r1":
|
|
574
|
+
return import_oid4vc_common.SigningAlgo.ES256;
|
|
575
|
+
// @ts-ignore
|
|
576
|
+
case "RSA":
|
|
577
|
+
return import_oid4vc_common.SigningAlgo.RS256;
|
|
578
|
+
default:
|
|
579
|
+
throw Error("Key type not yet supported");
|
|
580
|
+
}
|
|
581
|
+
}
|
|
582
|
+
__name(getSigningAlgo, "getSigningAlgo");
|
|
672
583
|
|
|
673
584
|
// src/session/OID4VP.ts
|
|
674
585
|
var OID4VP = class _OID4VP {
|
|
675
586
|
static {
|
|
676
587
|
__name(this, "OID4VP");
|
|
677
588
|
}
|
|
678
|
-
session
|
|
679
|
-
allIdentifiers
|
|
680
|
-
hasher
|
|
589
|
+
//private readonly session: OpSession
|
|
590
|
+
// private readonly allIdentifiers: string[]
|
|
591
|
+
// private readonly hasher?: HasherSync
|
|
681
592
|
constructor(args) {
|
|
682
|
-
const { session, allIdentifiers, hasher = import_ssi_sdk2.defaultHasher } = args;
|
|
683
|
-
this.session = session;
|
|
684
|
-
this.allIdentifiers = allIdentifiers ?? [];
|
|
685
|
-
this.hasher = hasher;
|
|
686
593
|
}
|
|
687
594
|
static async init(session, allIdentifiers, hasher) {
|
|
688
595
|
return new _OID4VP({
|
|
@@ -691,184 +598,14 @@ var OID4VP = class _OID4VP {
|
|
|
691
598
|
hasher
|
|
692
599
|
});
|
|
693
600
|
}
|
|
694
|
-
async getPresentationDefinitions() {
|
|
695
|
-
const definitions = await this.session.getPresentationDefinitions();
|
|
696
|
-
if (definitions) {
|
|
697
|
-
import_did_auth_siop2.PresentationExchange.assertValidPresentationDefinitionWithLocations(definitions);
|
|
698
|
-
}
|
|
699
|
-
return definitions;
|
|
700
|
-
}
|
|
701
|
-
getPresentationExchange(args) {
|
|
702
|
-
const { verifiableCredentials, allIdentifiers, hasher } = args;
|
|
703
|
-
return new import_did_auth_siop2.PresentationExchange({
|
|
704
|
-
allDIDs: allIdentifiers ?? this.allIdentifiers,
|
|
705
|
-
allVerifiableCredentials: verifiableCredentials,
|
|
706
|
-
hasher: hasher ?? this.hasher
|
|
707
|
-
});
|
|
708
|
-
}
|
|
709
|
-
async createVerifiablePresentations(credentialRole, credentialsWithDefinitions, opts) {
|
|
710
|
-
return await Promise.all(credentialsWithDefinitions.map((cred) => this.createVerifiablePresentation(credentialRole, cred, opts)));
|
|
711
|
-
}
|
|
712
|
-
async createVerifiablePresentation(credentialRole, selectedVerifiableCredentials, opts) {
|
|
713
|
-
const { subjectIsHolder, holder, forceNoCredentialsInVP = false } = {
|
|
714
|
-
...opts
|
|
715
|
-
};
|
|
716
|
-
if (subjectIsHolder && holder) {
|
|
717
|
-
throw Error("Cannot both have subject is holder and a holderDID value at the same time (programming error)");
|
|
718
|
-
}
|
|
719
|
-
if (forceNoCredentialsInVP) {
|
|
720
|
-
selectedVerifiableCredentials.credentials = [];
|
|
721
|
-
} else if (!selectedVerifiableCredentials?.credentials || selectedVerifiableCredentials.credentials.length === 0) {
|
|
722
|
-
throw Error("No verifiable verifiableCredentials provided for presentation definition");
|
|
723
|
-
}
|
|
724
|
-
const proofOptions = {
|
|
725
|
-
...opts?.proofOpts,
|
|
726
|
-
challenge: opts?.proofOpts?.nonce ?? opts?.proofOpts?.challenge ?? this.session.nonce,
|
|
727
|
-
domain: opts?.proofOpts?.domain ?? await this.session.getRedirectUri()
|
|
728
|
-
};
|
|
729
|
-
let idOpts2 = opts?.idOpts;
|
|
730
|
-
if (!idOpts2) {
|
|
731
|
-
if (opts?.subjectIsHolder) {
|
|
732
|
-
if (forceNoCredentialsInVP) {
|
|
733
|
-
return Promise.reject(Error(`Cannot have subject is holder, when force no credentials is being used, as we could never determine the holder then. Please provide holderDID`));
|
|
734
|
-
}
|
|
735
|
-
const firstUniqueDC = selectedVerifiableCredentials.credentials[0];
|
|
736
|
-
if (typeof firstUniqueDC !== "object" || !("digitalCredential" in firstUniqueDC)) {
|
|
737
|
-
return Promise.reject(Error("If no opts provided, credentials should be of type UniqueDigitalCredential"));
|
|
738
|
-
}
|
|
739
|
-
idOpts2 = (0, import_ssi_sdk_ext2.isOID4VCIssuerIdentifier)(firstUniqueDC.digitalCredential.kmsKeyRef) ? await this.session.context.agent.identifierManagedGetByIssuer({
|
|
740
|
-
identifier: firstUniqueDC.digitalCredential.kmsKeyRef
|
|
741
|
-
}) : await this.session.context.agent.identifierManagedGetByKid({
|
|
742
|
-
identifier: firstUniqueDC.digitalCredential.kmsKeyRef,
|
|
743
|
-
kmsKeyRef: firstUniqueDC.digitalCredential.kmsKeyRef
|
|
744
|
-
});
|
|
745
|
-
} else if (opts?.holder) {
|
|
746
|
-
idOpts2 = {
|
|
747
|
-
identifier: opts.holder
|
|
748
|
-
};
|
|
749
|
-
}
|
|
750
|
-
}
|
|
751
|
-
const vcs = forceNoCredentialsInVP ? selectedVerifiableCredentials : opts?.applyFilter ? await this.filterCredentials(credentialRole, selectedVerifiableCredentials.definition, {
|
|
752
|
-
restrictToFormats: opts?.restrictToFormats,
|
|
753
|
-
restrictToDIDMethods: opts?.restrictToDIDMethods,
|
|
754
|
-
filterOpts: {
|
|
755
|
-
verifiableCredentials: selectedVerifiableCredentials.credentials
|
|
756
|
-
}
|
|
757
|
-
}) : {
|
|
758
|
-
definition: selectedVerifiableCredentials.definition,
|
|
759
|
-
credentials: selectedVerifiableCredentials.credentials
|
|
760
|
-
};
|
|
761
|
-
if (!idOpts2) {
|
|
762
|
-
return Promise.reject(Error(`No identifier options present at this point`));
|
|
763
|
-
}
|
|
764
|
-
const signCallback = await createOID4VPPresentationSignCallback({
|
|
765
|
-
presentationSignCallback: this.session.options.presentationSignCallback,
|
|
766
|
-
idOpts: idOpts2,
|
|
767
|
-
context: this.session.context,
|
|
768
|
-
domain: proofOptions.domain,
|
|
769
|
-
challenge: proofOptions.challenge,
|
|
770
|
-
format: opts?.restrictToFormats ?? selectedVerifiableCredentials.definition.definition.format,
|
|
771
|
-
skipDidResolution: opts?.skipDidResolution ?? false
|
|
772
|
-
});
|
|
773
|
-
const identifier = await this.session.context.agent.identifierManagedGet(idOpts2);
|
|
774
|
-
const verifiableCredentials = vcs.credentials.map((credential) => typeof credential === "object" && "digitalCredential" in credential ? credential.originalVerifiableCredential : credential);
|
|
775
|
-
const presentationResult = await this.getPresentationExchange({
|
|
776
|
-
verifiableCredentials,
|
|
777
|
-
allIdentifiers: this.allIdentifiers,
|
|
778
|
-
hasher: opts?.hasher
|
|
779
|
-
}).createVerifiablePresentation(vcs.definition.definition, verifiableCredentials, signCallback, {
|
|
780
|
-
proofOptions,
|
|
781
|
-
// fixme: Update to newer siop-vp to not require dids here. But when Veramo is creating the VP it's still looking at this field to pass into didManagerGet
|
|
782
|
-
...identifier && (0, import_ssi_sdk_ext2.isManagedIdentifierDidResult)(identifier) && {
|
|
783
|
-
holderDID: identifier.did
|
|
784
|
-
}
|
|
785
|
-
});
|
|
786
|
-
const verifiablePresentations = presentationResult.verifiablePresentations.map((verifiablePresentation) => typeof verifiablePresentation !== "string" && "proof" in verifiablePresentation && "jwt" in verifiablePresentation.proof && verifiablePresentation.proof.jwt ? verifiablePresentation.proof.jwt : verifiablePresentation);
|
|
787
|
-
return {
|
|
788
|
-
...presentationResult,
|
|
789
|
-
verifiablePresentations,
|
|
790
|
-
verifiableCredentials,
|
|
791
|
-
definition: selectedVerifiableCredentials.definition,
|
|
792
|
-
idOpts: idOpts2
|
|
793
|
-
};
|
|
794
|
-
}
|
|
795
|
-
async filterCredentialsAgainstAllDefinitions(credentialRole, opts) {
|
|
796
|
-
const defs = await this.getPresentationDefinitions();
|
|
797
|
-
const result = [];
|
|
798
|
-
if (defs) {
|
|
799
|
-
for (const definition of defs) {
|
|
800
|
-
result.push(await this.filterCredentials(credentialRole, definition, opts));
|
|
801
|
-
}
|
|
802
|
-
}
|
|
803
|
-
return result;
|
|
804
|
-
}
|
|
805
|
-
async filterCredentials(credentialRole, presentationDefinition, opts) {
|
|
806
|
-
const udcMap = /* @__PURE__ */ new Map();
|
|
807
|
-
opts?.filterOpts?.verifiableCredentials?.forEach((credential) => {
|
|
808
|
-
if (typeof credential === "object" && "digitalCredential" in credential) {
|
|
809
|
-
udcMap.set(credential.originalVerifiableCredential, credential);
|
|
810
|
-
} else {
|
|
811
|
-
udcMap.set(credential, credential);
|
|
812
|
-
}
|
|
813
|
-
});
|
|
814
|
-
const credentials = (await this.filterCredentialsWithSelectionStatus(credentialRole, presentationDefinition, {
|
|
815
|
-
...opts,
|
|
816
|
-
filterOpts: {
|
|
817
|
-
verifiableCredentials: opts?.filterOpts?.verifiableCredentials?.map((credential) => {
|
|
818
|
-
if (typeof credential === "object" && "digitalCredential" in credential) {
|
|
819
|
-
return credential.originalVerifiableCredential;
|
|
820
|
-
} else {
|
|
821
|
-
return credential;
|
|
822
|
-
}
|
|
823
|
-
})
|
|
824
|
-
}
|
|
825
|
-
})).verifiableCredential;
|
|
826
|
-
return {
|
|
827
|
-
definition: presentationDefinition,
|
|
828
|
-
credentials: credentials?.map((vc) => udcMap.get(vc)) ?? []
|
|
829
|
-
};
|
|
830
|
-
}
|
|
831
|
-
async filterCredentialsWithSelectionStatus(credentialRole, presentationDefinition, opts) {
|
|
832
|
-
const selectionResults = await this.getPresentationExchange({
|
|
833
|
-
verifiableCredentials: await this.getCredentials(credentialRole, opts?.filterOpts)
|
|
834
|
-
}).selectVerifiableCredentialsForSubmission(presentationDefinition.definition, opts);
|
|
835
|
-
if (selectionResults.errors && selectionResults.errors.length > 0) {
|
|
836
|
-
throw Error(JSON.stringify(selectionResults.errors));
|
|
837
|
-
} else if (selectionResults.areRequiredCredentialsPresent === import_pex.Status.ERROR) {
|
|
838
|
-
throw Error(`Not all required credentials are available to satisfy the relying party's request`);
|
|
839
|
-
}
|
|
840
|
-
const matches = selectionResults.matches;
|
|
841
|
-
if (!matches || matches.length === 0 || !selectionResults.verifiableCredential || selectionResults.verifiableCredential.length === 0) {
|
|
842
|
-
throw Error(JSON.stringify(selectionResults.errors));
|
|
843
|
-
}
|
|
844
|
-
return selectionResults;
|
|
845
|
-
}
|
|
846
|
-
async getCredentials(credentialRole, filterOpts) {
|
|
847
|
-
if (filterOpts?.verifiableCredentials && filterOpts.verifiableCredentials.length > 0) {
|
|
848
|
-
return filterOpts.verifiableCredentials;
|
|
849
|
-
}
|
|
850
|
-
const filter = (0, import_ssi_sdk3.verifiableCredentialForRoleFilter)(credentialRole, filterOpts?.filter);
|
|
851
|
-
const uniqueCredentials = await this.session.context.agent.crsGetUniqueCredentials({
|
|
852
|
-
filter
|
|
853
|
-
});
|
|
854
|
-
return uniqueCredentials.map((uniqueVC) => {
|
|
855
|
-
const vc = uniqueVC.uniformVerifiableCredential;
|
|
856
|
-
const proof = Array.isArray(vc.proof) ? vc.proof : [
|
|
857
|
-
vc.proof
|
|
858
|
-
];
|
|
859
|
-
const jwtProof = proof.find((p) => p?.type === DEFAULT_JWT_PROOF_TYPE);
|
|
860
|
-
return jwtProof ? jwtProof.jwt : vc;
|
|
861
|
-
});
|
|
862
|
-
}
|
|
863
601
|
};
|
|
864
602
|
|
|
865
603
|
// src/session/OpSession.ts
|
|
866
|
-
var
|
|
867
|
-
var
|
|
868
|
-
var
|
|
604
|
+
var import_did_auth_siop2 = require("@sphereon/did-auth-siop");
|
|
605
|
+
var import_ssi_sdk_ext2 = require("@sphereon/ssi-sdk-ext.did-utils");
|
|
606
|
+
var import_ssi_sdk2 = require("@sphereon/ssi-sdk.core");
|
|
869
607
|
var import_ssi_types = require("@sphereon/ssi-types");
|
|
870
608
|
var import_uuid = require("uuid");
|
|
871
|
-
var import_pex2 = require("@sphereon/pex");
|
|
872
609
|
var import_ssi_types2 = require("@sphereon/ssi-types");
|
|
873
610
|
var logger = import_ssi_types2.Loggers.DEFAULT.get("sphereon:oid4vp:OpSession");
|
|
874
611
|
var OpSession = class _OpSession {
|
|
@@ -883,13 +620,11 @@ var OpSession = class _OpSession {
|
|
|
883
620
|
verifiedAuthorizationRequest;
|
|
884
621
|
_nonce;
|
|
885
622
|
_state;
|
|
886
|
-
_providedPresentationDefinitions;
|
|
887
623
|
constructor(options) {
|
|
888
624
|
this.id = options.sessionId;
|
|
889
625
|
this.options = options.op;
|
|
890
626
|
this.context = options.context;
|
|
891
627
|
this.requestJwtOrUri = options.requestJwtOrUri;
|
|
892
|
-
this._providedPresentationDefinitions = options.providedPresentationDefinitions;
|
|
893
628
|
}
|
|
894
629
|
static async init(options) {
|
|
895
630
|
return new _OpSession(options);
|
|
@@ -908,7 +643,7 @@ var OpSession = class _OpSession {
|
|
|
908
643
|
return this.verifiedAuthorizationRequest;
|
|
909
644
|
}
|
|
910
645
|
async getAuthorizationRequestURI() {
|
|
911
|
-
return await
|
|
646
|
+
return await import_did_auth_siop2.URI.fromAuthorizationRequest((await this.getAuthorizationRequest()).authorizationRequest);
|
|
912
647
|
}
|
|
913
648
|
get nonce() {
|
|
914
649
|
if (!this._nonce) {
|
|
@@ -943,7 +678,7 @@ var OpSession = class _OpSession {
|
|
|
943
678
|
}
|
|
944
679
|
let intersection;
|
|
945
680
|
if (rpMethods.dids.includes("did")) {
|
|
946
|
-
intersection = agentMethods && agentMethods.length > 0 ? agentMethods : (await (0,
|
|
681
|
+
intersection = agentMethods && agentMethods.length > 0 ? agentMethods : (await (0, import_ssi_sdk_ext2.getAgentDIDMethods)(this.context)).map((method) => convertDidMethod(method, didPrefix));
|
|
947
682
|
} else if (!agentMethods || agentMethods.length === 0) {
|
|
948
683
|
intersection = rpMethods.dids?.map((method) => convertDidMethod(method, didPrefix));
|
|
949
684
|
} else {
|
|
@@ -987,7 +722,7 @@ var OpSession = class _OpSession {
|
|
|
987
722
|
subjectSyntaxTypesSupported
|
|
988
723
|
]).map((method) => convertDidMethod(method, opts.didPrefix));
|
|
989
724
|
}
|
|
990
|
-
const isEBSI = rpMethods.length === 0 && (authReq.issuer?.includes(".ebsi.eu") ||
|
|
725
|
+
const isEBSI = rpMethods.length === 0 && (authReq.issuer?.includes(".ebsi.eu") || authReq.authorizationRequest.getMergedProperty("client_id")?.includes(".ebsi.eu"));
|
|
991
726
|
let codecName = void 0;
|
|
992
727
|
if (isEBSI && (!aud || !aud.startsWith("http"))) {
|
|
993
728
|
logger.debug(`EBSI detected, adding did:key to supported DID methods for RP`);
|
|
@@ -1042,56 +777,14 @@ var OpSession = class _OpSession {
|
|
|
1042
777
|
async getRedirectUri() {
|
|
1043
778
|
return Promise.resolve(this.verifiedAuthorizationRequest.responseURI);
|
|
1044
779
|
}
|
|
1045
|
-
async hasPresentationDefinitions() {
|
|
1046
|
-
const defs = this._providedPresentationDefinitions ?? (await this.getAuthorizationRequest()).presentationDefinitions;
|
|
1047
|
-
return defs !== void 0 && defs.length > 0;
|
|
1048
|
-
}
|
|
1049
|
-
async getPresentationDefinitions() {
|
|
1050
|
-
if (!await this.hasPresentationDefinitions()) {
|
|
1051
|
-
throw Error(`No presentation definitions found`);
|
|
1052
|
-
}
|
|
1053
|
-
return this._providedPresentationDefinitions ?? (await this.getAuthorizationRequest()).presentationDefinitions;
|
|
1054
|
-
}
|
|
1055
780
|
async getOID4VP(args) {
|
|
1056
781
|
return await OID4VP.init(this, args.allIdentifiers ?? [], args.hasher);
|
|
1057
782
|
}
|
|
1058
|
-
createPresentationVerificationCallback(context) {
|
|
1059
|
-
async function presentationVerificationCallback(args, presentationSubmission) {
|
|
1060
|
-
let result;
|
|
1061
|
-
if (import_ssi_types.CredentialMapper.isSdJwtEncoded(args)) {
|
|
1062
|
-
try {
|
|
1063
|
-
const sdJwtResult = await context.agent.verifySdJwtPresentation({
|
|
1064
|
-
presentation: args
|
|
1065
|
-
});
|
|
1066
|
-
result = {
|
|
1067
|
-
verified: "header" in sdJwtResult,
|
|
1068
|
-
error: "header" in sdJwtResult ? void 0 : {
|
|
1069
|
-
message: "could not verify SD JWT presentation"
|
|
1070
|
-
}
|
|
1071
|
-
};
|
|
1072
|
-
} catch (error) {
|
|
1073
|
-
result = {
|
|
1074
|
-
verified: false,
|
|
1075
|
-
error: {
|
|
1076
|
-
message: error.message
|
|
1077
|
-
}
|
|
1078
|
-
};
|
|
1079
|
-
}
|
|
1080
|
-
} else {
|
|
1081
|
-
result = await context.agent.verifyPresentation({
|
|
1082
|
-
presentation: args
|
|
1083
|
-
});
|
|
1084
|
-
}
|
|
1085
|
-
return result;
|
|
1086
|
-
}
|
|
1087
|
-
__name(presentationVerificationCallback, "presentationVerificationCallback");
|
|
1088
|
-
return presentationVerificationCallback;
|
|
1089
|
-
}
|
|
1090
783
|
async createJarmResponseCallback({ responseOpts }) {
|
|
1091
784
|
const agent = this.context.agent;
|
|
1092
785
|
return /* @__PURE__ */ __name(async function jarmResponse(opts) {
|
|
1093
786
|
const { clientMetadata, requestObjectPayload, authorizationResponsePayload: authResponse } = opts;
|
|
1094
|
-
const jwk = await
|
|
787
|
+
const jwk = await import_did_auth_siop2.OP.extractEncJwksFromClientMetadata(clientMetadata);
|
|
1095
788
|
const recipientKey = await agent.identifierExternalResolveByJwk({
|
|
1096
789
|
identifier: jwk
|
|
1097
790
|
});
|
|
@@ -1100,8 +793,8 @@ var OpSession = class _OpSession {
|
|
|
1100
793
|
protectedHeader: {},
|
|
1101
794
|
alg: requestObjectPayload.client_metadata.authorization_encrypted_response_alg ?? "ECDH-ES",
|
|
1102
795
|
enc: requestObjectPayload.client_metadata.authorization_encrypted_response_enc ?? "A256GCM",
|
|
1103
|
-
apv: (0,
|
|
1104
|
-
apu: (0,
|
|
796
|
+
apv: (0, import_ssi_sdk2.encodeBase64url)(opts.requestObjectPayload.nonce),
|
|
797
|
+
apu: (0, import_ssi_sdk2.encodeBase64url)((0, import_uuid.v4)()),
|
|
1105
798
|
payload: authResponse,
|
|
1106
799
|
issuer: responseOpts.issuer,
|
|
1107
800
|
audience: responseOpts.audience
|
|
@@ -1113,8 +806,9 @@ var OpSession = class _OpSession {
|
|
|
1113
806
|
}, "jarmResponse");
|
|
1114
807
|
}
|
|
1115
808
|
async sendAuthorizationResponse(args) {
|
|
809
|
+
const { responseSignerOpts, dcqlResponse, isFirstParty } = args;
|
|
1116
810
|
const resolveOpts = this.options.resolveOpts ?? {
|
|
1117
|
-
resolver: (0,
|
|
811
|
+
resolver: (0, import_ssi_sdk_ext2.getAgentResolver)(this.context, {
|
|
1118
812
|
uniresolverResolution: true,
|
|
1119
813
|
localResolution: true,
|
|
1120
814
|
resolverResolution: true
|
|
@@ -1123,23 +817,7 @@ var OpSession = class _OpSession {
|
|
|
1123
817
|
if (!resolveOpts.subjectSyntaxTypesSupported || resolveOpts.subjectSyntaxTypesSupported.length === 0) {
|
|
1124
818
|
resolveOpts.subjectSyntaxTypesSupported = await this.getSupportedDIDMethods(true);
|
|
1125
819
|
}
|
|
1126
|
-
const verification = {
|
|
1127
|
-
presentationVerificationCallback: this.createPresentationVerificationCallback(this.context)
|
|
1128
|
-
};
|
|
1129
820
|
const request = await this.getAuthorizationRequest();
|
|
1130
|
-
const hasDefinitions = await this.hasPresentationDefinitions();
|
|
1131
|
-
if (hasDefinitions) {
|
|
1132
|
-
const totalInputDescriptors = request.presentationDefinitions?.reduce((sum, pd) => {
|
|
1133
|
-
return sum + pd.definition.input_descriptors.length;
|
|
1134
|
-
}, 0);
|
|
1135
|
-
const totalVCs = args.verifiablePresentations ? this.countVCsInAllVPs(args.verifiablePresentations, args.hasher) : 0;
|
|
1136
|
-
if (!request.presentationDefinitions || !args.verifiablePresentations || totalVCs !== totalInputDescriptors) {
|
|
1137
|
-
throw Error(`Amount of presentations ${args.verifiablePresentations?.length}, doesn't match expected ${request.presentationDefinitions?.length}`);
|
|
1138
|
-
} else if (!args.presentationSubmission) {
|
|
1139
|
-
throw Error(`Presentation submission is required when verifiable presentations are required`);
|
|
1140
|
-
}
|
|
1141
|
-
}
|
|
1142
|
-
const verifiablePresentations = args.verifiablePresentations ? args.verifiablePresentations.map((vp) => import_ssi_types.CredentialMapper.storedPresentationToOriginalFormat(vp)) : [];
|
|
1143
821
|
const op = await createOP({
|
|
1144
822
|
opOptions: {
|
|
1145
823
|
...this.options,
|
|
@@ -1151,23 +829,16 @@ var OpSession = class _OpSession {
|
|
|
1151
829
|
wellknownDIDVerifyCallback: this.options.wellknownDIDVerifyCallback,
|
|
1152
830
|
supportedVersions: request.versions
|
|
1153
831
|
},
|
|
1154
|
-
idOpts:
|
|
832
|
+
idOpts: responseSignerOpts,
|
|
1155
833
|
context: this.context
|
|
1156
834
|
});
|
|
1157
|
-
let issuer =
|
|
835
|
+
let issuer = responseSignerOpts.issuer;
|
|
1158
836
|
const responseOpts = {
|
|
1159
|
-
verification,
|
|
1160
837
|
issuer,
|
|
1161
|
-
...
|
|
1162
|
-
isFirstParty
|
|
838
|
+
...isFirstParty && {
|
|
839
|
+
isFirstParty
|
|
1163
840
|
},
|
|
1164
|
-
|
|
1165
|
-
presentationExchange: {
|
|
1166
|
-
verifiablePresentations,
|
|
1167
|
-
presentationSubmission: args.presentationSubmission
|
|
1168
|
-
}
|
|
1169
|
-
},
|
|
1170
|
-
dcqlQuery: args.dcqlResponse
|
|
841
|
+
dcqlResponse
|
|
1171
842
|
};
|
|
1172
843
|
const authResponse = await op.createAuthorizationResponse(request, responseOpts);
|
|
1173
844
|
const response = await op.submitAuthorizationResponse(authResponse, await this.createJarmResponseCallback({
|
|
@@ -1179,24 +850,6 @@ var OpSession = class _OpSession {
|
|
|
1179
850
|
return response;
|
|
1180
851
|
}
|
|
1181
852
|
}
|
|
1182
|
-
countVCsInAllVPs(verifiablePresentations, hasher) {
|
|
1183
|
-
return verifiablePresentations.reduce((sum, vp) => {
|
|
1184
|
-
if (import_ssi_types.CredentialMapper.isMsoMdocDecodedPresentation(vp) || import_ssi_types.CredentialMapper.isMsoMdocOid4VPEncoded(vp)) {
|
|
1185
|
-
return sum + 1;
|
|
1186
|
-
}
|
|
1187
|
-
const uvp = import_ssi_types.CredentialMapper.toUniformPresentation(vp, {
|
|
1188
|
-
hasher: hasher ?? this.options.hasher
|
|
1189
|
-
});
|
|
1190
|
-
if (uvp.verifiableCredential?.length) {
|
|
1191
|
-
return sum + uvp.verifiableCredential?.length;
|
|
1192
|
-
}
|
|
1193
|
-
const isSdJWT = import_ssi_types.CredentialMapper.isSdJwtDecodedCredential(uvp);
|
|
1194
|
-
if (isSdJWT || uvp.verifiableCredential && !import_pex2.PEX.allowMultipleVCsPerPresentation(uvp.verifiableCredential)) {
|
|
1195
|
-
return sum + 1;
|
|
1196
|
-
}
|
|
1197
|
-
return sum;
|
|
1198
|
-
}, 0);
|
|
1199
|
-
}
|
|
1200
853
|
};
|
|
1201
854
|
function convertDidMethod(didMethod, didPrefix) {
|
|
1202
855
|
if (didPrefix === false) {
|
|
@@ -1206,10 +859,79 @@ function convertDidMethod(didMethod, didPrefix) {
|
|
|
1206
859
|
}
|
|
1207
860
|
__name(convertDidMethod, "convertDidMethod");
|
|
1208
861
|
|
|
1209
|
-
// src/
|
|
1210
|
-
var
|
|
1211
|
-
var
|
|
1212
|
-
|
|
862
|
+
// src/types/IDidAuthSiopOpAuthenticator.ts
|
|
863
|
+
var LOGGER_NAMESPACE = "sphereon:siopv2-oid4vp:op-auth";
|
|
864
|
+
var DEFAULT_JWT_PROOF_TYPE = "JwtProof2020";
|
|
865
|
+
|
|
866
|
+
// src/types/siop-service/index.ts
|
|
867
|
+
var Siopv2HolderEvent = /* @__PURE__ */ function(Siopv2HolderEvent2) {
|
|
868
|
+
Siopv2HolderEvent2["CONTACT_IDENTITY_CREATED"] = "contact_identity_created";
|
|
869
|
+
Siopv2HolderEvent2["IDENTIFIER_CREATED"] = "identifier_created";
|
|
870
|
+
return Siopv2HolderEvent2;
|
|
871
|
+
}({});
|
|
872
|
+
var SupportedLanguage = /* @__PURE__ */ function(SupportedLanguage2) {
|
|
873
|
+
SupportedLanguage2["ENGLISH"] = "en";
|
|
874
|
+
SupportedLanguage2["DUTCH"] = "nl";
|
|
875
|
+
return SupportedLanguage2;
|
|
876
|
+
}({});
|
|
877
|
+
|
|
878
|
+
// src/types/machine/index.ts
|
|
879
|
+
var Siopv2MachineStates = /* @__PURE__ */ function(Siopv2MachineStates2) {
|
|
880
|
+
Siopv2MachineStates2["createConfig"] = "createConfig";
|
|
881
|
+
Siopv2MachineStates2["getSiopRequest"] = "getSiopRequest";
|
|
882
|
+
Siopv2MachineStates2["getSelectableCredentials"] = "getSelectableCredentials";
|
|
883
|
+
Siopv2MachineStates2["retrieveContact"] = "retrieveContact";
|
|
884
|
+
Siopv2MachineStates2["transitionFromSetup"] = "transitionFromSetup";
|
|
885
|
+
Siopv2MachineStates2["addContact"] = "addContact";
|
|
886
|
+
Siopv2MachineStates2["addContactIdentity"] = "addContactIdentity";
|
|
887
|
+
Siopv2MachineStates2["selectCredentials"] = "selectCredentials";
|
|
888
|
+
Siopv2MachineStates2["sendResponse"] = "sendResponse";
|
|
889
|
+
Siopv2MachineStates2["handleError"] = "handleError";
|
|
890
|
+
Siopv2MachineStates2["aborted"] = "aborted";
|
|
891
|
+
Siopv2MachineStates2["declined"] = "declined";
|
|
892
|
+
Siopv2MachineStates2["error"] = "error";
|
|
893
|
+
Siopv2MachineStates2["done"] = "done";
|
|
894
|
+
return Siopv2MachineStates2;
|
|
895
|
+
}({});
|
|
896
|
+
var Siopv2MachineAddContactStates = /* @__PURE__ */ function(Siopv2MachineAddContactStates2) {
|
|
897
|
+
Siopv2MachineAddContactStates2["idle"] = "idle";
|
|
898
|
+
Siopv2MachineAddContactStates2["executing"] = "executing";
|
|
899
|
+
Siopv2MachineAddContactStates2["next"] = "next";
|
|
900
|
+
return Siopv2MachineAddContactStates2;
|
|
901
|
+
}({});
|
|
902
|
+
var Siopv2MachineEvents = /* @__PURE__ */ function(Siopv2MachineEvents2) {
|
|
903
|
+
Siopv2MachineEvents2["NEXT"] = "NEXT";
|
|
904
|
+
Siopv2MachineEvents2["PREVIOUS"] = "PREVIOUS";
|
|
905
|
+
Siopv2MachineEvents2["DECLINE"] = "DECLINE";
|
|
906
|
+
Siopv2MachineEvents2["SET_CONTACT_ALIAS"] = "SET_CONTACT_ALIAS";
|
|
907
|
+
Siopv2MachineEvents2["SET_CONTACT_CONSENT"] = "SET_CONTACT_CONSENT";
|
|
908
|
+
Siopv2MachineEvents2["CREATE_CONTACT"] = "CREATE_CONTACT";
|
|
909
|
+
Siopv2MachineEvents2["SET_SELECTED_CREDENTIALS"] = "SET_SELECTED_CREDENTIALS";
|
|
910
|
+
return Siopv2MachineEvents2;
|
|
911
|
+
}({});
|
|
912
|
+
var Siopv2MachineGuards = /* @__PURE__ */ function(Siopv2MachineGuards2) {
|
|
913
|
+
Siopv2MachineGuards2["hasNoContactGuard"] = "Siopv2HasNoContactGuard";
|
|
914
|
+
Siopv2MachineGuards2["createContactGuard"] = "Siopv2CreateContactGuard";
|
|
915
|
+
Siopv2MachineGuards2["hasContactGuard"] = "Siopv2HasContactGuard";
|
|
916
|
+
Siopv2MachineGuards2["hasAuthorizationRequestGuard"] = "Siopv2HasAuthorizationRequestGuard";
|
|
917
|
+
Siopv2MachineGuards2["hasSelectableCredentialsAndContactGuard"] = "Siopv2HasSelectableCredentialsAndContactGuard";
|
|
918
|
+
Siopv2MachineGuards2["hasSelectedRequiredCredentialsGuard"] = "Siopv2HasSelectedRequiredCredentialsGuard";
|
|
919
|
+
Siopv2MachineGuards2["siopOnlyGuard"] = "Siopv2IsSiopOnlyGuard";
|
|
920
|
+
Siopv2MachineGuards2["siopWithOID4VPGuard"] = "Siopv2IsSiopWithOID4VPGuard";
|
|
921
|
+
return Siopv2MachineGuards2;
|
|
922
|
+
}({});
|
|
923
|
+
var Siopv2MachineServices = /* @__PURE__ */ function(Siopv2MachineServices2) {
|
|
924
|
+
Siopv2MachineServices2["getSiopRequest"] = "getSiopRequest";
|
|
925
|
+
Siopv2MachineServices2["getSelectableCredentials"] = "getSelectableCredentials";
|
|
926
|
+
Siopv2MachineServices2["retrieveContact"] = "retrieveContact";
|
|
927
|
+
Siopv2MachineServices2["addContactIdentity"] = "addContactIdentity";
|
|
928
|
+
Siopv2MachineServices2["sendResponse"] = "sendResponse";
|
|
929
|
+
Siopv2MachineServices2["createConfig"] = "createConfig";
|
|
930
|
+
return Siopv2MachineServices2;
|
|
931
|
+
}({});
|
|
932
|
+
|
|
933
|
+
// src/types/identifier/index.ts
|
|
934
|
+
var DID_PREFIX = "did";
|
|
1213
935
|
|
|
1214
936
|
// src/machine/Siopv2Machine.ts
|
|
1215
937
|
var import_xstate = require("xstate");
|
|
@@ -1278,7 +1000,7 @@ var Siopv2HasSelectableCredentialsAndContactGuard = /* @__PURE__ */ __name((_ctx
|
|
|
1278
1000
|
if (!contact) {
|
|
1279
1001
|
throw new Error("Missing contact request data in context");
|
|
1280
1002
|
}
|
|
1281
|
-
return authorizationRequestData.
|
|
1003
|
+
return authorizationRequestData.dcqlQuery !== void 0;
|
|
1282
1004
|
}, "Siopv2HasSelectableCredentialsAndContactGuard");
|
|
1283
1005
|
var Siopv2CreateContactGuard = /* @__PURE__ */ __name((_ctx, _event) => {
|
|
1284
1006
|
const { contactAlias, hasContactConsent } = _ctx;
|
|
@@ -1289,7 +1011,7 @@ var Siopv2HasSelectedRequiredCredentialsGuard = /* @__PURE__ */ __name((_ctx, _e
|
|
|
1289
1011
|
if (authorizationRequestData === void 0) {
|
|
1290
1012
|
throw new Error("Missing authorization request data in context");
|
|
1291
1013
|
}
|
|
1292
|
-
if (authorizationRequestData.
|
|
1014
|
+
if (authorizationRequestData.dcqlQuery === void 0) {
|
|
1293
1015
|
throw Error("No presentation definitions present");
|
|
1294
1016
|
}
|
|
1295
1017
|
return _ctx.selectedCredentials.length > 0;
|
|
@@ -1299,7 +1021,7 @@ var Siopv2IsSiopOnlyGuard = /* @__PURE__ */ __name((_ctx, _event) => {
|
|
|
1299
1021
|
if (authorizationRequestData === void 0) {
|
|
1300
1022
|
throw new Error("Missing authorization request data in context");
|
|
1301
1023
|
}
|
|
1302
|
-
return authorizationRequestData.
|
|
1024
|
+
return authorizationRequestData.dcqlQuery === void 0;
|
|
1303
1025
|
}, "Siopv2IsSiopOnlyGuard");
|
|
1304
1026
|
var Siopv2IsSiopWithOID4VPGuard = /* @__PURE__ */ __name((_ctx, _event) => {
|
|
1305
1027
|
const { authorizationRequestData, selectableCredentialsMap } = _ctx;
|
|
@@ -1309,7 +1031,7 @@ var Siopv2IsSiopWithOID4VPGuard = /* @__PURE__ */ __name((_ctx, _event) => {
|
|
|
1309
1031
|
if (!selectableCredentialsMap) {
|
|
1310
1032
|
throw new Error("Missing selectableCredentialsMap in context");
|
|
1311
1033
|
}
|
|
1312
|
-
return authorizationRequestData.
|
|
1034
|
+
return authorizationRequestData.dcqlQuery !== void 0;
|
|
1313
1035
|
}, "Siopv2IsSiopWithOID4VPGuard");
|
|
1314
1036
|
var createSiopv2Machine = /* @__PURE__ */ __name((opts) => {
|
|
1315
1037
|
const { url, idOpts: idOpts2 } = opts;
|
|
@@ -1625,367 +1347,206 @@ var Siopv2Machine = class {
|
|
|
1625
1347
|
|
|
1626
1348
|
// src/services/Siopv2MachineService.ts
|
|
1627
1349
|
var import_did_auth_siop4 = require("@sphereon/did-auth-siop");
|
|
1628
|
-
var
|
|
1629
|
-
var
|
|
1630
|
-
var
|
|
1631
|
-
var import_ssi_sdk6 = require("@sphereon/ssi-sdk.data-store");
|
|
1350
|
+
var import_ssi_sdk_ext3 = require("@sphereon/ssi-sdk-ext.identifier-resolution");
|
|
1351
|
+
var import_ssi_sdk3 = require("@sphereon/ssi-sdk.credential-store");
|
|
1352
|
+
var import_ssi_sdk4 = require("@sphereon/ssi-sdk.data-store");
|
|
1632
1353
|
var import_ssi_types6 = require("@sphereon/ssi-types");
|
|
1633
|
-
var
|
|
1634
|
-
var
|
|
1354
|
+
var import_ssi_types7 = require("@sphereon/ssi-types");
|
|
1355
|
+
var import_ssi_sdk5 = require("@sphereon/ssi-sdk.core");
|
|
1635
1356
|
var import_dcql = require("dcql");
|
|
1636
1357
|
|
|
1637
1358
|
// src/utils/dcql.ts
|
|
1638
1359
|
var import_ssi_types5 = require("@sphereon/ssi-types");
|
|
1360
|
+
var import_did_auth_siop3 = require("@sphereon/did-auth-siop");
|
|
1639
1361
|
|
|
1640
1362
|
// src/utils/CredentialUtils.ts
|
|
1641
1363
|
var import_ssi_types4 = require("@sphereon/ssi-types");
|
|
1642
|
-
var getOriginalVerifiableCredential = /* @__PURE__ */ __name((credential) => {
|
|
1643
|
-
if (isUniqueDigitalCredential(credential)) {
|
|
1644
|
-
if (!credential.originalVerifiableCredential) {
|
|
1645
|
-
throw new Error("originalVerifiableCredential is not defined in UniqueDigitalCredential");
|
|
1646
|
-
}
|
|
1647
|
-
return getCredentialFromProofOrWrapped(credential.originalVerifiableCredential);
|
|
1648
|
-
}
|
|
1649
|
-
return getCredentialFromProofOrWrapped(credential);
|
|
1650
|
-
}, "getOriginalVerifiableCredential");
|
|
1651
|
-
var getCredentialFromProofOrWrapped = /* @__PURE__ */ __name((cred, hasher) => {
|
|
1652
|
-
if (typeof cred === "object" && "proof" in cred && "jwt" in cred.proof && import_ssi_types4.CredentialMapper.isSdJwtEncoded(cred.proof.jwt)) {
|
|
1653
|
-
return cred.proof.jwt;
|
|
1654
|
-
}
|
|
1655
|
-
return import_ssi_types4.CredentialMapper.toWrappedVerifiableCredential(cred, {
|
|
1656
|
-
hasher
|
|
1657
|
-
}).original;
|
|
1658
|
-
}, "getCredentialFromProofOrWrapped");
|
|
1659
1364
|
var isUniqueDigitalCredential = /* @__PURE__ */ __name((credential) => {
|
|
1660
1365
|
return credential.digitalCredential !== void 0;
|
|
1661
1366
|
}, "isUniqueDigitalCredential");
|
|
1662
1367
|
|
|
1663
1368
|
// src/utils/dcql.ts
|
|
1664
1369
|
function convertToDcqlCredentials(credential, hasher) {
|
|
1665
|
-
let
|
|
1370
|
+
let originalVerifiableCredential;
|
|
1666
1371
|
if (isUniqueDigitalCredential(credential)) {
|
|
1667
1372
|
if (!credential.originalVerifiableCredential) {
|
|
1668
1373
|
throw new Error("originalVerifiableCredential is not defined in UniqueDigitalCredential");
|
|
1669
1374
|
}
|
|
1670
|
-
|
|
1375
|
+
originalVerifiableCredential = import_ssi_types5.CredentialMapper.decodeVerifiableCredential(credential.originalVerifiableCredential, hasher);
|
|
1671
1376
|
} else {
|
|
1672
|
-
|
|
1377
|
+
originalVerifiableCredential = import_ssi_types5.CredentialMapper.decodeVerifiableCredential(credential, hasher);
|
|
1673
1378
|
}
|
|
1674
|
-
if (!
|
|
1379
|
+
if (!originalVerifiableCredential) {
|
|
1675
1380
|
throw new Error("No payload found");
|
|
1676
1381
|
}
|
|
1677
|
-
if (
|
|
1678
|
-
|
|
1679
|
-
}
|
|
1680
|
-
|
|
1681
|
-
|
|
1682
|
-
|
|
1683
|
-
|
|
1684
|
-
|
|
1685
|
-
};
|
|
1686
|
-
} else if ("docType" in payload && "namespaces" in payload) {
|
|
1687
|
-
return {
|
|
1688
|
-
docType: payload.docType,
|
|
1689
|
-
namespaces: payload.namespaces,
|
|
1690
|
-
claims: payload
|
|
1691
|
-
};
|
|
1692
|
-
} else {
|
|
1693
|
-
return {
|
|
1694
|
-
claims: payload,
|
|
1695
|
-
credential_format: "jwt_vc_json"
|
|
1696
|
-
};
|
|
1382
|
+
if (import_ssi_types5.CredentialMapper.isJwtDecodedCredential(originalVerifiableCredential)) {
|
|
1383
|
+
return import_did_auth_siop3.Dcql.toDcqlJwtCredential(import_ssi_types5.CredentialMapper.toWrappedVerifiableCredential(originalVerifiableCredential));
|
|
1384
|
+
} else if (import_ssi_types5.CredentialMapper.isSdJwtDecodedCredential(originalVerifiableCredential)) {
|
|
1385
|
+
return import_did_auth_siop3.Dcql.toDcqlSdJwtCredential(import_ssi_types5.CredentialMapper.toWrappedVerifiableCredential(originalVerifiableCredential));
|
|
1386
|
+
} else if (import_ssi_types5.CredentialMapper.isMsoMdocDecodedCredential(originalVerifiableCredential)) {
|
|
1387
|
+
return import_did_auth_siop3.Dcql.toDcqlMdocCredential(import_ssi_types5.CredentialMapper.toWrappedVerifiableCredential(originalVerifiableCredential));
|
|
1388
|
+
} else if (import_ssi_types5.CredentialMapper.isW3cCredential(originalVerifiableCredential)) {
|
|
1389
|
+
return import_did_auth_siop3.Dcql.toDcqlJsonLdCredential(import_ssi_types5.CredentialMapper.toWrappedVerifiableCredential(originalVerifiableCredential));
|
|
1697
1390
|
}
|
|
1391
|
+
throw Error(`Unable to map credential to DCQL credential. Credential: ${JSON.stringify(originalVerifiableCredential)}`);
|
|
1698
1392
|
}
|
|
1699
1393
|
__name(convertToDcqlCredentials, "convertToDcqlCredentials");
|
|
1700
1394
|
|
|
1701
1395
|
// src/services/Siopv2MachineService.ts
|
|
1702
|
-
var
|
|
1703
|
-
var
|
|
1704
|
-
logger3.log(`No EBSI key present yet. Creating a new one...`);
|
|
1705
|
-
const { result: newIdentifier, created } = await (0, import_ssi_sdk_ext5.getOrCreatePrimaryIdentifier)(agentContext, {
|
|
1706
|
-
method: import_ssi_sdk_ext5.SupportedDidMethodEnum.DID_KEY,
|
|
1707
|
-
createOpts: {
|
|
1708
|
-
options: {
|
|
1709
|
-
codecName: "jwk_jcs-pub",
|
|
1710
|
-
type: "Secp256r1"
|
|
1711
|
-
}
|
|
1712
|
-
}
|
|
1713
|
-
});
|
|
1714
|
-
logger3.log(`EBSI key created: ${newIdentifier.did}`);
|
|
1715
|
-
if (created) {
|
|
1716
|
-
await agentContext.agent.emit(Siopv2HolderEvent.IDENTIFIER_CREATED, {
|
|
1717
|
-
result: newIdentifier
|
|
1718
|
-
});
|
|
1719
|
-
}
|
|
1720
|
-
return await agentContext.agent.identifierManagedGetByDid({
|
|
1721
|
-
identifier: newIdentifier.did
|
|
1722
|
-
});
|
|
1723
|
-
}, "createEbsiIdentifier");
|
|
1724
|
-
var hasEbsiClient = /* @__PURE__ */ __name(async (authorizationRequest) => {
|
|
1725
|
-
const clientId = await authorizationRequest.getMergedProperty("client_id");
|
|
1726
|
-
const redirectUri = await authorizationRequest.getMergedProperty("redirect_uri");
|
|
1727
|
-
return clientId?.toLowerCase().includes(".ebsi.eu") || redirectUri?.toLowerCase().includes(".ebsi.eu");
|
|
1728
|
-
}, "hasEbsiClient");
|
|
1396
|
+
var import_ssi_sdk_ext4 = require("@sphereon/ssi-sdk-ext.did-utils");
|
|
1397
|
+
var logger3 = import_ssi_types7.Loggers.DEFAULT.get(LOGGER_NAMESPACE);
|
|
1729
1398
|
var siopSendAuthorizationResponse = /* @__PURE__ */ __name(async (connectionType, args, context) => {
|
|
1730
1399
|
const { agent } = context;
|
|
1731
|
-
const
|
|
1732
|
-
|
|
1733
|
-
agent: context.agent
|
|
1734
|
-
};
|
|
1735
|
-
let { idOpts: idOpts2, isFirstParty, hasher = import_ssi_sdk7.defaultHasher } = args;
|
|
1736
|
-
if (connectionType !== import_ssi_sdk6.ConnectionType.SIOPv2_OpenID4VP) {
|
|
1400
|
+
const { credentials } = args;
|
|
1401
|
+
if (connectionType !== import_ssi_sdk4.ConnectionType.SIOPv2_OpenID4VP) {
|
|
1737
1402
|
return Promise.reject(Error(`No supported authentication provider for type: ${connectionType}`));
|
|
1738
1403
|
}
|
|
1739
1404
|
const session = await agent.siopGetOPSession({
|
|
1740
1405
|
sessionId: args.sessionId
|
|
1741
1406
|
});
|
|
1742
1407
|
const request = await session.getAuthorizationRequest();
|
|
1743
|
-
const aud =
|
|
1408
|
+
const aud = request.authorizationRequest.getMergedProperty("aud");
|
|
1744
1409
|
logger3.debug(`AUD: ${aud}`);
|
|
1745
1410
|
logger3.debug(JSON.stringify(request.authorizationRequest));
|
|
1746
|
-
|
|
1747
|
-
|
|
1748
|
-
|
|
1749
|
-
|
|
1750
|
-
|
|
1751
|
-
|
|
1752
|
-
|
|
1753
|
-
|
|
1754
|
-
|
|
1755
|
-
|
|
1756
|
-
|
|
1757
|
-
|
|
1758
|
-
|
|
1759
|
-
|
|
1760
|
-
|
|
1761
|
-
|
|
1762
|
-
|
|
1763
|
-
|
|
1764
|
-
|
|
1765
|
-
|
|
1766
|
-
if (!digitalCredential.kmsKeyRef) {
|
|
1767
|
-
if (!holder) {
|
|
1768
|
-
return Promise.reject(`No holder found and no kmsKeyRef in DB. Cannot determine identifier to use`);
|
|
1769
|
-
}
|
|
1770
|
-
try {
|
|
1771
|
-
identifier = await session.context.agent.identifierManagedGet({
|
|
1772
|
-
identifier: holder
|
|
1773
|
-
});
|
|
1774
|
-
} catch (e) {
|
|
1775
|
-
logger3.debug(`Holder DID not found: ${holder}`);
|
|
1776
|
-
throw e;
|
|
1777
|
-
}
|
|
1778
|
-
} else if ((0, import_ssi_sdk_ext4.isOID4VCIssuerIdentifier)(digitalCredential.kmsKeyRef)) {
|
|
1779
|
-
identifier = await session.context.agent.identifierManagedGetByOID4VCIssuer({
|
|
1780
|
-
identifier: firstUniqueDC.digitalCredential.kmsKeyRef
|
|
1411
|
+
const domain = await request.authorizationRequest.getMergedProperty("client_id") ?? request.issuer ?? (request.versions.includes(import_did_auth_siop4.SupportedVersion.JWT_VC_PRESENTATION_PROFILE_v1) ? "https://self-issued.me/v2/openid-vc" : "https://self-issued.me/v2");
|
|
1412
|
+
logger3.debug(`NONCE: ${session.nonce}, domain: ${domain}`);
|
|
1413
|
+
const firstUniqueDC = credentials[0];
|
|
1414
|
+
if (typeof firstUniqueDC !== "object" || !("digitalCredential" in firstUniqueDC)) {
|
|
1415
|
+
return Promise.reject(Error("SiopMachine only supports UniqueDigitalCredentials for now"));
|
|
1416
|
+
}
|
|
1417
|
+
let identifier;
|
|
1418
|
+
const digitalCredential = firstUniqueDC.digitalCredential;
|
|
1419
|
+
const firstVC = firstUniqueDC.uniformVerifiableCredential;
|
|
1420
|
+
const holder = import_ssi_types7.CredentialMapper.isSdJwtDecodedCredential(firstVC) ? firstVC.decodedPayload.cnf?.jwk ? (
|
|
1421
|
+
//doesn't apply to did:jwk only, as you can represent any DID key as a JWK. So whenever you encounter a JWK it doesn't mean it had to come from a did:jwk in the system. It just can always be represented as a did:jwk
|
|
1422
|
+
`did:jwk:${(0, import_ssi_sdk5.encodeJoseBlob)(firstVC.decodedPayload.cnf?.jwk)}#0`
|
|
1423
|
+
) : firstVC.decodedPayload.sub : Array.isArray(firstVC.credentialSubject) ? firstVC.credentialSubject[0].id : firstVC.credentialSubject.id;
|
|
1424
|
+
if (!digitalCredential.kmsKeyRef) {
|
|
1425
|
+
if (!holder) {
|
|
1426
|
+
return Promise.reject(`No holder found and no kmsKeyRef in DB. Cannot determine identifier to use`);
|
|
1427
|
+
}
|
|
1428
|
+
try {
|
|
1429
|
+
identifier = await session.context.agent.identifierManagedGet({
|
|
1430
|
+
identifier: holder
|
|
1781
1431
|
});
|
|
1782
|
-
}
|
|
1783
|
-
|
|
1784
|
-
|
|
1785
|
-
identifier = await session.context.agent.identifierManagedGetByDid({
|
|
1786
|
-
identifier: digitalCredential.subjectCorrelationId ?? holder,
|
|
1787
|
-
kmsKeyRef: digitalCredential.kmsKeyRef
|
|
1788
|
-
});
|
|
1789
|
-
break;
|
|
1790
|
-
// TODO other implementations?
|
|
1791
|
-
default:
|
|
1792
|
-
if (digitalCredential.subjectCorrelationId?.startsWith("did:") || holder?.startsWith("did:")) {
|
|
1793
|
-
identifier = await session.context.agent.identifierManagedGetByDid({
|
|
1794
|
-
identifier: digitalCredential.subjectCorrelationId ?? holder,
|
|
1795
|
-
kmsKeyRef: digitalCredential.kmsKeyRef
|
|
1796
|
-
});
|
|
1797
|
-
} else {
|
|
1798
|
-
identifier = await session.context.agent.identifierManagedGetByKid({
|
|
1799
|
-
identifier: digitalCredential.subjectCorrelationId ?? holder ?? digitalCredential.kmsKeyRef,
|
|
1800
|
-
kmsKeyRef: digitalCredential.kmsKeyRef
|
|
1801
|
-
});
|
|
1802
|
-
}
|
|
1803
|
-
}
|
|
1804
|
-
}
|
|
1805
|
-
if (identifier === void 0 && idOpts2 !== void 0 && await hasEbsiClient(request.authorizationRequest)) {
|
|
1806
|
-
identifier = await createEbsiIdentifier(agentContext);
|
|
1432
|
+
} catch (e) {
|
|
1433
|
+
logger3.debug(`Holder DID not found: ${holder}`);
|
|
1434
|
+
throw e;
|
|
1807
1435
|
}
|
|
1808
|
-
|
|
1809
|
-
|
|
1810
|
-
|
|
1811
|
-
proofOpts: {
|
|
1812
|
-
nonce: session.nonce,
|
|
1813
|
-
domain
|
|
1814
|
-
}
|
|
1436
|
+
} else if ((0, import_ssi_sdk_ext3.isOID4VCIssuerIdentifier)(digitalCredential.kmsKeyRef)) {
|
|
1437
|
+
identifier = await session.context.agent.identifierManagedGetByOID4VCIssuer({
|
|
1438
|
+
identifier: firstUniqueDC.digitalCredential.kmsKeyRef
|
|
1815
1439
|
});
|
|
1816
|
-
|
|
1817
|
-
|
|
1818
|
-
|
|
1819
|
-
|
|
1440
|
+
} else {
|
|
1441
|
+
switch (digitalCredential.subjectCorrelationType) {
|
|
1442
|
+
case "DID":
|
|
1443
|
+
identifier = await session.context.agent.identifierManagedGetByDid({
|
|
1444
|
+
identifier: digitalCredential.subjectCorrelationId ?? holder,
|
|
1445
|
+
kmsKeyRef: digitalCredential.kmsKeyRef
|
|
1446
|
+
});
|
|
1447
|
+
break;
|
|
1448
|
+
// TODO other implementations?
|
|
1449
|
+
default:
|
|
1450
|
+
identifier = await session.context.agent.identifierManagedGetByKid({
|
|
1451
|
+
identifier: digitalCredential.subjectCorrelationId ?? holder ?? digitalCredential.kmsKeyRef,
|
|
1452
|
+
kmsKeyRef: digitalCredential.kmsKeyRef
|
|
1453
|
+
});
|
|
1820
1454
|
}
|
|
1821
|
-
|
|
1822
|
-
|
|
1823
|
-
|
|
1824
|
-
|
|
1825
|
-
|
|
1826
|
-
|
|
1827
|
-
|
|
1828
|
-
|
|
1829
|
-
|
|
1830
|
-
|
|
1831
|
-
|
|
1832
|
-
|
|
1833
|
-
|
|
1834
|
-
|
|
1835
|
-
|
|
1836
|
-
|
|
1837
|
-
|
|
1838
|
-
if (args.verifiableCredentialsWithDefinition !== void 0 && args.verifiableCredentialsWithDefinition !== null) {
|
|
1839
|
-
const vcs = args.verifiableCredentialsWithDefinition.flatMap((vcd) => vcd.credentials);
|
|
1840
|
-
const domain = await request.authorizationRequest.getMergedProperty("client_id") ?? request.issuer ?? (request.versions.includes(import_did_auth_siop4.SupportedVersion.JWT_VC_PRESENTATION_PROFILE_v1) ? "https://self-issued.me/v2/openid-vc" : "https://self-issued.me/v2");
|
|
1841
|
-
logger3.debug(`NONCE: ${session.nonce}, domain: ${domain}`);
|
|
1842
|
-
const firstUniqueDC = vcs[0];
|
|
1843
|
-
if (typeof firstUniqueDC !== "object" || !("digitalCredential" in firstUniqueDC)) {
|
|
1844
|
-
return Promise.reject(Error("SiopMachine only supports UniqueDigitalCredentials for now"));
|
|
1455
|
+
}
|
|
1456
|
+
const dcqlCredentialsWithCredentials = new Map(credentials.map((vc) => [
|
|
1457
|
+
convertToDcqlCredentials(vc),
|
|
1458
|
+
vc
|
|
1459
|
+
]));
|
|
1460
|
+
const queryResult = import_dcql.DcqlQuery.query(request.dcqlQuery, Array.from(dcqlCredentialsWithCredentials.keys()));
|
|
1461
|
+
if (!queryResult.can_be_satisfied) {
|
|
1462
|
+
return Promise.reject(Error("Credentials do not match required query request"));
|
|
1463
|
+
}
|
|
1464
|
+
const presentation = {};
|
|
1465
|
+
const uniqueCredentials = Array.from(dcqlCredentialsWithCredentials.values());
|
|
1466
|
+
for (const [key, value] of Object.entries(queryResult.credential_matches)) {
|
|
1467
|
+
if (value.success) {
|
|
1468
|
+
const matchedCredentials = value.valid_credentials.map((cred) => uniqueCredentials[cred.input_credential_index]);
|
|
1469
|
+
const vc = matchedCredentials[0];
|
|
1470
|
+
if (!vc) {
|
|
1471
|
+
continue;
|
|
1845
1472
|
}
|
|
1846
|
-
|
|
1847
|
-
|
|
1848
|
-
|
|
1849
|
-
const holder = import_ssi_types6.CredentialMapper.isSdJwtDecodedCredential(firstVC) ? firstVC.decodedPayload.cnf?.jwk ? (
|
|
1850
|
-
//doesn't apply to did:jwk only, as you can represent any DID key as a JWK. So whenever you encounter a JWK it doesn't mean it had to come from a did:jwk in the system. It just can always be represented as a did:jwk
|
|
1851
|
-
`did:jwk:${(0, import_ssi_sdk7.encodeJoseBlob)(firstVC.decodedPayload.cnf?.jwk)}#0`
|
|
1852
|
-
) : firstVC.decodedPayload.sub : Array.isArray(firstVC.credentialSubject) ? firstVC.credentialSubject[0].id : firstVC.credentialSubject.id;
|
|
1853
|
-
if (!digitalCredential.kmsKeyRef) {
|
|
1854
|
-
if (!holder) {
|
|
1855
|
-
return Promise.reject(`No holder found and no kmsKeyRef in DB. Cannot determine identifier to use`);
|
|
1856
|
-
}
|
|
1857
|
-
try {
|
|
1858
|
-
identifier = await session.context.agent.identifierManagedGet({
|
|
1859
|
-
identifier: holder
|
|
1860
|
-
});
|
|
1861
|
-
} catch (e) {
|
|
1862
|
-
logger3.debug(`Holder DID not found: ${holder}`);
|
|
1863
|
-
throw e;
|
|
1864
|
-
}
|
|
1865
|
-
} else if ((0, import_ssi_sdk_ext4.isOID4VCIssuerIdentifier)(digitalCredential.kmsKeyRef)) {
|
|
1866
|
-
identifier = await session.context.agent.identifierManagedGetByOID4VCIssuer({
|
|
1867
|
-
identifier: firstUniqueDC.digitalCredential.kmsKeyRef
|
|
1868
|
-
});
|
|
1869
|
-
} else {
|
|
1870
|
-
switch (digitalCredential.subjectCorrelationType) {
|
|
1871
|
-
case "DID":
|
|
1872
|
-
identifier = await session.context.agent.identifierManagedGetByDid({
|
|
1873
|
-
identifier: digitalCredential.subjectCorrelationId ?? holder,
|
|
1874
|
-
kmsKeyRef: digitalCredential.kmsKeyRef
|
|
1875
|
-
});
|
|
1876
|
-
break;
|
|
1877
|
-
// TODO other implementations?
|
|
1878
|
-
default:
|
|
1879
|
-
identifier = await session.context.agent.identifierManagedGetByKid({
|
|
1880
|
-
identifier: digitalCredential.subjectCorrelationId ?? holder ?? digitalCredential.kmsKeyRef,
|
|
1881
|
-
kmsKeyRef: digitalCredential.kmsKeyRef
|
|
1882
|
-
});
|
|
1883
|
-
}
|
|
1473
|
+
const originalVc = retrieveEncodedCredential(vc);
|
|
1474
|
+
if (!originalVc) {
|
|
1475
|
+
continue;
|
|
1884
1476
|
}
|
|
1885
|
-
|
|
1886
|
-
|
|
1887
|
-
vcs.forEach((vc) => {
|
|
1888
|
-
const rep = convertToDcqlCredentials(vc, args.hasher);
|
|
1889
|
-
if (rep) {
|
|
1890
|
-
dcqlRepresentations.push(rep);
|
|
1891
|
-
}
|
|
1892
|
-
});
|
|
1893
|
-
const queryResult = import_dcql.DcqlQuery.query(request.dcqlQuery, dcqlRepresentations);
|
|
1894
|
-
const presentation = {};
|
|
1895
|
-
for (const [key, value] of Object.entries(queryResult.credential_matches)) {
|
|
1896
|
-
const allMatches = Array.isArray(value) ? value : [
|
|
1897
|
-
value
|
|
1898
|
-
];
|
|
1899
|
-
allMatches.forEach((match) => {
|
|
1900
|
-
if (match.success) {
|
|
1901
|
-
const originalCredential = getOriginalVerifiableCredential(vcs[match.input_credential_index]);
|
|
1902
|
-
if (!originalCredential) {
|
|
1903
|
-
throw new Error(`Index ${match.input_credential_index} out of range in credentials array`);
|
|
1904
|
-
}
|
|
1905
|
-
presentation[key] = originalCredential["compactSdJwtVc"] !== void 0 ? originalCredential.compactSdJwtVc : originalCredential;
|
|
1906
|
-
}
|
|
1907
|
-
});
|
|
1477
|
+
if (originalVc) {
|
|
1478
|
+
presentation[key] = originalVc;
|
|
1908
1479
|
}
|
|
1909
|
-
const response = session.sendAuthorizationResponse({
|
|
1910
|
-
responseSignerOpts: identifier,
|
|
1911
|
-
...{
|
|
1912
|
-
dcqlQuery: {
|
|
1913
|
-
dcqlPresentation: import_dcql.DcqlPresentation.parse(presentation)
|
|
1914
|
-
}
|
|
1915
|
-
}
|
|
1916
|
-
});
|
|
1917
|
-
logger3.debug(`Response: `, response);
|
|
1918
|
-
return response;
|
|
1919
1480
|
}
|
|
1920
1481
|
}
|
|
1921
|
-
|
|
1482
|
+
const dcqlPresentation = import_dcql.DcqlPresentation.parse(presentation);
|
|
1483
|
+
const response = session.sendAuthorizationResponse({
|
|
1484
|
+
responseSignerOpts: identifier,
|
|
1485
|
+
dcqlResponse: {
|
|
1486
|
+
dcqlPresentation
|
|
1487
|
+
}
|
|
1488
|
+
});
|
|
1489
|
+
logger3.debug(`Response: `, response);
|
|
1490
|
+
return response;
|
|
1922
1491
|
}, "siopSendAuthorizationResponse");
|
|
1923
|
-
|
|
1924
|
-
return
|
|
1925
|
-
|
|
1926
|
-
|
|
1927
|
-
inputDescriptor
|
|
1928
|
-
]
|
|
1929
|
-
};
|
|
1930
|
-
}
|
|
1931
|
-
__name(buildPartialPD, "buildPartialPD");
|
|
1932
|
-
var getSelectableCredentials = /* @__PURE__ */ __name(async (presentationDefinition, context) => {
|
|
1492
|
+
var retrieveEncodedCredential = /* @__PURE__ */ __name((credential) => {
|
|
1493
|
+
return credential.originalVerifiableCredential !== void 0 && credential.originalVerifiableCredential !== null && credential?.originalVerifiableCredential?.compactSdJwtVc !== void 0 && credential?.originalVerifiableCredential?.compactSdJwtVc !== null ? credential.originalVerifiableCredential.compactSdJwtVc : credential.originalVerifiableCredential;
|
|
1494
|
+
}, "retrieveEncodedCredential");
|
|
1495
|
+
var getSelectableCredentials = /* @__PURE__ */ __name(async (dcqlQuery, context) => {
|
|
1933
1496
|
const agentContext = {
|
|
1934
1497
|
...context,
|
|
1935
1498
|
agent: context.agent
|
|
1936
1499
|
};
|
|
1937
1500
|
const { agent } = agentContext;
|
|
1938
|
-
const pex = new import_pex3.PEX();
|
|
1939
1501
|
const uniqueVerifiableCredentials = await agent.crsGetUniqueCredentials({
|
|
1940
|
-
filter: (0,
|
|
1502
|
+
filter: (0, import_ssi_sdk3.verifiableCredentialForRoleFilter)(import_ssi_types6.CredentialRole.HOLDER)
|
|
1941
1503
|
});
|
|
1942
|
-
const
|
|
1504
|
+
const branding = await agent.ibGetCredentialBranding();
|
|
1505
|
+
const dcqlCredentialsWithCredentials = new Map(uniqueVerifiableCredentials.map((vc) => [
|
|
1506
|
+
convertToDcqlCredentials(vc),
|
|
1507
|
+
vc
|
|
1508
|
+
]));
|
|
1509
|
+
const queryResult = import_dcql.DcqlQuery.query(dcqlQuery, Array.from(dcqlCredentialsWithCredentials.keys()));
|
|
1510
|
+
const uniqueCredentials = Array.from(dcqlCredentialsWithCredentials.values());
|
|
1943
1511
|
const selectableCredentialsMap = /* @__PURE__ */ new Map();
|
|
1944
|
-
for (const
|
|
1945
|
-
|
|
1946
|
-
|
|
1947
|
-
|
|
1948
|
-
|
|
1949
|
-
|
|
1950
|
-
|
|
1951
|
-
|
|
1952
|
-
|
|
1953
|
-
|
|
1954
|
-
|
|
1955
|
-
|
|
1956
|
-
|
|
1957
|
-
const filteredCredentialBrandings = credentialBranding.filter((cb) => cb.vcHash === filteredUniqueVC.hash);
|
|
1958
|
-
const issuerPartyIdentity = await agent.cmGetContacts({
|
|
1959
|
-
filter: [
|
|
1960
|
-
{
|
|
1961
|
-
identities: {
|
|
1962
|
-
identifier: {
|
|
1963
|
-
correlationId: filteredUniqueVC.uniformVerifiableCredential.issuerDid
|
|
1964
|
-
}
|
|
1512
|
+
for (const [key, value] of Object.entries(queryResult.credential_matches)) {
|
|
1513
|
+
if (!value.valid_credentials) {
|
|
1514
|
+
continue;
|
|
1515
|
+
}
|
|
1516
|
+
const mapSelectableCredentialPromises = value.valid_credentials.map(async (cred) => {
|
|
1517
|
+
const matchedCredential = uniqueCredentials[cred.input_credential_index];
|
|
1518
|
+
const credentialBranding = branding.filter((cb) => cb.vcHash === matchedCredential.hash);
|
|
1519
|
+
const issuerPartyIdentity = await agent.cmGetContacts({
|
|
1520
|
+
filter: [
|
|
1521
|
+
{
|
|
1522
|
+
identities: {
|
|
1523
|
+
identifier: {
|
|
1524
|
+
correlationId: matchedCredential.uniformVerifiableCredential.issuerDid
|
|
1965
1525
|
}
|
|
1966
1526
|
}
|
|
1967
|
-
|
|
1968
|
-
|
|
1969
|
-
|
|
1970
|
-
|
|
1971
|
-
|
|
1972
|
-
|
|
1973
|
-
|
|
1974
|
-
|
|
1975
|
-
|
|
1527
|
+
}
|
|
1528
|
+
]
|
|
1529
|
+
});
|
|
1530
|
+
const subjectPartyIdentity = await agent.cmGetContacts({
|
|
1531
|
+
filter: [
|
|
1532
|
+
{
|
|
1533
|
+
identities: {
|
|
1534
|
+
identifier: {
|
|
1535
|
+
correlationId: matchedCredential.uniformVerifiableCredential.subjectDid
|
|
1976
1536
|
}
|
|
1977
1537
|
}
|
|
1978
|
-
|
|
1979
|
-
|
|
1980
|
-
|
|
1981
|
-
|
|
1982
|
-
|
|
1983
|
-
|
|
1984
|
-
|
|
1985
|
-
|
|
1986
|
-
}
|
|
1987
|
-
}
|
|
1988
|
-
|
|
1538
|
+
}
|
|
1539
|
+
]
|
|
1540
|
+
});
|
|
1541
|
+
return {
|
|
1542
|
+
credential: matchedCredential,
|
|
1543
|
+
credentialBranding: credentialBranding[0]?.localeBranding,
|
|
1544
|
+
issuerParty: issuerPartyIdentity?.[0],
|
|
1545
|
+
subjectParty: subjectPartyIdentity?.[0]
|
|
1546
|
+
};
|
|
1547
|
+
});
|
|
1548
|
+
const selectableCredentials = await Promise.all(mapSelectableCredentialPromises);
|
|
1549
|
+
selectableCredentialsMap.set(key, selectableCredentials);
|
|
1989
1550
|
}
|
|
1990
1551
|
return selectableCredentialsMap;
|
|
1991
1552
|
}, "getSelectableCredentials");
|
|
@@ -2009,7 +1570,7 @@ var translateCorrelationIdToName = /* @__PURE__ */ __name(async (correlationId,
|
|
|
2009
1570
|
}, "translateCorrelationIdToName");
|
|
2010
1571
|
|
|
2011
1572
|
// src/agent/DidAuthSiopOpAuthenticator.ts
|
|
2012
|
-
var logger4 =
|
|
1573
|
+
var logger4 = import_ssi_types8.Loggers.DEFAULT.options(LOGGER_NAMESPACE, {}).get(LOGGER_NAMESPACE);
|
|
2013
1574
|
var didAuthSiopOpAuthenticatorMethods = [
|
|
2014
1575
|
"cmGetContacts",
|
|
2015
1576
|
"cmGetContact",
|
|
@@ -2026,7 +1587,7 @@ var DidAuthSiopOpAuthenticator = class {
|
|
|
2026
1587
|
static {
|
|
2027
1588
|
__name(this, "DidAuthSiopOpAuthenticator");
|
|
2028
1589
|
}
|
|
2029
|
-
schema =
|
|
1590
|
+
schema = plugin_schema_default.IDidAuthSiopOpAuthenticator;
|
|
2030
1591
|
methods = {
|
|
2031
1592
|
siopGetOPSession: this.siopGetOPSession.bind(this),
|
|
2032
1593
|
siopRegisterOPSession: this.siopRegisterOPSession.bind(this),
|
|
@@ -2169,7 +1730,7 @@ var DidAuthSiopOpAuthenticator = class {
|
|
|
2169
1730
|
const url = verifiedAuthorizationRequest.responseURI ?? (args.url.includes("request_uri") ? decodeURIComponent(args.url.split("?request_uri=")[1].trim()) : verifiedAuthorizationRequest.issuer ?? verifiedAuthorizationRequest.registrationMetadataPayload?.client_id);
|
|
2170
1731
|
const uri = url.includes("://") ? new URL(url) : void 0;
|
|
2171
1732
|
const correlationId = uri?.hostname ?? await this.determineCorrelationId(uri, verifiedAuthorizationRequest, clientName, context);
|
|
2172
|
-
const clientId =
|
|
1733
|
+
const clientId = verifiedAuthorizationRequest.authorizationRequest.getMergedProperty("client_id");
|
|
2173
1734
|
return {
|
|
2174
1735
|
issuer: verifiedAuthorizationRequest.issuer,
|
|
2175
1736
|
correlationId,
|
|
@@ -2177,7 +1738,6 @@ var DidAuthSiopOpAuthenticator = class {
|
|
|
2177
1738
|
uri,
|
|
2178
1739
|
name: clientName,
|
|
2179
1740
|
clientId,
|
|
2180
|
-
presentationDefinitions: await verifiedAuthorizationRequest.authorizationRequest.containsResponseType("vp_token") || verifiedAuthorizationRequest.versions.every((version) => version <= import_did_auth_siop5.SupportedVersion.JWT_VC_PRESENTATION_PROFILE_v1) && verifiedAuthorizationRequest.presentationDefinitions && verifiedAuthorizationRequest.presentationDefinitions.length > 0 ? verifiedAuthorizationRequest.presentationDefinitions : void 0,
|
|
2181
1741
|
dcqlQuery: verifiedAuthorizationRequest.dcqlQuery
|
|
2182
1742
|
};
|
|
2183
1743
|
}
|
|
@@ -2226,12 +1786,12 @@ var DidAuthSiopOpAuthenticator = class {
|
|
|
2226
1786
|
if (correlationId) {
|
|
2227
1787
|
const identity = {
|
|
2228
1788
|
alias: correlationId,
|
|
2229
|
-
origin:
|
|
1789
|
+
origin: import_ssi_sdk6.IdentityOrigin.EXTERNAL,
|
|
2230
1790
|
roles: [
|
|
2231
|
-
|
|
1791
|
+
import_ssi_types8.CredentialRole.ISSUER
|
|
2232
1792
|
],
|
|
2233
1793
|
identifier: {
|
|
2234
|
-
type: correlationId.startsWith("did:") ?
|
|
1794
|
+
type: correlationId.startsWith("did:") ? import_ssi_sdk6.CorrelationIdentifierType.DID : import_ssi_sdk6.CorrelationIdentifierType.URL,
|
|
2235
1795
|
correlationId
|
|
2236
1796
|
}
|
|
2237
1797
|
};
|
|
@@ -2254,75 +1814,14 @@ var DidAuthSiopOpAuthenticator = class {
|
|
|
2254
1814
|
if (authorizationRequestData === void 0) {
|
|
2255
1815
|
return Promise.reject(Error("Missing authorization request data in context"));
|
|
2256
1816
|
}
|
|
2257
|
-
const
|
|
2258
|
-
hasher: this.hasher
|
|
2259
|
-
});
|
|
2260
|
-
const verifiableCredentialsWithDefinition = [];
|
|
2261
|
-
const dcqlCredentialsWithCredentials = /* @__PURE__ */ new Map();
|
|
2262
|
-
if (Array.isArray(authorizationRequestData.presentationDefinitions) && authorizationRequestData?.presentationDefinitions.length > 0) {
|
|
2263
|
-
try {
|
|
2264
|
-
authorizationRequestData.presentationDefinitions?.forEach((presentationDefinition) => {
|
|
2265
|
-
const { areRequiredCredentialsPresent, verifiableCredential: verifiableCredentials } = pex.selectFrom(presentationDefinition.definition, selectedCredentials.map((udc) => udc.originalVerifiableCredential));
|
|
2266
|
-
if (areRequiredCredentialsPresent !== import_pex4.Status.ERROR && verifiableCredentials) {
|
|
2267
|
-
let uniqueDigitalCredentials = [];
|
|
2268
|
-
uniqueDigitalCredentials = verifiableCredentials.map((vc) => {
|
|
2269
|
-
const hash = typeof vc === "string" ? (0, import_utils.computeEntryHash)(vc.split("~"[0])) : (0, import_utils.computeEntryHash)(vc);
|
|
2270
|
-
const udc = selectedCredentials.find((udc2) => udc2.hash == hash || udc2.originalVerifiableCredential == vc);
|
|
2271
|
-
if (!udc) {
|
|
2272
|
-
throw Error(`UniqueDigitalCredential could not be found in store. Either the credential is not present in the store or the hash is not correct.`);
|
|
2273
|
-
}
|
|
2274
|
-
return udc;
|
|
2275
|
-
});
|
|
2276
|
-
verifiableCredentialsWithDefinition.push({
|
|
2277
|
-
definition: presentationDefinition,
|
|
2278
|
-
credentials: uniqueDigitalCredentials
|
|
2279
|
-
});
|
|
2280
|
-
}
|
|
2281
|
-
});
|
|
2282
|
-
} catch (e) {
|
|
2283
|
-
return Promise.reject(e);
|
|
2284
|
-
}
|
|
2285
|
-
if (verifiableCredentialsWithDefinition.length === 0) {
|
|
2286
|
-
return Promise.reject(Error("None of the selected credentials match any of the presentation definitions."));
|
|
2287
|
-
}
|
|
2288
|
-
} else if (authorizationRequestData.dcqlQuery) {
|
|
2289
|
-
if (this.hasMDocCredentials(selectedCredentials) || this.hasSdJwtCredentials(selectedCredentials)) {
|
|
2290
|
-
try {
|
|
2291
|
-
selectedCredentials.forEach((vc) => {
|
|
2292
|
-
if (this.isSdJwtCredential(vc)) {
|
|
2293
|
-
const payload = vc.originalVerifiableCredential.decodedPayload;
|
|
2294
|
-
const result = {
|
|
2295
|
-
claims: payload,
|
|
2296
|
-
vct: payload.vct,
|
|
2297
|
-
credential_format: "vc+sd-jwt"
|
|
2298
|
-
};
|
|
2299
|
-
dcqlCredentialsWithCredentials.set(result, vc);
|
|
2300
|
-
} else {
|
|
2301
|
-
throw Error(`Invalid credential format: ${vc.digitalCredential.documentFormat}`);
|
|
2302
|
-
}
|
|
2303
|
-
});
|
|
2304
|
-
} catch (e) {
|
|
2305
|
-
return Promise.reject(e);
|
|
2306
|
-
}
|
|
2307
|
-
const dcqlPresentationRecord = {};
|
|
2308
|
-
const queryResult = import_dcql3.DcqlQuery.query(authorizationRequestData.dcqlQuery, Array.from(dcqlCredentialsWithCredentials.keys()));
|
|
2309
|
-
for (const [key, value] of Object.entries(queryResult.credential_matches)) {
|
|
2310
|
-
if (value.success) {
|
|
2311
|
-
dcqlPresentationRecord[key] = this.retrieveEncodedCredential(dcqlCredentialsWithCredentials.get(value.output));
|
|
2312
|
-
}
|
|
2313
|
-
}
|
|
2314
|
-
}
|
|
2315
|
-
}
|
|
2316
|
-
const response = await siopSendAuthorizationResponse(import_ssi_sdk8.ConnectionType.SIOPv2_OpenID4VP, {
|
|
1817
|
+
const response = await siopSendAuthorizationResponse(import_ssi_sdk6.ConnectionType.SIOPv2_OpenID4VP, {
|
|
2317
1818
|
sessionId: didAuthConfig.sessionId,
|
|
2318
1819
|
...args.idOpts && {
|
|
2319
1820
|
idOpts: args.idOpts
|
|
2320
1821
|
},
|
|
2321
|
-
...authorizationRequestData.presentationDefinitions !== void 0 && {
|
|
2322
|
-
verifiableCredentialsWithDefinition
|
|
2323
|
-
},
|
|
2324
1822
|
isFirstParty,
|
|
2325
|
-
hasher: this.hasher
|
|
1823
|
+
hasher: this.hasher,
|
|
1824
|
+
credentials: selectedCredentials
|
|
2326
1825
|
}, context);
|
|
2327
1826
|
const contentType = response.headers.get("content-type") || "";
|
|
2328
1827
|
let responseBody = null;
|
|
@@ -2336,39 +1835,21 @@ var DidAuthSiopOpAuthenticator = class {
|
|
|
2336
1835
|
queryParams: (0, import_did_auth_siop5.decodeUriAsJson)(response?.url)
|
|
2337
1836
|
};
|
|
2338
1837
|
}
|
|
2339
|
-
hasMDocCredentials = /* @__PURE__ */ __name((credentials) => {
|
|
2340
|
-
return credentials.some(this.isMDocCredential);
|
|
2341
|
-
}, "hasMDocCredentials");
|
|
2342
|
-
isMDocCredential = /* @__PURE__ */ __name((credential) => {
|
|
2343
|
-
return credential.digitalCredential.documentFormat === import_ssi_sdk8.CredentialDocumentFormat.MSO_MDOC && credential.digitalCredential.documentType === import_ssi_sdk8.DocumentType.VC;
|
|
2344
|
-
}, "isMDocCredential");
|
|
2345
|
-
hasSdJwtCredentials = /* @__PURE__ */ __name((credentials) => {
|
|
2346
|
-
return credentials.some(this.isSdJwtCredential);
|
|
2347
|
-
}, "hasSdJwtCredentials");
|
|
2348
|
-
isSdJwtCredential = /* @__PURE__ */ __name((credential) => {
|
|
2349
|
-
return credential.digitalCredential.documentFormat === import_ssi_sdk8.CredentialDocumentFormat.SD_JWT && credential.digitalCredential.documentType === import_ssi_sdk8.DocumentType.VC;
|
|
2350
|
-
}, "isSdJwtCredential");
|
|
2351
|
-
retrieveEncodedCredential = /* @__PURE__ */ __name((credential) => {
|
|
2352
|
-
return credential.originalVerifiableCredential !== void 0 && credential.originalVerifiableCredential !== null && credential?.originalVerifiableCredential?.compactSdJwtVc !== void 0 && credential?.originalVerifiableCredential?.compactSdJwtVc !== null ? credential.originalVerifiableCredential.compactSdJwtVc : credential.originalVerifiableCredential;
|
|
2353
|
-
}, "retrieveEncodedCredential");
|
|
2354
1838
|
async siopGetSelectableCredentials(args, context) {
|
|
2355
1839
|
const { authorizationRequestData } = args;
|
|
2356
|
-
if (!authorizationRequestData
|
|
2357
|
-
return Promise.reject(Error("Missing required
|
|
1840
|
+
if (!authorizationRequestData?.dcqlQuery) {
|
|
1841
|
+
return Promise.reject(Error("Missing required dcql query in context"));
|
|
2358
1842
|
}
|
|
2359
|
-
|
|
2360
|
-
return Promise.reject(Error("Multiple presentation definitions present"));
|
|
2361
|
-
}
|
|
2362
|
-
return getSelectableCredentials(authorizationRequestData.presentationDefinitions[0].definition, context);
|
|
1843
|
+
return getSelectableCredentials(authorizationRequestData?.dcqlQuery, context);
|
|
2363
1844
|
}
|
|
2364
1845
|
};
|
|
2365
1846
|
|
|
2366
1847
|
// src/machine/CallbackStateListener.ts
|
|
2367
|
-
var
|
|
2368
|
-
var logger5 =
|
|
2369
|
-
defaultLogLevel:
|
|
1848
|
+
var import_ssi_types9 = require("@sphereon/ssi-types");
|
|
1849
|
+
var logger5 = import_ssi_types9.Loggers.DEFAULT.options("sphereon:siopv2-oid4vp:op-auth", {
|
|
1850
|
+
defaultLogLevel: import_ssi_types9.LogLevel.DEBUG,
|
|
2370
1851
|
methods: [
|
|
2371
|
-
|
|
1852
|
+
import_ssi_types9.LogMethod.CONSOLE
|
|
2372
1853
|
]
|
|
2373
1854
|
}).get("sphereon:siopv2-oid4vp:op-auth");
|
|
2374
1855
|
var OID4VPCallbackStateListener = /* @__PURE__ */ __name((callbacks) => {
|
|
@@ -2398,12 +1879,12 @@ var OID4VPCallbackStateListener = /* @__PURE__ */ __name((callbacks) => {
|
|
|
2398
1879
|
}, "OID4VPCallbackStateListener");
|
|
2399
1880
|
|
|
2400
1881
|
// src/link-handler/index.ts
|
|
2401
|
-
var
|
|
2402
|
-
var
|
|
2403
|
-
var
|
|
2404
|
-
var
|
|
2405
|
-
var logger6 =
|
|
2406
|
-
var Siopv2OID4VPLinkHandler = class extends
|
|
1882
|
+
var import_ssi_sdk7 = require("@sphereon/ssi-sdk.agent-config");
|
|
1883
|
+
var import_ssi_sdk8 = require("@sphereon/ssi-sdk.core");
|
|
1884
|
+
var import_ssi_sdk9 = require("@sphereon/ssi-sdk.xstate-machine-persistence");
|
|
1885
|
+
var import_ssi_types10 = require("@sphereon/ssi-types");
|
|
1886
|
+
var logger6 = import_ssi_types10.Loggers.DEFAULT.options(LOGGER_NAMESPACE, {}).get(LOGGER_NAMESPACE);
|
|
1887
|
+
var Siopv2OID4VPLinkHandler = class extends import_ssi_sdk8.LinkHandlerAdapter {
|
|
2407
1888
|
static {
|
|
2408
1889
|
__name(this, "Siopv2OID4VPLinkHandler");
|
|
2409
1890
|
}
|
|
@@ -2429,8 +1910,8 @@ var Siopv2OID4VPLinkHandler = class extends import_ssi_sdk10.LinkHandlerAdapter
|
|
|
2429
1910
|
stateNavigationListener: this.stateNavigationListener
|
|
2430
1911
|
});
|
|
2431
1912
|
const interpreter = siopv2Machine.interpreter;
|
|
2432
|
-
if (!this.noStateMachinePersistence && !opts?.machineState && (0,
|
|
2433
|
-
const init = await (0,
|
|
1913
|
+
if (!this.noStateMachinePersistence && !opts?.machineState && (0, import_ssi_sdk7.contextHasPlugin)(this.context, "machineStatesFindActive")) {
|
|
1914
|
+
const init = await (0, import_ssi_sdk9.interpreterStartOrResume)({
|
|
2434
1915
|
interpreter,
|
|
2435
1916
|
context: this.context,
|
|
2436
1917
|
cleanupAllOtherInstances: true,
|
|
@@ -2445,7 +1926,4 @@ var Siopv2OID4VPLinkHandler = class extends import_ssi_sdk10.LinkHandlerAdapter
|
|
|
2445
1926
|
}
|
|
2446
1927
|
}
|
|
2447
1928
|
};
|
|
2448
|
-
|
|
2449
|
-
// src/index.ts
|
|
2450
|
-
var schema = require_plugin_schema();
|
|
2451
1929
|
//# sourceMappingURL=index.cjs.map
|