@sphereon/ssi-sdk.oid4vci-holder 0.33.1-feature.vcdm2.tsup.31 → 0.33.1-next.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/dist/agent/OID4VCIHolder.d.ts +59 -0
  2. package/dist/agent/OID4VCIHolder.d.ts.map +1 -0
  3. package/dist/agent/OID4VCIHolder.js +884 -0
  4. package/dist/agent/OID4VCIHolder.js.map +1 -0
  5. package/dist/index.d.ts +11 -785
  6. package/dist/index.d.ts.map +1 -0
  7. package/dist/index.js +31 -3111
  8. package/dist/index.js.map +1 -1
  9. package/dist/link-handler/index.d.ts +31 -0
  10. package/dist/link-handler/index.d.ts.map +1 -0
  11. package/dist/link-handler/index.js +65 -0
  12. package/dist/link-handler/index.js.map +1 -0
  13. package/dist/listeners/headlessStateNavListener.d.ts +3 -0
  14. package/dist/listeners/headlessStateNavListener.d.ts.map +1 -0
  15. package/dist/listeners/headlessStateNavListener.js +45 -0
  16. package/dist/listeners/headlessStateNavListener.js.map +1 -0
  17. package/dist/localization/Localization.d.ts +9 -0
  18. package/dist/localization/Localization.d.ts.map +1 -0
  19. package/dist/localization/Localization.js +46 -0
  20. package/dist/localization/Localization.js.map +1 -0
  21. package/dist/localization/translations/en.json +19 -0
  22. package/dist/localization/translations/nl.json +18 -0
  23. package/dist/machines/firstPartyMachine.d.ts +15 -0
  24. package/dist/machines/firstPartyMachine.d.ts.map +1 -0
  25. package/dist/machines/firstPartyMachine.js +222 -0
  26. package/dist/machines/firstPartyMachine.js.map +1 -0
  27. package/dist/machines/oid4vciMachine.d.ts +7 -0
  28. package/dist/machines/oid4vciMachine.d.ts.map +1 -0
  29. package/dist/machines/oid4vciMachine.js +727 -0
  30. package/dist/machines/oid4vciMachine.js.map +1 -0
  31. package/dist/mappers/OIDC4VCIBrandingMapper.d.ts +16 -0
  32. package/dist/mappers/OIDC4VCIBrandingMapper.d.ts.map +1 -0
  33. package/dist/mappers/OIDC4VCIBrandingMapper.js +201 -0
  34. package/dist/mappers/OIDC4VCIBrandingMapper.js.map +1 -0
  35. package/dist/services/FirstPartyMachineServices.d.ts +9 -0
  36. package/dist/services/FirstPartyMachineServices.d.ts.map +1 -0
  37. package/dist/services/FirstPartyMachineServices.js +53 -0
  38. package/dist/services/FirstPartyMachineServices.js.map +1 -0
  39. package/dist/services/OID4VCIHolderService.d.ts +28 -0
  40. package/dist/services/OID4VCIHolderService.d.ts.map +1 -0
  41. package/dist/services/OID4VCIHolderService.js +524 -0
  42. package/dist/services/OID4VCIHolderService.js.map +1 -0
  43. package/dist/types/FirstPartyMachine.d.ts +112 -0
  44. package/dist/types/FirstPartyMachine.d.ts.map +1 -0
  45. package/dist/types/FirstPartyMachine.js +30 -0
  46. package/dist/types/FirstPartyMachine.js.map +1 -0
  47. package/dist/types/IOID4VCIHolder.d.ts +558 -0
  48. package/dist/types/IOID4VCIHolder.d.ts.map +1 -0
  49. package/dist/types/IOID4VCIHolder.js +114 -0
  50. package/dist/types/IOID4VCIHolder.js.map +1 -0
  51. package/package.json +34 -44
  52. package/src/agent/OID4VCIHolder.ts +4 -3
  53. package/dist/index.cjs +0 -3142
  54. package/dist/index.cjs.map +0 -1
  55. package/dist/index.d.cts +0 -786
