@@ -109,12 +109,21 @@ export const createAuthorizationRequestUrl = async ({
109109 clientId ?: string
110110 version ?: OpenId4VCIVersion
111111} ) : Promise < string > => {
112- function removeDisplayAndValueTypes ( obj : any ) {
112+
113+ function removeDisplayAndValueTypes ( obj : any ) : any {
114+ if ( Array . isArray ( obj ) ) {
115+ return obj . map ( item => removeDisplayAndValueTypes ( item ) )
116+ }
117+
118+ if ( typeof obj !== 'object' || obj === null ) {
119+ return obj
120+ }
121+
113122 const newObj = { ...obj }
114123 for ( const prop in newObj ) {
115124 if ( [ 'display' , 'value_type' ] . includes ( prop ) ) {
116125 delete newObj [ prop ]
117- } else if ( typeof newObj [ prop ] === 'object' ) {
126+ } else if ( typeof newObj [ prop ] === 'object' && newObj [ prop ] !== null ) {
118127 newObj [ prop ] = removeDisplayAndValueTypes ( newObj [ prop ] )
119128 }
120129 }
@@ -215,7 +224,7 @@ export const createAuthorizationRequestUrl = async ({
215224 ...( credentialOffer ?. issuerState && {
216225 issuer_state : credentialOffer . issuerState
217226 } ) ,
218- scope : authorizationRequest . scope
227+ scope : authorizationRequest . scope ?? 'openid'
219228 }
220229
221230 if ( credentialOffer ?. issuerState ) {
@@ -228,12 +237,11 @@ export const createAuthorizationRequestUrl = async ({
228237 } else if ( parEndpoint && parMode !== PARMode . NEVER ) {
229238 logger . debug ( `USING PAR with endpoint ${ parEndpoint } ` )
230239
231- const parResponse = await formPost < PushedAuthorizationResponse > (
232- parEndpoint ,
233- convertJsonToURI ( queryObj , {
234- mode : JsonURIMode . X_FORM_WWW_URLENCODED ,
235- uriTypeProperties : [ 'client_id' , 'request_uri' , 'redirect_uri' , 'scope' , 'authorization_details' , 'issuer_state' , 'state' ]
236- } ) ,
240+ const parBody = convertJsonToURI ( queryObj , {
241+ mode : JsonURIMode . X_FORM_WWW_URLENCODED ,
242+ uriTypeProperties : [ 'client_id' , 'request_uri' , 'redirect_uri' , 'scope' , 'authorization_details' , 'issuer_state' , 'state' ]
243+ } )
244+ const parResponse = await formPost < PushedAuthorizationResponse > ( parEndpoint , parBody ,
237245 { contentType : 'application/x-www-form-urlencoded' , accept : 'application/json' }
238246 )
239247 if ( parResponse . errorBody || ! parResponse . successBody ) {
@@ -322,6 +330,10 @@ const handleLocations = (
322330 } else {
323331 authorizationDetails . locations = [ endpointMetadata . issuer ]
324332 }
333+
334+ if ( Array . isArray ( authorizationDetails . locations ) ) {
335+ authorizationDetails . locations = [ ...new Set ( authorizationDetails . locations ) ]
336+ }
325337 }
326338 return authorizationDetails
327339}
0 commit comments