@mattrglobal/verifier-sdk-web 2.2.1-unstable.76 → 2.2.1-unstable.78
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/README.md +53 -29
- package/dist/lib/verifier-js-no-deps.cjs.js +135 -60
- package/dist/lib/verifier-js-no-deps.cjs.js.map +1 -1
- package/dist/lib/verifier-js.cjs.js +135 -60
- package/dist/lib/verifier-js.cjs.js.map +1 -1
- package/dist/typings/verifier/types/credential-presentation.d.ts +21 -0
- package/dist/typings/verifier/types/verifier-web-sdk.d.ts +18 -7
- package/dist/verifier-js.development.js +135 -60
- package/dist/verifier-js.development.js.map +1 -1
- package/dist/verifier-js.production.esm.js +2 -2
- package/dist/verifier-js.production.esm.js.map +1 -1
- package/dist/verifier-js.production.js +2 -2
- package/dist/verifier-js.production.js.map +1 -1
- package/package.json +2 -2
|
@@ -356,8 +356,29 @@ export declare const CreateSessionResponseValidator: v.UnionSchema<[v.ObjectSche
|
|
|
356
356
|
readonly sessionId: v.StringSchema<undefined>;
|
|
357
357
|
readonly sessionKey: v.StringSchema<undefined>;
|
|
358
358
|
readonly sessionUrl: v.StringSchema<undefined>;
|
|
359
|
+
readonly authRequestUri: v.StringSchema<undefined>;
|
|
359
360
|
readonly state: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
360
361
|
}, undefined>], undefined>;
|
|
362
|
+
/**
|
|
363
|
+
* The payload passed to the {@link RequestCredentialsOptions.onPresentationRequest} hook for an OpenID4VP session.
|
|
364
|
+
*/
|
|
365
|
+
export type PresentationRequestOpenId4vp = {
|
|
366
|
+
type: SessionType.Openid4vp;
|
|
367
|
+
sessionId: string;
|
|
368
|
+
authRequestUri: string;
|
|
369
|
+
};
|
|
370
|
+
/**
|
|
371
|
+
* The payload passed to the {@link RequestCredentialsOptions.onPresentationRequest} hook for a Digital Credentials
|
|
372
|
+
* API session.
|
|
373
|
+
*/
|
|
374
|
+
export type PresentationRequestDigitalCredentialsApi = {
|
|
375
|
+
type: SessionType.DigitalCredentialsApi;
|
|
376
|
+
sessionId: string;
|
|
377
|
+
};
|
|
378
|
+
/**
|
|
379
|
+
* The payload passed to the {@link RequestCredentialsOptions.onPresentationRequest} hook.
|
|
380
|
+
*/
|
|
381
|
+
export type PresentationRequest = PresentationRequestOpenId4vp | PresentationRequestDigitalCredentialsApi;
|
|
361
382
|
export type AbortSessionRequest = v.InferOutput<typeof AbortSessionRequestValidator>;
|
|
362
383
|
export declare const AbortSessionRequestValidator: v.ObjectSchema<{
|
|
363
384
|
readonly sessionId: v.StringSchema<undefined>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as v from "valibot";
|
|
2
2
|
import { BaseError } from "../../common";
|
|
3
|
-
import {
|
|
3
|
+
import { CredentialQuery, Mode, PresentationRequest, PresentationSessionResult } from "./credential-presentation";
|
|
4
4
|
export declare enum LocalStorageKey {
|
|
5
5
|
challenge = "mattr_chg",
|
|
6
6
|
sessionId = "mattr_sid",
|
|
@@ -11,7 +11,8 @@ export declare const MATTR_SDK_VERSION_VALUE = "2.2.0";
|
|
|
11
11
|
export declare enum MessageEventDataType {
|
|
12
12
|
PresentationCompleted = "PresentationCompleted",// { type: "PresentationCompleted", responseCode, sessionId }
|
|
13
13
|
PresentationTimeout = "PresentationTimeout",// { type: "PresentationTimeout", sessionId }
|
|
14
|
-
PresentationAbort = "PresentationAbort"
|
|
14
|
+
PresentationAbort = "PresentationAbort",// { type: "PresentationAbort", sessionId }
|
|
15
|
+
PresentationRequestUpdated = "PresentationRequestUpdated"
|
|
15
16
|
}
|
|
16
17
|
export type SameDeviceRequestCredentialsOptions = {
|
|
17
18
|
challenge: string;
|
|
@@ -29,6 +30,7 @@ export type CrossDeviceRequestCredentialsOptions = {
|
|
|
29
30
|
sessionKey: string;
|
|
30
31
|
sessionId: string;
|
|
31
32
|
state?: string;
|
|
33
|
+
onPresentationRequest?: (request: PresentationRequest) => void | Promise<void>;
|
|
32
34
|
};
|
|
33
35
|
/**
|
|
34
36
|
* Options for openid4vpConfiguration to request credentials via a same-device flow.
|
|
@@ -133,10 +135,16 @@ export type RequestCredentialsOptions = {
|
|
|
133
135
|
*/
|
|
134
136
|
state?: string;
|
|
135
137
|
/**
|
|
136
|
-
* An optional hook
|
|
137
|
-
*
|
|
138
|
+
* An optional hook invoked once after presentation session creation, and again every time the OpenID4VP
|
|
139
|
+
* auth-request URI is regenerated (cross-device QR code refreshes). Not re-invoked beyond the initial call for
|
|
140
|
+
* same-device or Digital Credentials API sessions.
|
|
141
|
+
*
|
|
142
|
+
* If this hook throws or its returned promise rejects, the in-progress presentation is aborted (the session is
|
|
143
|
+
* aborted server-side and, for cross-device, the iframe is closed) and `requestCredentials()` resolves with an
|
|
144
|
+
* {@link RequestCredentialsErrorType.OnPresentationRequestFailed} error. To continue the presentation flow
|
|
145
|
+
* regardless of an error in the hook, catch and handle the error inside the hook.
|
|
138
146
|
*/
|
|
139
|
-
|
|
147
|
+
onPresentationRequest?: (request: PresentationRequest) => void | Promise<void>;
|
|
140
148
|
};
|
|
141
149
|
export declare const RequestCredentialsOptionsValidator: v.ObjectSchema<{
|
|
142
150
|
readonly credentialQuery: v.SchemaWithPipe<readonly [v.ArraySchema<v.ObjectSchema<{
|
|
@@ -176,6 +184,7 @@ export type MessageEvent = {
|
|
|
176
184
|
type: MessageEventDataType;
|
|
177
185
|
responseCode?: string;
|
|
178
186
|
sessionId?: string;
|
|
187
|
+
authRequestUri?: string;
|
|
179
188
|
};
|
|
180
189
|
origin: string;
|
|
181
190
|
};
|
|
@@ -209,7 +218,8 @@ export type RequestCredentialsResponse = {
|
|
|
209
218
|
export declare enum RequestCredentialsErrorType {
|
|
210
219
|
RequestCredentialsFailed = "RequestCredentialsFailed",
|
|
211
220
|
Timeout = "Timeout",
|
|
212
|
-
Abort = "Abort"
|
|
221
|
+
Abort = "Abort",
|
|
222
|
+
OnPresentationRequestFailed = "OnPresentationRequestFailed"
|
|
213
223
|
}
|
|
214
224
|
export declare enum RequestCredentialsErrorMessage {
|
|
215
225
|
FailedToGetSessionResult = "Failed to get session result",
|
|
@@ -221,7 +231,8 @@ export declare enum RequestCredentialsErrorMessage {
|
|
|
221
231
|
DcApiResponseParseError = "Failed to parse response from Digital Credentials API",
|
|
222
232
|
Abort = "User aborted the session",
|
|
223
233
|
Timeout = "User session timeout",
|
|
224
|
-
StateMismatch = "State mismatch between requested session and back-channel result"
|
|
234
|
+
StateMismatch = "State mismatch between requested session and back-channel result",
|
|
235
|
+
OnPresentationRequestFailed = "The onPresentationRequest hook threw an error or rejected"
|
|
225
236
|
}
|
|
226
237
|
/**
|
|
227
238
|
* The error type for the `abortCredentialRequest` function
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* Do Not Translate or Localize
|
|
8
8
|
*
|
|
9
9
|
* Bundle of @mattrglobal/verifier-sdk-web
|
|
10
|
-
* Generated: 2026-
|
|
10
|
+
* Generated: 2026-08-02
|
|
11
11
|
* Version: 2.2.0
|
|
12
12
|
* Dependencies:
|
|
13
13
|
*
|
|
@@ -1370,6 +1370,7 @@
|
|
|
1370
1370
|
sessionId: string(),
|
|
1371
1371
|
sessionKey: string(),
|
|
1372
1372
|
sessionUrl: string(),
|
|
1373
|
+
authRequestUri: string(),
|
|
1373
1374
|
state: optional(string())
|
|
1374
1375
|
});
|
|
1375
1376
|
const CreateSessionResponseValidator = union([ CreateSessionDigitalCredentialsValidator, CreateSessionOpenId4vpResponseValidator ]);
|
|
@@ -1392,6 +1393,7 @@
|
|
|
1392
1393
|
MessageEventDataType["PresentationCompleted"] = "PresentationCompleted";
|
|
1393
1394
|
MessageEventDataType["PresentationTimeout"] = "PresentationTimeout";
|
|
1394
1395
|
MessageEventDataType["PresentationAbort"] = "PresentationAbort";
|
|
1396
|
+
MessageEventDataType["PresentationRequestUpdated"] = "PresentationRequestUpdated";
|
|
1395
1397
|
})(MessageEventDataType || (MessageEventDataType = {}));
|
|
1396
1398
|
const OpenId4vpConfigSameDeviceOptionsValidator = object({
|
|
1397
1399
|
walletProviderId: optional(string()),
|
|
@@ -1418,6 +1420,7 @@
|
|
|
1418
1420
|
RequestCredentialsErrorType["RequestCredentialsFailed"] = "RequestCredentialsFailed";
|
|
1419
1421
|
RequestCredentialsErrorType["Timeout"] = "Timeout";
|
|
1420
1422
|
RequestCredentialsErrorType["Abort"] = "Abort";
|
|
1423
|
+
RequestCredentialsErrorType["OnPresentationRequestFailed"] = "OnPresentationRequestFailed";
|
|
1421
1424
|
})(exports.RequestCredentialsErrorType || (exports.RequestCredentialsErrorType = {}));
|
|
1422
1425
|
var RequestCredentialsErrorMessage;
|
|
1423
1426
|
(function(RequestCredentialsErrorMessage) {
|
|
@@ -1431,6 +1434,7 @@
|
|
|
1431
1434
|
RequestCredentialsErrorMessage["Abort"] = "User aborted the session";
|
|
1432
1435
|
RequestCredentialsErrorMessage["Timeout"] = "User session timeout";
|
|
1433
1436
|
RequestCredentialsErrorMessage["StateMismatch"] = "State mismatch between requested session and back-channel result";
|
|
1437
|
+
RequestCredentialsErrorMessage["OnPresentationRequestFailed"] = "The onPresentationRequest hook threw an error or rejected";
|
|
1434
1438
|
})(RequestCredentialsErrorMessage || (RequestCredentialsErrorMessage = {}));
|
|
1435
1439
|
exports.AbortSessionErrorType = void 0;
|
|
1436
1440
|
(function(AbortSessionErrorType) {
|
|
@@ -1732,71 +1736,111 @@
|
|
|
1732
1736
|
}
|
|
1733
1737
|
removeWindowMessageEventListener();
|
|
1734
1738
|
};
|
|
1735
|
-
const receiveMessageHandler = options =>
|
|
1736
|
-
|
|
1737
|
-
|
|
1738
|
-
|
|
1739
|
-
|
|
1740
|
-
|
|
1741
|
-
|
|
1742
|
-
|
|
1743
|
-
|
|
1744
|
-
|
|
1745
|
-
|
|
1746
|
-
|
|
1747
|
-
|
|
1748
|
-
|
|
1739
|
+
const receiveMessageHandler = options => {
|
|
1740
|
+
let queue = Promise.resolve();
|
|
1741
|
+
const processEvent = async event => {
|
|
1742
|
+
const {onComplete: onComplete, onFailure: onFailure, container: container, sessionId: sessionId, sessionKey: sessionKey, apiBaseUrl: apiBaseUrl, challenge: challenge, state: state, onPresentationRequest: onPresentationRequest, isSettled: isSettled} = options;
|
|
1743
|
+
if (isSettled() || event.origin !== apiBaseUrl) {
|
|
1744
|
+
return;
|
|
1745
|
+
}
|
|
1746
|
+
if (event.data.type === MessageEventDataType.PresentationRequestUpdated && event.data.authRequestUri) {
|
|
1747
|
+
if (onPresentationRequest) {
|
|
1748
|
+
try {
|
|
1749
|
+
await onPresentationRequest({
|
|
1750
|
+
type: SessionType.Openid4vp,
|
|
1751
|
+
sessionId: sessionId,
|
|
1752
|
+
authRequestUri: event.data.authRequestUri
|
|
1753
|
+
});
|
|
1754
|
+
} catch (cause) {
|
|
1755
|
+
if (isSettled()) {
|
|
1756
|
+
return;
|
|
1757
|
+
}
|
|
1758
|
+
onFailure({
|
|
1759
|
+
type: exports.RequestCredentialsErrorType.OnPresentationRequestFailed,
|
|
1760
|
+
message: RequestCredentialsErrorMessage.OnPresentationRequestFailed,
|
|
1761
|
+
cause: cause
|
|
1762
|
+
});
|
|
1763
|
+
closeCrossDeviceModal({
|
|
1764
|
+
container: container
|
|
1765
|
+
});
|
|
1766
|
+
await abortSession({
|
|
1767
|
+
apiBaseUrl: apiBaseUrl,
|
|
1768
|
+
sessionId: sessionId,
|
|
1769
|
+
sessionKey: sessionKey
|
|
1770
|
+
});
|
|
1771
|
+
}
|
|
1772
|
+
}
|
|
1773
|
+
return;
|
|
1774
|
+
}
|
|
1775
|
+
if (event.data.type === MessageEventDataType.PresentationCompleted && event.data.responseCode && event.data.sessionId) {
|
|
1776
|
+
const responseCode = event.data.responseCode;
|
|
1777
|
+
const result = await exchangeSessionResult({
|
|
1778
|
+
challenge: challenge,
|
|
1779
|
+
responseCode: responseCode,
|
|
1780
|
+
sessionId: sessionId,
|
|
1781
|
+
apiBaseUrl: apiBaseUrl
|
|
1782
|
+
});
|
|
1783
|
+
if (isSettled()) {
|
|
1784
|
+
return;
|
|
1785
|
+
}
|
|
1786
|
+
if (result.isErr()) {
|
|
1787
|
+
onFailure({
|
|
1788
|
+
type: exports.RequestCredentialsErrorType.RequestCredentialsFailed,
|
|
1789
|
+
message: RequestCredentialsErrorMessage.FailedToGetSessionResult
|
|
1790
|
+
});
|
|
1791
|
+
closeCrossDeviceModal({
|
|
1792
|
+
container: container
|
|
1793
|
+
});
|
|
1794
|
+
return;
|
|
1795
|
+
}
|
|
1796
|
+
const resultState = "challenge" in result.value ? result.value.state : undefined;
|
|
1797
|
+
if (state !== undefined && resultState !== undefined && state !== resultState) {
|
|
1798
|
+
onFailure({
|
|
1799
|
+
type: exports.RequestCredentialsErrorType.RequestCredentialsFailed,
|
|
1800
|
+
message: RequestCredentialsErrorMessage.StateMismatch
|
|
1801
|
+
});
|
|
1802
|
+
closeCrossDeviceModal({
|
|
1803
|
+
container: container
|
|
1804
|
+
});
|
|
1805
|
+
return;
|
|
1806
|
+
}
|
|
1807
|
+
onComplete({
|
|
1808
|
+
result: "challenge" in result.value ? result.value : undefined,
|
|
1809
|
+
sessionId: result.value.sessionId,
|
|
1810
|
+
sessionCompletedInRedirect: false,
|
|
1811
|
+
state: resultState !== null && resultState !== void 0 ? resultState : state
|
|
1812
|
+
});
|
|
1813
|
+
closeCrossDeviceModal({
|
|
1814
|
+
container: container
|
|
1815
|
+
});
|
|
1816
|
+
return;
|
|
1817
|
+
}
|
|
1818
|
+
if (event.data.type === MessageEventDataType.PresentationTimeout) {
|
|
1749
1819
|
onFailure({
|
|
1750
|
-
type: exports.RequestCredentialsErrorType.
|
|
1751
|
-
message: RequestCredentialsErrorMessage.
|
|
1820
|
+
type: exports.RequestCredentialsErrorType.Timeout,
|
|
1821
|
+
message: RequestCredentialsErrorMessage.Timeout
|
|
1752
1822
|
});
|
|
1753
1823
|
closeCrossDeviceModal({
|
|
1754
1824
|
container: container
|
|
1755
1825
|
});
|
|
1756
1826
|
return;
|
|
1757
1827
|
}
|
|
1758
|
-
|
|
1759
|
-
if (state !== undefined && resultState !== undefined && state !== resultState) {
|
|
1828
|
+
if (event.data.type === MessageEventDataType.PresentationAbort) {
|
|
1760
1829
|
onFailure({
|
|
1761
|
-
type: exports.RequestCredentialsErrorType.
|
|
1762
|
-
message: RequestCredentialsErrorMessage.
|
|
1830
|
+
type: exports.RequestCredentialsErrorType.Abort,
|
|
1831
|
+
message: RequestCredentialsErrorMessage.Abort
|
|
1763
1832
|
});
|
|
1764
1833
|
closeCrossDeviceModal({
|
|
1765
1834
|
container: container
|
|
1766
1835
|
});
|
|
1767
1836
|
return;
|
|
1768
1837
|
}
|
|
1769
|
-
|
|
1770
|
-
|
|
1771
|
-
|
|
1772
|
-
|
|
1773
|
-
|
|
1774
|
-
|
|
1775
|
-
closeCrossDeviceModal({
|
|
1776
|
-
container: container
|
|
1777
|
-
});
|
|
1778
|
-
return;
|
|
1779
|
-
}
|
|
1780
|
-
if (event.data.type === MessageEventDataType.PresentationTimeout) {
|
|
1781
|
-
onFailure({
|
|
1782
|
-
type: exports.RequestCredentialsErrorType.Timeout,
|
|
1783
|
-
message: RequestCredentialsErrorMessage.Timeout
|
|
1784
|
-
});
|
|
1785
|
-
closeCrossDeviceModal({
|
|
1786
|
-
container: container
|
|
1787
|
-
});
|
|
1788
|
-
return;
|
|
1789
|
-
}
|
|
1790
|
-
if (event.data.type === MessageEventDataType.PresentationAbort) {
|
|
1791
|
-
onFailure({
|
|
1792
|
-
type: exports.RequestCredentialsErrorType.Abort,
|
|
1793
|
-
message: RequestCredentialsErrorMessage.Abort
|
|
1794
|
-
});
|
|
1795
|
-
closeCrossDeviceModal({
|
|
1796
|
-
container: container
|
|
1797
|
-
});
|
|
1798
|
-
return;
|
|
1799
|
-
}
|
|
1838
|
+
};
|
|
1839
|
+
return event => {
|
|
1840
|
+
const next = queue.then((() => processEvent(event)));
|
|
1841
|
+
queue = next.catch((() => undefined));
|
|
1842
|
+
return next;
|
|
1843
|
+
};
|
|
1800
1844
|
};
|
|
1801
1845
|
const openCrossDeviceModal = options => {
|
|
1802
1846
|
const {sessionUrl: sessionUrl} = options;
|
|
@@ -1814,16 +1858,18 @@
|
|
|
1814
1858
|
return modalContainer;
|
|
1815
1859
|
};
|
|
1816
1860
|
const requestCredentialsWithCrossDevice = async options => {
|
|
1817
|
-
const {challenge: challenge, apiBaseUrl: apiBaseUrl, sessionUrl: sessionUrl, sessionId: sessionId, sessionKey: sessionKey, state: state} = options;
|
|
1861
|
+
const {challenge: challenge, apiBaseUrl: apiBaseUrl, sessionUrl: sessionUrl, sessionId: sessionId, sessionKey: sessionKey, state: state, onPresentationRequest: onPresentationRequest} = options;
|
|
1818
1862
|
const container = openCrossDeviceModal({
|
|
1819
1863
|
sessionUrl: sessionUrl
|
|
1820
1864
|
});
|
|
1865
|
+
let settled = false;
|
|
1821
1866
|
return await new Promise((resolve => {
|
|
1822
1867
|
const abortController = setActiveSession({
|
|
1823
1868
|
sessionId: sessionId,
|
|
1824
1869
|
sessionKey: sessionKey
|
|
1825
1870
|
});
|
|
1826
1871
|
abortController.signal.addEventListener("abort", (() => {
|
|
1872
|
+
settled = true;
|
|
1827
1873
|
closeCrossDeviceModal({
|
|
1828
1874
|
container: container
|
|
1829
1875
|
});
|
|
@@ -1836,11 +1882,20 @@
|
|
|
1836
1882
|
listener = receiveMessageHandler({
|
|
1837
1883
|
container: container,
|
|
1838
1884
|
sessionId: sessionId,
|
|
1885
|
+
sessionKey: sessionKey,
|
|
1839
1886
|
apiBaseUrl: apiBaseUrl,
|
|
1840
1887
|
challenge: challenge,
|
|
1841
1888
|
state: state,
|
|
1842
|
-
|
|
1843
|
-
|
|
1889
|
+
onPresentationRequest: onPresentationRequest,
|
|
1890
|
+
isSettled: () => settled,
|
|
1891
|
+
onComplete: data => {
|
|
1892
|
+
settled = true;
|
|
1893
|
+
resolve(ok(data));
|
|
1894
|
+
},
|
|
1895
|
+
onFailure: error => {
|
|
1896
|
+
settled = true;
|
|
1897
|
+
resolve(err(error));
|
|
1898
|
+
}
|
|
1844
1899
|
});
|
|
1845
1900
|
window.addEventListener(WindowEventListenerType.message, listener, false);
|
|
1846
1901
|
}));
|
|
@@ -2074,7 +2129,7 @@
|
|
|
2074
2129
|
}
|
|
2075
2130
|
assertType(RequestCredentialsOptionsValidator, "Invalid request credential options")(options);
|
|
2076
2131
|
const {apiBaseUrl: apiBaseUrl, applicationId: applicationId} = initializeOptions;
|
|
2077
|
-
const {challenge: challenge = generateChallenge(), credentialQuery: credentialQuery, openid4vpConfiguration: openid4vpConfiguration, state: state,
|
|
2132
|
+
const {challenge: challenge = generateChallenge(), credentialQuery: credentialQuery, openid4vpConfiguration: openid4vpConfiguration, state: state, onPresentationRequest: onPresentationRequest} = options;
|
|
2078
2133
|
const dcApiSupported = isDigitalCredentialsApiSupported();
|
|
2079
2134
|
const openId4VpRedirectUri = deriveOpenId4vpRedirectUri(openid4vpConfiguration);
|
|
2080
2135
|
const createSessionResult = await createSession({
|
|
@@ -2096,10 +2151,29 @@
|
|
|
2096
2151
|
}
|
|
2097
2152
|
const session = createSessionResult.value;
|
|
2098
2153
|
const {sessionKey: sessionKey, sessionId: sessionId} = session;
|
|
2099
|
-
if (
|
|
2154
|
+
if (onPresentationRequest) {
|
|
2155
|
+
const presentationRequest = session.type === SessionType.DigitalCredentialsApi ? {
|
|
2156
|
+
type: SessionType.DigitalCredentialsApi,
|
|
2157
|
+
sessionId: sessionId
|
|
2158
|
+
} : {
|
|
2159
|
+
type: SessionType.Openid4vp,
|
|
2160
|
+
sessionId: sessionId,
|
|
2161
|
+
authRequestUri: session.authRequestUri
|
|
2162
|
+
};
|
|
2100
2163
|
try {
|
|
2101
|
-
await
|
|
2102
|
-
} catch (
|
|
2164
|
+
await onPresentationRequest(presentationRequest);
|
|
2165
|
+
} catch (cause) {
|
|
2166
|
+
await abortSession({
|
|
2167
|
+
apiBaseUrl: apiBaseUrl,
|
|
2168
|
+
sessionId: sessionId,
|
|
2169
|
+
sessionKey: sessionKey
|
|
2170
|
+
});
|
|
2171
|
+
return err({
|
|
2172
|
+
type: exports.RequestCredentialsErrorType.OnPresentationRequestFailed,
|
|
2173
|
+
message: RequestCredentialsErrorMessage.OnPresentationRequestFailed,
|
|
2174
|
+
cause: cause
|
|
2175
|
+
});
|
|
2176
|
+
}
|
|
2103
2177
|
}
|
|
2104
2178
|
if (session.type === SessionType.DigitalCredentialsApi) {
|
|
2105
2179
|
const {request: request, sessionTtl: sessionTtl} = session;
|
|
@@ -2136,7 +2210,8 @@
|
|
|
2136
2210
|
sessionUrl: sessionUrl,
|
|
2137
2211
|
sessionKey: sessionKey,
|
|
2138
2212
|
sessionId: sessionId,
|
|
2139
|
-
state: state
|
|
2213
|
+
state: state,
|
|
2214
|
+
onPresentationRequest: onPresentationRequest
|
|
2140
2215
|
});
|
|
2141
2216
|
};
|
|
2142
2217
|
const deriveOpenId4vpRedirectUri = openid4vpConfiguration => {
|