@@ -133,27 +133,30 @@ function parseApiError(error: unknown, statusCode?: number): InviteErrorCode {
133133 return 'network-error'
134134 }
135135
136- // Handle HTTP status codes
137- if ( statusCode ) {
138- if ( statusCode === 401 ) return 'unauthorized'
139- if ( statusCode === 403 ) return 'forbidden'
140- if ( statusCode === 404 ) return 'invalid-invitation'
141- if ( statusCode >= 500 ) return 'server-error'
142- }
143-
144- // Handle error message patterns
136+ // Handle error message patterns first (more specific matching)
145137 const errorMessage =
146138 typeof error === 'string' ? error . toLowerCase ( ) : ( error as Error ) ?. message ?. toLowerCase ( ) || ''
147139
140+ // Check specific patterns before falling back to status codes
141+ // Order matters: more specific patterns must come first
142+ if ( errorMessage . includes ( 'already a member of an organization' ) ) return 'already-in-organization'
143+ if ( errorMessage . includes ( 'already a member' ) ) return 'already-member'
144+ if ( errorMessage . includes ( 'email mismatch' ) || errorMessage . includes ( 'different email' ) )
145+ return 'email-mismatch'
146+ if ( errorMessage . includes ( 'already processed' ) ) return 'already-processed'
148147 if ( errorMessage . includes ( 'unauthorized' ) ) return 'unauthorized'
149148 if ( errorMessage . includes ( 'forbidden' ) || errorMessage . includes ( 'permission' ) ) return 'forbidden'
150149 if ( errorMessage . includes ( 'not found' ) || errorMessage . includes ( 'expired' ) )
151150 return 'invalid-invitation'
152- if ( errorMessage . includes ( 'email mismatch' ) || errorMessage . includes ( 'different email' ) )
153- return 'email-mismatch'
154- if ( errorMessage . includes ( 'already a member' ) ) return 'already-member'
155- if ( errorMessage . includes ( 'already a member of an organization' ) ) return 'already-in-organization'
156- if ( errorMessage . includes ( 'already processed' ) ) return 'already-processed'
151+
152+ // Handle HTTP status codes as fallback
153+ if ( statusCode ) {
154+ if ( statusCode === 401 ) return 'unauthorized'
155+ if ( statusCode === 403 ) return 'forbidden'
156+ if ( statusCode === 404 ) return 'invalid-invitation'
157+ if ( statusCode === 409 ) return 'already-in-organization'
158+ if ( statusCode >= 500 ) return 'server-error'
159+ }
157160
158161 return 'unknown'
159162}
0 commit comments