UNPKG

@sphereon/oid4vci-client

Version:

OpenID for Verifiable Credential Issuance (OpenID4VCI) client

36 lines (27 loc) 1.27 kB
import { dpopTokenRequestNonceError } from '@sphereon/oid4vc-common'; import { OpenIDResponse } from 'oid4vci-common'; export type RetryRequestWithDPoPNonce = { ok: true; dpopNonce: string } | { ok: false }; export function shouldRetryTokenRequestWithDPoPNonce(response: OpenIDResponse<unknown, unknown>): RetryRequestWithDPoPNonce { if (!response.errorBody || response.errorBody.error !== dpopTokenRequestNonceError) { return { ok: false }; } const dPoPNonce = response.origResponse.headers.get('DPoP-Nonce'); if (!dPoPNonce) { throw new Error('Missing required DPoP-Nonce header.'); } return { ok: true, dpopNonce: dPoPNonce }; } export function shouldRetryResourceRequestWithDPoPNonce(response: OpenIDResponse<unknown, unknown>): RetryRequestWithDPoPNonce { if (!response.errorBody || response.origResponse.status !== 401) { return { ok: false }; } const wwwAuthenticateHeader = response.origResponse.headers.get('WWW-Authenticate'); if (!wwwAuthenticateHeader?.includes(dpopTokenRequestNonceError)) { return { ok: false }; } const dPoPNonce = response.origResponse.headers.get('DPoP-Nonce'); if (!dPoPNonce) { throw new Error('Missing required DPoP-Nonce header.'); } return { ok: true, dpopNonce: dPoPNonce }; }