@@ -158,6 +158,8 @@ defmodule Supabase.Fetcher do
158
158
{ :ok , ResponseAdapter . from ( resp ) }
159
159
end
160
160
|> handle_response ( builder )
161
+ rescue
162
+ exception -> handle_exception ( exception , __STACKTRACE__ , builder )
161
163
end
162
164
163
165
@ doc """
@@ -182,6 +184,8 @@ defmodule Supabase.Fetcher do
182
184
{ :ok , ResponseAdapter . from ( resp ) }
183
185
end
184
186
|> handle_response ( builder )
187
+ rescue
188
+ exception -> handle_exception ( exception , __STACKTRACE__ , builder )
185
189
end
186
190
187
191
@ doc """
@@ -208,6 +212,8 @@ defmodule Supabase.Fetcher do
208
212
{ :ok , ResponseAdapter . from ( resp ) }
209
213
end
210
214
|> handle_response ( builder )
215
+ rescue
216
+ exception -> handle_exception ( exception , __STACKTRACE__ , builder )
211
217
end
212
218
213
219
def stream ( % Request { http_client: http_client } = builder , on_response , opts )
@@ -216,6 +222,8 @@ defmodule Supabase.Fetcher do
216
222
{ :ok , ResponseAdapter . from ( resp ) }
217
223
end
218
224
|> handle_response ( builder )
225
+ rescue
226
+ exception -> handle_exception ( exception , __STACKTRACE__ , builder )
219
227
end
220
228
221
229
@ doc """
@@ -229,38 +237,34 @@ defmodule Supabase.Fetcher do
229
237
end
230
238
|> handle_response ( builder )
231
239
rescue
232
- e in File.Error -> { :error , Supabase.ErrorParser . from ( e ) }
240
+ exception -> handle_exception ( exception , __STACKTRACE__ , builder )
233
241
end
234
242
235
243
@ spec handle_response ( { :ok , response } | { :error , term } , context ) :: Supabase . result ( response )
236
244
when response: Response . t ( ) ,
237
245
context: Request . t ( )
238
246
defp handle_response ( { :ok , % Response { } = resp } , % Request { } = builder ) do
239
- error_parser = builder . error_parser
247
+ decode_body? = builder . options [ :decode_body? ] || true
248
+ parse_http_err? = builder . options [ :parse_http_error? ] || true
249
+ http_error_parser = builder . error_parser
240
250
decoder = builder . body_decoder
241
251
decoder_opts = builder . body_decoder_opts
242
252
243
- with { :ok , resp } <- Response . decode_body ( resp , decoder , decoder_opts ) do
244
- if resp . status >= 400 do
245
- { :error , error_parser . from ( resp , builder ) }
253
+ maybe_decode_body = fn ->
254
+ if decode_body? do
255
+ Response . decode_body ( resp , decoder , decoder_opts )
256
+ else
257
+ resp
258
+ end
259
+ end
260
+
261
+ with { :ok , resp } <- maybe_decode_body . ( ) do
262
+ if parse_http_err? and resp . status >= 400 do
263
+ { :error , http_error_parser . from ( resp , builder ) }
246
264
else
247
265
{ :ok , resp }
248
266
end
249
267
end
250
- rescue
251
- e in Protocol.UndefinedError ->
252
- reraise e , __STACKTRACE__
253
-
254
- exception ->
255
- message = Exception . format ( :error , exception )
256
- stacktrace = Exception . format_stacktrace ( __STACKTRACE__ )
257
-
258
- Supabase.Error . new (
259
- code: :decode_body_failed ,
260
- message: message ,
261
- service: builder . service ,
262
- metadata: % { stacktrace: stacktrace }
263
- )
264
268
end
265
269
266
270
defp handle_response ( { :error , % Error { } = err } , % Request { } = builder ) do
@@ -270,7 +274,28 @@ defmodule Supabase.Fetcher do
270
274
end
271
275
272
276
defp handle_response ( { :error , err } , % Request { } = builder ) do
273
- { :error , Supabase.ErrorParser . from ( err , builder ) }
277
+ metadata = Error . make_default_http_metadata ( builder )
278
+
279
+ { :error ,
280
+ Error . new (
281
+ code: :unexpected ,
282
+ service: builder . service ,
283
+ metadata: Map . put ( metadata , :raw_error , err )
284
+ ) }
285
+ end
286
+
287
+ defp handle_exception ( exception , stacktrace , % Request { } = builder ) do
288
+ entity = Map . get ( exception , :__struct__ )
289
+ message = entity . message ( exception )
290
+ stacktrace = Exception . format_stacktrace ( stacktrace )
291
+
292
+ { :error ,
293
+ Supabase.Error . new (
294
+ code: :exception ,
295
+ message: message ,
296
+ service: builder . service ,
297
+ metadata: % { stacktrace: stacktrace , exception: exception }
298
+ ) }
274
299
end
275
300
276
301
@ doc """
0 commit comments