@@ -0,0 +1,727 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.OID4VCIMachine = void 0;
13
+ const oid4vci_common_1 = require("@sphereon/oid4vci-common");
14
+ const xstate_1 = require("xstate");
15
+ const Localization_1 = require("../localization/Localization");
16
+ const IOID4VCIHolder_1 = require("../types/IOID4VCIHolder");
17
+ const FirstPartyMachine_1 = require("../types/FirstPartyMachine");
18
+ const oid4vciHasNoContactGuard = (_ctx, _event) => {
19
+ const { contact } = _ctx;
20
+ return contact === undefined;
21
+ };
22
+ const oid4vciHasContactGuard = (_ctx, _event) => {
23
+ const { contact } = _ctx;
24
+ return contact !== undefined;
25
+ };
26
+ const oid4vciContactHasLowTrustGuard = (_ctx, _event) => {
27
+ const { contact, trustedAnchors } = _ctx;
28
+ return contact !== undefined && trustedAnchors !== undefined && trustedAnchors.length === 0;
29
+ };
30
+ const oid4vciCredentialsToSelectRequiredGuard = (_ctx, _event) => {
31
+ const { credentialToSelectFrom } = _ctx;
32
+ return credentialToSelectFrom && credentialToSelectFrom.length > 1;
33
+ };
34
+ const oid4vciRequirePinGuard = (_ctx, _event) => {
35
+ var _a;
36
+ const { requestData } = _ctx;
37
+ return ((_a = requestData === null || requestData === void 0 ? void 0 : requestData.credentialOffer) === null || _a === void 0 ? void 0 : _a.userPinRequired) === true;
38
+ };
39
+ const oid4vciHasNoContactIdentityGuard = (_ctx, _event) => {
40
+ const { contact, credentialsToAccept } = _ctx;
41
+ let toAcceptId = credentialsToAccept[0].correlationId;
42
+ if (toAcceptId.match(/^https?:\/\/.*/)) {
43
+ toAcceptId = new URL(toAcceptId).hostname;
44
+ }
45
+ return !(contact === null || contact === void 0 ? void 0 : contact.identities.some((identity) => identity.identifier.correlationId === toAcceptId));
46
+ };
47
+ const oid4vciVerificationCodeGuard = (_ctx, _event) => {
48
+ const { verificationCode } = _ctx;
49
+ return verificationCode !== undefined && verificationCode.length > 0;
50
+ };
51
+ const oid4vciCreateContactGuard = (_ctx, _event) => {
52
+ const { contactAlias, hasContactConsent } = _ctx;
53
+ return hasContactConsent && !!contactAlias && contactAlias.length > 0;
54
+ };
55
+ const oid4vciHasSelectedCredentialsGuard = (_ctx, _event) => {
56
+ const { selectedCredentials } = _ctx;
57
+ return selectedCredentials !== undefined && selectedCredentials.length > 0;
58
+ };
59
+ const oid4vciIsOIDFOriginGuard = (_ctx, _event) => {
60
+ // TODO in the future we need to establish if a origin is a IDF origin. So we need to check if this metadata is on the well-known location
61
+ const { trustAnchors } = _ctx;
62
+ return trustAnchors.length > 0;
63
+ };
64
+ const oid4vciNoAuthorizationGuard = (ctx, _event) => {
65
+ return !oid4vciHasAuthorizationResponse(ctx, _event);
66
+ };
67
+ // FIXME refactor this guard
68
+ const oid4vciRequireAuthorizationGuard = (ctx, _event) => {
69
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j;
70
+ const { openID4VCIClientState } = ctx;
71
+ if (!openID4VCIClientState) {
72
+ throw Error('Missing openID4VCI client state in context');
73
+ }
74
+ if (!openID4VCIClientState.authorizationURL) {
75
+ return false;
76
+ }
77
+ else if (openID4VCIClientState.authorizationRequestOpts) {
78
+ // We have authz options or there is not credential offer to begin with.
79
+ // We require authz as long as we do not have the authz code response
80
+ return !((_a = ctx.openID4VCIClientState) === null || _a === void 0 ? void 0 : _a.authorizationCodeResponse);
81
+ }
82
+ else if ((_c = (_b = openID4VCIClientState.credentialOffer) === null || _b === void 0 ? void 0 : _b.supportedFlows) === null || _c === void 0 ? void 0 : _c.includes(oid4vci_common_1.AuthzFlowType.AUTHORIZATION_CODE_FLOW)) {
83
+ return !((_d = ctx.openID4VCIClientState) === null || _d === void 0 ? void 0 : _d.authorizationCodeResponse);
84
+ }
85
+ else if ((_f = (_e = openID4VCIClientState.credentialOffer) === null || _e === void 0 ? void 0 : _e.supportedFlows) === null || _f === void 0 ? void 0 : _f.includes(oid4vci_common_1.AuthzFlowType.PRE_AUTHORIZED_CODE_FLOW)) {
86
+ return false;
87
+ }
88
+ else if ((_h = (_g = openID4VCIClientState.endpointMetadata) === null || _g === void 0 ? void 0 : _g.credentialIssuerMetadata) === null || _h === void 0 ? void 0 : _h.authorization_endpoint) {
89
+ return !((_j = ctx.openID4VCIClientState) === null || _j === void 0 ? void 0 : _j.authorizationCodeResponse);
90
+ }
91
+ return false;
92
+ };
93
+ const oid4vciHasAuthorizationResponse = (ctx, _event) => {
94
+ var _a;
95
+ return !!((_a = ctx.openID4VCIClientState) === null || _a === void 0 ? void 0 : _a.authorizationCodeResponse);
96
+ };
97
+ const oid4vciIsFirstPartyApplication = (ctx, _event) => {
98
+ var _a;
99
+ return !!((_a = ctx.serverMetadata) === null || _a === void 0 ? void 0 : _a.authorization_challenge_endpoint);
100
+ };
101
+ const createOID4VCIMachine = (opts) => {
102
+ var _a, _b;
103
+ const initialContext = {
104
+ // TODO WAL-671 we need to store the data from OpenIdProvider here in the context and make sure we can restart the machine with it and init the OpenIdProvider
105
+ accessTokenOpts: opts === null || opts === void 0 ? void 0 : opts.accessTokenOpts,
106
+ requestData: opts === null || opts === void 0 ? void 0 : opts.requestData,
107
+ trustAnchors: (_a = opts === null || opts === void 0 ? void 0 : opts.trustAnchors) !== null && _a !== void 0 ? _a : [],
108
+ issuanceOpt: opts === null || opts === void 0 ? void 0 : opts.issuanceOpt,
109
+ didMethodPreferences: opts === null || opts === void 0 ? void 0 : opts.didMethodPreferences,
110
+ locale: opts === null || opts === void 0 ? void 0 : opts.locale,
111
+ credentialsSupported: {},
112
+ credentialToSelectFrom: [],
113
+ selectedCredentials: [],
114
+ credentialsToAccept: [],
115
+ hasContactConsent: true,
116
+ contactAlias: '',
117
+ };
118
+ return (0, xstate_1.createMachine)({
119
+ id: (_b = opts === null || opts === void 0 ? void 0 : opts.machineName) !== null && _b !== void 0 ? _b : 'OID4VCIHolder',
120
+ predictableActionArguments: true,
121
+ initial: IOID4VCIHolder_1.OID4VCIMachineStates.start,
122
+ schema: {
123
+ events: {},
124
+ guards: {},
125
+ services: {},
126
+ },
127
+ context: initialContext,
128
+ states: {
129
+ [IOID4VCIHolder_1.OID4VCIMachineStates.start]: {
130
+ id: IOID4VCIHolder_1.OID4VCIMachineStates.start,
131
+ invoke: {
132
+ src: IOID4VCIHolder_1.OID4VCIMachineServices.start,
133
+ onDone: {
134
+ target: IOID4VCIHolder_1.OID4VCIMachineStates.createCredentialsToSelectFrom,
135
+ actions: (0, xstate_1.assign)({
136
+ authorizationCodeURL: (_ctx, _event) => _event.data.authorizationCodeURL,
137
+ credentialBranding: (_ctx, _event) => { var _a; return (_a = _event.data.credentialBranding) !== null && _a !== void 0 ? _a : {}; },
138
+ credentialsSupported: (_ctx, _event) => _event.data.credentialsSupported,
139
+ serverMetadata: (_ctx, _event) => _event.data.serverMetadata,
140
+ openID4VCIClientState: (_ctx, _event) => _event.data.oid4vciClientState,
141
+ }),
142
+ },
143
+ onError: {
144
+ target: IOID4VCIHolder_1.OID4VCIMachineStates.handleError,
145
+ actions: (0, xstate_1.assign)({
146
+ error: (_ctx, _event) => ({
147
+ title: (0, Localization_1.translate)('oid4vci_machine_initiation_error_title'),
148
+ message: _event.data.message,
149
+ stack: _event.data.stack,
150
+ }),
151
+ }),
152
+ },
153
+ },
154
+ },
155
+ [IOID4VCIHolder_1.OID4VCIMachineStates.createCredentialsToSelectFrom]: {
156
+ id: IOID4VCIHolder_1.OID4VCIMachineStates.createCredentialsToSelectFrom,
157
+ invoke: {
158
+ src: IOID4VCIHolder_1.OID4VCIMachineServices.createCredentialsToSelectFrom,
159
+ onDone: {
160
+ target: IOID4VCIHolder_1.OID4VCIMachineStates.getContact,
161
+ actions: (0, xstate_1.assign)({
162
+ credentialToSelectFrom: (_ctx, _event) => _event.data,
163
+ }),
164
+ // TODO WAL-670 would be nice if we can have guard that checks if we have at least 1 item in the selection. not sure if this can occur but it would be more defensive.
165
+ // Still cannot find a nice way to do this inside of an invoke besides adding another transition state
166
+ },
167
+ onError: {
168
+ target: IOID4VCIHolder_1.OID4VCIMachineStates.handleError,
169
+ actions: (0, xstate_1.assign)({
170
+ error: (_ctx, _event) => ({
171
+ title: (0, Localization_1.translate)('oid4vci_machine_credential_selection_error_title'),
172
+ message: _event.data.message,
173
+ stack: _event.data.stack,
174
+ }),
175
+ }),
176
+ },
177
+ },
178
+ },
179
+ [IOID4VCIHolder_1.OID4VCIMachineStates.getContact]: {
180
+ id: IOID4VCIHolder_1.OID4VCIMachineStates.getContact,
181
+ invoke: {
182
+ src: IOID4VCIHolder_1.OID4VCIMachineServices.getContact,
183
+ onDone: {
184
+ target: IOID4VCIHolder_1.OID4VCIMachineStates.getIssuerBranding,
185
+ actions: (0, xstate_1.assign)({ contact: (_ctx, _event) => _event.data }),
186
+ },
187
+ onError: {
188
+ target: IOID4VCIHolder_1.OID4VCIMachineStates.handleError,
189
+ actions: (0, xstate_1.assign)({
190
+ error: (_ctx, _event) => ({
191
+ title: (0, Localization_1.translate)('oid4vci_machine_retrieve_contact_error_title'),
192
+ message: _event.data.message,
193
+ stack: _event.data.stack,
194
+ }),
195
+ }),
196
+ },
197
+ },
198
+ },
199
+ [IOID4VCIHolder_1.OID4VCIMachineStates.getIssuerBranding]: {
200
+ id: IOID4VCIHolder_1.OID4VCIMachineStates.getIssuerBranding,
201
+ invoke: {
202
+ src: IOID4VCIHolder_1.OID4VCIMachineServices.getIssuerBranding,
203
+ onDone: [
204
+ {
205
+ target: IOID4VCIHolder_1.OID4VCIMachineStates.getFederationTrust,
206
+ cond: IOID4VCIHolder_1.OID4VCIMachineGuards.isOIDFOriginGuard,
207
+ actions: (0, xstate_1.assign)({
208
+ issuerBranding: (_ctx, _event) => _event.data,
209
+ }),
210
+ },
211
+ {
212
+ target: IOID4VCIHolder_1.OID4VCIMachineStates.transitionFromSetup,
213
+ actions: (0, xstate_1.assign)({
214
+ issuerBranding: (_ctx, _event) => _event.data,
215
+ }),
216
+ },
217
+ ],
218
+ onError: {
219
+ target: IOID4VCIHolder_1.OID4VCIMachineStates.handleError,
220
+ actions: (0, xstate_1.assign)({
221
+ error: (_ctx, _event) => ({
222
+ title: (0, Localization_1.translate)('oid4vci_machine_retrieve_issuer_branding_error_title'),
223
+ message: _event.data.message,
224
+ stack: _event.data.stack,
225
+ }),
226
+ }),
227
+ },
228
+ },
229
+ },
230
+ [IOID4VCIHolder_1.OID4VCIMachineStates.getFederationTrust]: {
231
+ id: IOID4VCIHolder_1.OID4VCIMachineStates.getFederationTrust,
232
+ invoke: {
233
+ src: IOID4VCIHolder_1.OID4VCIMachineServices.getFederationTrust,
234
+ onDone: {
235
+ target: IOID4VCIHolder_1.OID4VCIMachineStates.transitionFromSetup,
236
+ actions: (0, xstate_1.assign)({
237
+ trustedAnchors: (_ctx, _event) => _event.data,
238
+ }),
239
+ },
240
+ onError: {
241
+ target: IOID4VCIHolder_1.OID4VCIMachineStates.handleError,
242
+ actions: (0, xstate_1.assign)({
243
+ error: (_ctx, _event) => ({
244
+ title: (0, Localization_1.translate)('oid4vci_machine_retrieve_federation_trust_error_title'),
245
+ message: _event.data.message,
246
+ stack: _event.data.stack,
247
+ }),
248
+ }),
249
+ },
250
+ },
251
+ },
252
+ [IOID4VCIHolder_1.OID4VCIMachineStates.transitionFromSetup]: {
253
+ id: IOID4VCIHolder_1.OID4VCIMachineStates.transitionFromSetup,
254
+ always: [
255
+ {
256
+ target: IOID4VCIHolder_1.OID4VCIMachineStates.addContact,
257
+ cond: IOID4VCIHolder_1.OID4VCIMachineGuards.hasNoContactGuard,
258
+ },
259
+ {
260
+ target: IOID4VCIHolder_1.OID4VCIMachineStates.reviewContact,
261
+ cond: IOID4VCIHolder_1.OID4VCIMachineGuards.contactHasLowTrustGuard,
262
+ },
263
+ {
264
+ target: IOID4VCIHolder_1.OID4VCIMachineStates.selectCredentials,
265
+ cond: IOID4VCIHolder_1.OID4VCIMachineGuards.credentialsToSelectRequiredGuard,
266
+ },
267
+ {
268
+ target: IOID4VCIHolder_1.OID4VCIMachineStates.startFirstPartApplicationFlow,
269
+ cond: IOID4VCIHolder_1.OID4VCIMachineGuards.isFirstPartyApplication,
270
+ },
271
+ {
272
+ target: IOID4VCIHolder_1.OID4VCIMachineStates.initiateAuthorizationRequest,
273
+ cond: IOID4VCIHolder_1.OID4VCIMachineGuards.requireAuthorizationGuard,
274
+ },
275
+ {
276
+ target: IOID4VCIHolder_1.OID4VCIMachineStates.verifyPin,
277
+ cond: IOID4VCIHolder_1.OID4VCIMachineGuards.requirePinGuard,
278
+ },
279
+ {
280
+ target: IOID4VCIHolder_1.OID4VCIMachineStates.getCredentials,
281
+ },
282
+ ],
283
+ on: {
284
+ [IOID4VCIHolder_1.OID4VCIMachineEvents.SET_AUTHORIZATION_CODE_URL]: {
285
+ actions: (0, xstate_1.assign)({ authorizationCodeURL: (_ctx, _event) => _event.data }),
286
+ },
287
+ },
288
+ },
289
+ [IOID4VCIHolder_1.OID4VCIMachineStates.addContact]: {
290
+ id: IOID4VCIHolder_1.OID4VCIMachineStates.addContact,
291
+ initial: IOID4VCIHolder_1.OID4VCIMachineAddContactStates.idle,
292
+ on: {
293
+ [IOID4VCIHolder_1.OID4VCIMachineEvents.SET_CONTACT_CONSENT]: {
294
+ actions: (0, xstate_1.assign)({ hasContactConsent: (_ctx, _event) => _event.data }),
295
+ },
296
+ [IOID4VCIHolder_1.OID4VCIMachineEvents.SET_CONTACT_ALIAS]: {
297
+ actions: (0, xstate_1.assign)({ contactAlias: (_ctx, _event) => _event.data }),
298
+ },
299
+ [IOID4VCIHolder_1.OID4VCIMachineEvents.CREATE_CONTACT]: {
300
+ target: `.${IOID4VCIHolder_1.OID4VCIMachineAddContactStates.next}`,
301
+ actions: (0, xstate_1.assign)({ contact: (_ctx, _event) => _event.data }),
302
+ cond: IOID4VCIHolder_1.OID4VCIMachineGuards.createContactGuard,
303
+ },
304
+ [IOID4VCIHolder_1.OID4VCIMachineEvents.DECLINE]: {
305
+ target: IOID4VCIHolder_1.OID4VCIMachineStates.declined,
306
+ },
307
+ [IOID4VCIHolder_1.OID4VCIMachineEvents.PREVIOUS]: {
308
+ target: IOID4VCIHolder_1.OID4VCIMachineStates.aborted,
309
+ },
310
+ },
311
+ states: {
312
+ [IOID4VCIHolder_1.OID4VCIMachineAddContactStates.idle]: {},
313
+ [IOID4VCIHolder_1.OID4VCIMachineAddContactStates.next]: {
314
+ always: {
315
+ target: `#${IOID4VCIHolder_1.OID4VCIMachineStates.storeIssuerBranding}`,
316
+ cond: IOID4VCIHolder_1.OID4VCIMachineGuards.hasContactGuard,
317
+ },
318
+ },
319
+ },
320
+ },
321
+ [IOID4VCIHolder_1.OID4VCIMachineStates.reviewContact]: {
322
+ id: IOID4VCIHolder_1.OID4VCIMachineStates.reviewContact,
323
+ on: {
324
+ [IOID4VCIHolder_1.OID4VCIMachineEvents.NEXT]: {
325
+ target: IOID4VCIHolder_1.OID4VCIMachineStates.transitionFromContactSetup,
326
+ },
327
+ [IOID4VCIHolder_1.OID4VCIMachineEvents.DECLINE]: {
328
+ target: IOID4VCIHolder_1.OID4VCIMachineStates.declined,
329
+ },
330
+ [IOID4VCIHolder_1.OID4VCIMachineEvents.PREVIOUS]: {
331
+ target: IOID4VCIHolder_1.OID4VCIMachineStates.aborted,
332
+ },
333
+ },
334
+ },
335
+ [IOID4VCIHolder_1.OID4VCIMachineStates.storeIssuerBranding]: {
336
+ id: IOID4VCIHolder_1.OID4VCIMachineStates.storeIssuerBranding,
337
+ invoke: {
338
+ src: IOID4VCIHolder_1.OID4VCIMachineServices.storeIssuerBranding,
339
+ onDone: {
340
+ target: IOID4VCIHolder_1.OID4VCIMachineStates.transitionFromContactSetup,
341
+ },
342
+ onError: {
343
+ target: IOID4VCIHolder_1.OID4VCIMachineStates.handleError,
344
+ actions: (0, xstate_1.assign)({
345
+ error: (_ctx, _event) => ({
346
+ title: (0, Localization_1.translate)('oid4vci_machine_store_issuer_branding_error_title'),
347
+ message: _event.data.message,
348
+ stack: _event.data.stack,
349
+ }),
350
+ }),
351
+ },
352
+ },
353
+ },
354
+ [IOID4VCIHolder_1.OID4VCIMachineStates.transitionFromContactSetup]: {
355
+ id: IOID4VCIHolder_1.OID4VCIMachineStates.transitionFromContactSetup,
356
+ always: [
357
+ {
358
+ target: IOID4VCIHolder_1.OID4VCIMachineStates.selectCredentials,
359
+ cond: IOID4VCIHolder_1.OID4VCIMachineGuards.credentialsToSelectRequiredGuard,
360
+ },
361
+ {
362
+ target: IOID4VCIHolder_1.OID4VCIMachineStates.startFirstPartApplicationFlow,
363
+ cond: IOID4VCIHolder_1.OID4VCIMachineGuards.isFirstPartyApplication,
364
+ },
365
+ {
366
+ target: IOID4VCIHolder_1.OID4VCIMachineStates.initiateAuthorizationRequest,
367
+ cond: IOID4VCIHolder_1.OID4VCIMachineGuards.requireAuthorizationGuard,
368
+ },
369
+ {
370
+ target: IOID4VCIHolder_1.OID4VCIMachineStates.verifyPin,
371
+ cond: IOID4VCIHolder_1.OID4VCIMachineGuards.requirePinGuard,
372
+ },
373
+ {
374
+ target: IOID4VCIHolder_1.OID4VCIMachineStates.getCredentials,
375
+ },
376
+ ],
377
+ },
378
+ [IOID4VCIHolder_1.OID4VCIMachineStates.startFirstPartApplicationFlow]: {
379
+ id: IOID4VCIHolder_1.OID4VCIMachineStates.startFirstPartApplicationFlow,
380
+ invoke: {
381
+ src: IOID4VCIHolder_1.OID4VCIMachineServices.startFirstPartApplicationFlow,
382
+ onDone: [
383
+ {
384
+ target: IOID4VCIHolder_1.OID4VCIMachineStates.aborted,
385
+ cond: (_ctx, _event) => _event.data === FirstPartyMachine_1.FirstPartyMachineStateTypes.aborted,
386
+ },
387
+ {
388
+ target: IOID4VCIHolder_1.OID4VCIMachineStates.declined,
389
+ cond: (_ctx, _event) => _event.data === FirstPartyMachine_1.FirstPartyMachineStateTypes.declined,
390
+ },
391
+ {
392
+ target: IOID4VCIHolder_1.OID4VCIMachineStates.getCredentials,
393
+ actions: (0, xstate_1.assign)({
394
+ openID4VCIClientState: (_ctx, _event) => {
395
+ const authorizationCodeResponse = (0, oid4vci_common_1.toAuthorizationResponsePayload)(_event.data);
396
+ return Object.assign(Object.assign({}, _ctx.openID4VCIClientState), { authorizationCodeResponse });
397
+ },
398
+ }),
399
+ },
400
+ ],
401
+ onError: {
402
+ target: IOID4VCIHolder_1.OID4VCIMachineStates.handleError,
403
+ actions: (0, xstate_1.assign)({
404
+ error: (_ctx, _event) => {
405
+ var _a;
406
+ return ({
407
+ title: (_a = _event.data.title) !== null && _a !== void 0 ? _a : (0, Localization_1.translate)('oid4vci_machine_first_party_error_title'),
408
+ message: _event.data.message,
409
+ stack: _event.data.stack,
410
+ });
411
+ },
412
+ }),
413
+ },
414
+ },
415
+ },
416
+ [IOID4VCIHolder_1.OID4VCIMachineStates.selectCredentials]: {
417
+ id: IOID4VCIHolder_1.OID4VCIMachineStates.selectCredentials,
418
+ on: {
419
+ [IOID4VCIHolder_1.OID4VCIMachineEvents.SET_SELECTED_CREDENTIALS]: {
420
+ actions: (0, xstate_1.assign)({ selectedCredentials: (_ctx, _event) => _event.data }),
421
+ },
422
+ [IOID4VCIHolder_1.OID4VCIMachineEvents.NEXT]: {
423
+ target: IOID4VCIHolder_1.OID4VCIMachineStates.transitionFromSelectingCredentials,
424
+ cond: IOID4VCIHolder_1.OID4VCIMachineGuards.hasSelectedCredentialsGuard,
425
+ },
426
+ [IOID4VCIHolder_1.OID4VCIMachineEvents.PREVIOUS]: {
427
+ target: IOID4VCIHolder_1.OID4VCIMachineStates.aborted,
428
+ },
429
+ },
430
+ },
431
+ [IOID4VCIHolder_1.OID4VCIMachineStates.transitionFromSelectingCredentials]: {
432
+ id: IOID4VCIHolder_1.OID4VCIMachineStates.transitionFromSelectingCredentials,
433
+ always: [
434
+ {
435
+ target: IOID4VCIHolder_1.OID4VCIMachineStates.startFirstPartApplicationFlow,
436
+ cond: IOID4VCIHolder_1.OID4VCIMachineGuards.isFirstPartyApplication,
437
+ },
438
+ {
439
+ target: IOID4VCIHolder_1.OID4VCIMachineStates.verifyPin,
440
+ cond: IOID4VCIHolder_1.OID4VCIMachineGuards.requirePinGuard,
441
+ },
442
+ {
443
+ target: IOID4VCIHolder_1.OID4VCIMachineStates.initiateAuthorizationRequest,
444
+ cond: IOID4VCIHolder_1.OID4VCIMachineGuards.requireAuthorizationGuard,
445
+ },
446
+ {
447
+ target: IOID4VCIHolder_1.OID4VCIMachineStates.getCredentials,
448
+ },
449
+ ],
450
+ },
451
+ [IOID4VCIHolder_1.OID4VCIMachineStates.initiateAuthorizationRequest]: {
452
+ id: IOID4VCIHolder_1.OID4VCIMachineStates.initiateAuthorizationRequest,
453
+ on: {
454
+ [IOID4VCIHolder_1.OID4VCIMachineEvents.PREVIOUS]: {
455
+ target: IOID4VCIHolder_1.OID4VCIMachineStates.selectCredentials,
456
+ },
457
+ [IOID4VCIHolder_1.OID4VCIMachineEvents.INVOKED_AUTHORIZATION_CODE_REQUEST]: {
458
+ target: IOID4VCIHolder_1.OID4VCIMachineStates.waitForAuthorizationResponse,
459
+ },
460
+ },
461
+ },
462
+ [IOID4VCIHolder_1.OID4VCIMachineStates.waitForAuthorizationResponse]: {
463
+ id: IOID4VCIHolder_1.OID4VCIMachineStates.waitForAuthorizationResponse,
464
+ on: {
465
+ [IOID4VCIHolder_1.OID4VCIMachineEvents.PREVIOUS]: {
466
+ target: IOID4VCIHolder_1.OID4VCIMachineStates.initiateAuthorizationRequest,
467
+ },
468
+ [IOID4VCIHolder_1.OID4VCIMachineEvents.PROVIDE_AUTHORIZATION_CODE_RESPONSE]: {
469
+ actions: (0, xstate_1.assign)({
470
+ openID4VCIClientState: (_ctx, _event) => {
471
+ const authorizationCodeResponse = (0, oid4vci_common_1.toAuthorizationResponsePayload)(_event.data);
472
+ return Object.assign(Object.assign({}, _ctx.openID4VCIClientState), { authorizationCodeResponse });
473
+ },
474
+ }),
475
+ },
476
+ },
477
+ always: [
478
+ {
479
+ cond: IOID4VCIHolder_1.OID4VCIMachineGuards.hasAuthorizationResponse,
480
+ target: IOID4VCIHolder_1.OID4VCIMachineStates.getCredentials,
481
+ },
482
+ ],
483
+ },
484
+ [IOID4VCIHolder_1.OID4VCIMachineStates.verifyPin]: {
485
+ id: IOID4VCIHolder_1.OID4VCIMachineStates.verifyPin,
486
+ initial: IOID4VCIHolder_1.OID4VCIMachineVerifyPinStates.idle,
487
+ on: {
488
+ [IOID4VCIHolder_1.OID4VCIMachineEvents.SET_VERIFICATION_CODE]: {
489
+ target: `.${IOID4VCIHolder_1.OID4VCIMachineVerifyPinStates.next}`,
490
+ actions: (0, xstate_1.assign)({ verificationCode: (_ctx, _event) => _event.data }),
491
+ },
492
+ [IOID4VCIHolder_1.OID4VCIMachineEvents.PREVIOUS]: [
493
+ {
494
+ target: IOID4VCIHolder_1.OID4VCIMachineStates.selectCredentials,
495
+ cond: IOID4VCIHolder_1.OID4VCIMachineGuards.credentialsToSelectRequiredGuard,
496
+ },
497
+ {
498
+ target: IOID4VCIHolder_1.OID4VCIMachineStates.aborted,
499
+ },
500
+ ],
501
+ },
502
+ states: {
503
+ [IOID4VCIHolder_1.OID4VCIMachineVerifyPinStates.idle]: {},
504
+ [IOID4VCIHolder_1.OID4VCIMachineVerifyPinStates.next]: {
505
+ always: {
506
+ target: `#${IOID4VCIHolder_1.OID4VCIMachineStates.getCredentials}`,
507
+ cond: IOID4VCIHolder_1.OID4VCIMachineGuards.verificationCodeGuard,
508
+ },
509
+ },
510
+ },
511
+ },
512
+ [IOID4VCIHolder_1.OID4VCIMachineStates.getCredentials]: {
513
+ id: IOID4VCIHolder_1.OID4VCIMachineStates.getCredentials,
514
+ invoke: {
515
+ src: IOID4VCIHolder_1.OID4VCIMachineServices.getCredentials,
516
+ onDone: {
517
+ target: IOID4VCIHolder_1.OID4VCIMachineStates.verifyCredentials,
518
+ actions: (0, xstate_1.assign)({
519
+ credentialsToAccept: (_ctx, _event) => _event.data,
520
+ }),
521
+ },
522
+ onError: {
523
+ target: IOID4VCIHolder_1.OID4VCIMachineStates.handleError,
524
+ actions: (0, xstate_1.assign)({
525
+ error: (_ctx, _event) => ({
526
+ title: (0, Localization_1.translate)('oid4vci_machine_retrieve_credentials_error_title'),
527
+ message: _event.data.message,
528
+ stack: _event.data.stack,
529
+ }),
530
+ }),
531
+ },
532
+ },
533
+ exit: (0, xstate_1.assign)({ verificationCode: undefined }),
534
+ },
535
+ [IOID4VCIHolder_1.OID4VCIMachineStates.verifyCredentials]: {
536
+ id: IOID4VCIHolder_1.OID4VCIMachineStates.verifyCredentials,
537
+ invoke: {
538
+ src: IOID4VCIHolder_1.OID4VCIMachineServices.assertValidCredentials,
539
+ onDone: {
540
+ target: IOID4VCIHolder_1.OID4VCIMachineStates.transitionFromWalletInput,
541
+ },
542
+ onError: {
543
+ target: IOID4VCIHolder_1.OID4VCIMachineStates.handleError,
544
+ actions: (0, xstate_1.assign)({
545
+ error: (_ctx, _event) => ({
546
+ title: (0, Localization_1.translate)('oid4vci_machine_verify_credentials_error_title'),
547
+ message: _event.data.message,
548
+ stack: _event.data.stack,
549
+ }),
550
+ }),
551
+ },
552
+ },
553
+ },
554
+ [IOID4VCIHolder_1.OID4VCIMachineStates.transitionFromWalletInput]: {
555
+ id: IOID4VCIHolder_1.OID4VCIMachineStates.transitionFromWalletInput,
556
+ always: [
557
+ {
558
+ target: IOID4VCIHolder_1.OID4VCIMachineStates.addContactIdentity,
559
+ cond: IOID4VCIHolder_1.OID4VCIMachineGuards.hasNoContactIdentityGuard,
560
+ },
561
+ {
562
+ target: IOID4VCIHolder_1.OID4VCIMachineStates.reviewCredentials,
563
+ },
564
+ ],
565
+ },
566
+ [IOID4VCIHolder_1.OID4VCIMachineStates.addContactIdentity]: {
567
+ id: IOID4VCIHolder_1.OID4VCIMachineStates.addContactIdentity,
568
+ invoke: {
569
+ src: IOID4VCIHolder_1.OID4VCIMachineServices.addContactIdentity,
570
+ onDone: {
571
+ target: IOID4VCIHolder_1.OID4VCIMachineStates.addIssuerBrandingAfterIdentity,
572
+ actions: (_ctx, _event) => {
573
+ var _a;
574
+ (_a = _ctx.contact) === null || _a === void 0 ? void 0 : _a.identities.push(_event.data);
575
+ },
576
+ },
577
+ onError: {
578
+ target: IOID4VCIHolder_1.OID4VCIMachineStates.handleError,
579
+ actions: (0, xstate_1.assign)({
580
+ error: (_ctx, _event) => ({
581
+ title: (0, Localization_1.translate)('oid4vci_machine_add_contact_identity_error_title'),
582
+ message: _event.data.message,
583
+ stack: _event.data.stack,
584
+ }),
585
+ }),
586
+ },
587
+ },
588
+ },
589
+ [IOID4VCIHolder_1.OID4VCIMachineStates.addIssuerBrandingAfterIdentity]: {
590
+ id: IOID4VCIHolder_1.OID4VCIMachineStates.addIssuerBrandingAfterIdentity,
591
+ invoke: {
592
+ src: IOID4VCIHolder_1.OID4VCIMachineServices.storeIssuerBranding,
593
+ onDone: {
594
+ target: IOID4VCIHolder_1.OID4VCIMachineStates.reviewCredentials,
595
+ },
596
+ onError: {
597
+ target: IOID4VCIHolder_1.OID4VCIMachineStates.handleError,
598
+ actions: (0, xstate_1.assign)({
599
+ error: (_ctx, _event) => ({
600
+ title: (0, Localization_1.translate)('oid4vci_machine_store_issuer_branding_error_title'),
601
+ message: _event.data.message,
602
+ stack: _event.data.stack,
603
+ }),
604
+ }),
605
+ },
606
+ },
607
+ },
608
+ [IOID4VCIHolder_1.OID4VCIMachineStates.reviewCredentials]: {
609
+ id: IOID4VCIHolder_1.OID4VCIMachineStates.reviewCredentials,
610
+ on: {
611
+ [IOID4VCIHolder_1.OID4VCIMachineEvents.NEXT]: {
612
+ target: IOID4VCIHolder_1.OID4VCIMachineStates.storeCredentialBranding,
613
+ },
614
+ [IOID4VCIHolder_1.OID4VCIMachineEvents.DECLINE]: {
615
+ target: IOID4VCIHolder_1.OID4VCIMachineStates.declined,
616
+ },
617
+ [IOID4VCIHolder_1.OID4VCIMachineEvents.PREVIOUS]: {
618
+ target: IOID4VCIHolder_1.OID4VCIMachineStates.aborted,
619
+ },
620
+ },
621
+ },
622
+ [IOID4VCIHolder_1.OID4VCIMachineStates.storeCredentialBranding]: {
623
+ id: IOID4VCIHolder_1.OID4VCIMachineStates.storeCredentialBranding,
624
+ invoke: {
625
+ src: IOID4VCIHolder_1.OID4VCIMachineServices.storeCredentialBranding,
626
+ onDone: {
627
+ target: IOID4VCIHolder_1.OID4VCIMachineStates.storeCredentials,
628
+ },
629
+ onError: {
630
+ target: IOID4VCIHolder_1.OID4VCIMachineStates.handleError,
631
+ actions: (0, xstate_1.assign)({
632
+ error: (_ctx, _event) => ({
633
+ title: (0, Localization_1.translate)('oid4vci_machine_store_credential_branding_error_title'),
634
+ message: _event.data.message,
635
+ stack: _event.data.stack,
636
+ }),
637
+ }),
638
+ },
639
+ },
640
+ },
641
+ [IOID4VCIHolder_1.OID4VCIMachineStates.storeCredentials]: {
642
+ id: IOID4VCIHolder_1.OID4VCIMachineStates.storeCredentials,
643
+ invoke: {
644
+ src: IOID4VCIHolder_1.OID4VCIMachineServices.storeCredentials,
645
+ onDone: {
646
+ target: IOID4VCIHolder_1.OID4VCIMachineStates.done,
647
+ },
648
+ onError: {
649
+ target: IOID4VCIHolder_1.OID4VCIMachineStates.handleError,
650
+ actions: (0, xstate_1.assign)({
651
+ error: (_ctx, _event) => ({
652
+ title: (0, Localization_1.translate)('oid4vci_machine_store_credential_error_title'),
653
+ message: _event.data.message,
654
+ stack: _event.data.stack,
655
+ }),
656
+ }),
657
+ },
658
+ },
659
+ },
660
+ [IOID4VCIHolder_1.OID4VCIMachineStates.handleError]: {
661
+ id: IOID4VCIHolder_1.OID4VCIMachineStates.handleError,
662
+ on: {
663
+ [IOID4VCIHolder_1.OID4VCIMachineEvents.NEXT]: {
664
+ target: IOID4VCIHolder_1.OID4VCIMachineStates.error,
665
+ },
666
+ [IOID4VCIHolder_1.OID4VCIMachineEvents.PREVIOUS]: {
667
+ target: IOID4VCIHolder_1.OID4VCIMachineStates.error,
668
+ },
669
+ },
670
+ },
671
+ [IOID4VCIHolder_1.OID4VCIMachineStates.aborted]: {
672
+ id: IOID4VCIHolder_1.OID4VCIMachineStates.aborted,
673
+ type: 'final',
674
+ },
675
+ [IOID4VCIHolder_1.OID4VCIMachineStates.declined]: {
676
+ id: IOID4VCIHolder_1.OID4VCIMachineStates.declined,
677
+ type: 'final',
678
+ },
679
+ [IOID4VCIHolder_1.OID4VCIMachineStates.error]: {
680
+ id: IOID4VCIHolder_1.OID4VCIMachineStates.error,
681
+ type: 'final',
682
+ },
683
+ [IOID4VCIHolder_1.OID4VCIMachineStates.done]: {
684
+ id: IOID4VCIHolder_1.OID4VCIMachineStates.done,
685
+ type: 'final',
686
+ },
687
+ },
688
+ });
689
+ };
690
+ class OID4VCIMachine {
691
+ static newInstance(opts, context) {
692
+ return __awaiter(this, void 0, void 0, function* () {
693
+ const interpreter = (0, xstate_1.interpret)(createOID4VCIMachine(opts).withConfig({
694
+ services: Object.assign({}, opts === null || opts === void 0 ? void 0 : opts.services),
695
+ guards: Object.assign({ oid4vciHasNoContactGuard,
696
+ oid4vciCredentialsToSelectRequiredGuard,
697
+ oid4vciRequirePinGuard,
698
+ oid4vciHasNoContactIdentityGuard,
699
+ oid4vciVerificationCodeGuard,
700
+ oid4vciHasContactGuard,
701
+ oid4vciCreateContactGuard,
702
+ oid4vciHasSelectedCredentialsGuard,
703
+ oid4vciRequireAuthorizationGuard,
704
+ oid4vciNoAuthorizationGuard,
705
+ oid4vciHasAuthorizationResponse,
706
+ oid4vciIsOIDFOriginGuard,
707
+ oid4vciContactHasLowTrustGuard,
708
+ oid4vciIsFirstPartyApplication }, opts === null || opts === void 0 ? void 0 : opts.guards),
709
+ }));
710
+ if (typeof (opts === null || opts === void 0 ? void 0 : opts.subscription) === 'function') {
711
+ interpreter.onTransition(opts.subscription);
712
+ }
713
+ if ((opts === null || opts === void 0 ? void 0 : opts.requireCustomNavigationHook) !== true) {
714
+ if (typeof (opts === null || opts === void 0 ? void 0 : opts.stateNavigationListener) === 'function') {
715
+ interpreter.onTransition((snapshot) => {
716
+ if (opts === null || opts === void 0 ? void 0 : opts.stateNavigationListener) {
717
+ opts.stateNavigationListener(interpreter, snapshot);
718
+ }
719
+ });
720
+ }
721
+ }
722
+ return { interpreter };
723
+ });
724
+ }
725
+ }
726
+ exports.OID4VCIMachine = OID4VCIMachine;
727
+ //# sourceMappingURL=oid4vciMachine.js.map