@@ -311,8 +311,9 @@ - (void)registerWithConfiguration: (OIDServiceConfiguration *) configuration
311311 if (response) {
312312 resolve ([self formatRegistrationResponse: response]);
313313 } else {
314- reject ([self getErrorCode: error defaultCode: @" registration_failed" ],
315- [self getErrorMessage: error], error);
314+ [self rejectPromise: reject
315+ defaultCode: @" registration_failed"
316+ error: error];
316317 }
317318 }];
318319}
@@ -389,8 +390,9 @@ - (void)authorizeWithConfiguration: (OIDServiceConfiguration *) configuration
389390 if (authorizationResponse) {
390391 resolve ([self formatAuthorizationResponse: authorizationResponse withCodeVerifier: codeVerifier]);
391392 } else {
392- reject ([self getErrorCode: error defaultCode: @" authentication_failed" ],
393- [self getErrorMessage: error], error);
393+ [self rejectPromise: reject
394+ defaultCode: @" authentication_failed"
395+ error: error];
394396 }
395397 };
396398
@@ -425,8 +427,9 @@ - (void)authorizeWithConfiguration: (OIDServiceConfiguration *) configuration
425427 resolve ([self formatResponse: authState.lastTokenResponse
426428 withAuthResponse: authState.lastAuthorizationResponse]);
427429 } else {
428- reject ([self getErrorCode: error defaultCode: @" authentication_failed" ],
429- [self getErrorMessage: error], error);
430+ [self rejectPromise: reject
431+ defaultCode: @" authentication_failed"
432+ error: error];
430433 }
431434 };
432435
@@ -482,8 +485,9 @@ - (void)refreshWithConfiguration: (OIDServiceConfiguration *)configuration
482485 if (response) {
483486 resolve ([self formatResponse: response]);
484487 } else {
485- reject ([self getErrorCode: error defaultCode: @" token_refresh_failed" ],
486- [self getErrorMessage: error], error);
488+ [self rejectPromise: reject
489+ defaultCode: @" token_refresh_failed"
490+ error: error];
487491 }
488492 }];
489493}
@@ -535,8 +539,9 @@ - (void)endSessionWithConfiguration: (OIDServiceConfiguration *) configuration
535539 if (response) {
536540 resolve ([self formatEndSessionResponse: response]);
537541 } else {
538- reject ([self getErrorCode: error defaultCode: @" end_session_failed" ],
539- [self getErrorMessage: error], error);
542+ [self rejectPromise: reject
543+ defaultCode: @" end_session_failed"
544+ error: error];
540545 }
541546 }];
542547}
@@ -735,8 +740,44 @@ - (NSString*)getErrorMessage: (NSError*) error {
735740 userInfo[OIDOAuthErrorResponseErrorKey] &&
736741 userInfo[OIDOAuthErrorResponseErrorKey][OIDOAuthErrorFieldErrorDescription]) {
737742 return userInfo[OIDOAuthErrorResponseErrorKey][OIDOAuthErrorFieldErrorDescription];
743+ }
744+
745+ return [error localizedDescription ];
746+ }
747+
748+ - (NSString *)getNativeErrorFromError : (NSError *)error {
749+ NSDictionary *userInfo = [error userInfo ];
750+ if (!userInfo) {
751+ return nil ;
752+ }
753+
754+ NSError *underlyingError = userInfo[NSUnderlyingErrorKey ];
755+ if ([underlyingError isKindOfClass: [NSError class ]] && [underlyingError localizedDescription ]) {
756+ return [underlyingError localizedDescription ];
757+ }
758+
759+ return nil ;
760+ }
761+
762+ - (void )rejectPromise : (RCTPromiseRejectBlock)reject
763+ defaultCode : (NSString *)defaultCode
764+ error : (NSError *)error {
765+ NSString *code = [self getErrorCode: error defaultCode: defaultCode];
766+ NSString *message = [self getErrorMessage: error];
767+ NSString *nativeError = [self getNativeErrorFromError: error];
768+
769+ if (nativeError) {
770+ NSMutableDictionary *userInfo = [[error userInfo ] mutableCopy ];
771+ if (!userInfo) {
772+ userInfo = [NSMutableDictionary dictionary ];
773+ }
774+ userInfo[@" nativeError" ] = nativeError;
775+ NSError *rejectionError = [NSError errorWithDomain: error.domain
776+ code: error.code
777+ userInfo: userInfo];
778+ reject (code, message, rejectionError);
738779 } else {
739- return [error localizedDescription ] ;
780+ reject (code, message, error) ;
740781 }
741782}
742783
0 commit comments