From ee8f159921186e02a5dff5700f184bed8a5cbceb Mon Sep 17 00:00:00 2001 From: Niels Mokkenstorm Date: Mon, 20 Jul 2026 16:07:55 +0200 Subject: [PATCH] refactor(server): collapse the duplicated xrpc error helpers --- .../src/at_record_server/catalog_entities.gleam | 12 ++---------- server/src/at_record_server/edit_inbox.gleam | 13 ++----------- server/src/at_record_server/oauth/tokens.gleam | 16 +++++----------- server/src/at_record_server/promotion.gleam | 13 ++----------- 4 files changed, 11 insertions(+), 43 deletions(-) diff --git a/server/src/at_record_server/catalog_entities.gleam b/server/src/at_record_server/catalog_entities.gleam index defcedb..dd18b6f 100644 --- a/server/src/at_record_server/catalog_entities.gleam +++ b/server/src/at_record_server/catalog_entities.gleam @@ -319,7 +319,7 @@ fn backfill_artist( "artist mbid backfill failed for " <> existing.ref.uri <> ": " - <> xrpc_error(e), + <> xrpc.describe(e), ) Error(Failed) } @@ -508,16 +508,8 @@ fn create( Ok(defs.CatalogRef(uri: created.uri, cid: created.cid, external_ids: None)) Error(core_xrpc.BadStatus(status: 429, ..)) -> Error(RateLimited) Error(e) -> { - wisp.log_warning(context <> ": " <> xrpc_error(e)) + wisp.log_warning(context <> ": " <> xrpc.describe(e)) Error(Failed) } } } - -fn xrpc_error(e: xrpc.XrpcError) -> String { - case e { - core_xrpc.RequestFailed(te) -> xrpc.transport_error_to_string(te) - core_xrpc.BadStatus(status:, ..) -> "status " <> int.to_string(status) - core_xrpc.DecodeFailed(m) -> m - } -} diff --git a/server/src/at_record_server/edit_inbox.gleam b/server/src/at_record_server/edit_inbox.gleam index 53d9d2c..7741647 100644 --- a/server/src/at_record_server/edit_inbox.gleam +++ b/server/src/at_record_server/edit_inbox.gleam @@ -17,8 +17,7 @@ import at_record_server/handle_resolver import at_record_server/oauth/sessions.{type OauthSession} import atproto/constellation import atproto/repo -import atproto/xrpc.{type Client, type XrpcError} -import atproto_core/xrpc as core_xrpc +import atproto/xrpc.{type Client} import gleam/dynamic/decode import gleam/int import gleam/list @@ -172,7 +171,7 @@ fn proposals_for( "edit-inbox: backlinks lookup failed for " <> owned.ref.uri <> ": " - <> xrpc_error(e), + <> xrpc.describe(e), ) [] } @@ -245,11 +244,3 @@ fn current_fields( cover: None, ) } - -fn xrpc_error(e: XrpcError) -> String { - case e { - core_xrpc.RequestFailed(te) -> xrpc.transport_error_to_string(te) - core_xrpc.BadStatus(status:, ..) -> "status " <> int.to_string(status) - core_xrpc.DecodeFailed(m) -> m - } -} diff --git a/server/src/at_record_server/oauth/tokens.gleam b/server/src/at_record_server/oauth/tokens.gleam index 2de6a91..f8eb59a 100644 --- a/server/src/at_record_server/oauth/tokens.gleam +++ b/server/src/at_record_server/oauth/tokens.gleam @@ -9,7 +9,6 @@ import at_record_server/oauth/store.{type PendingFlow} import at_record_server/oauth/transport import atproto/oauth/metadata import atproto/xrpc -import atproto_core/xrpc as core_xrpc import gleam/dynamic/decode import gleam/int import gleam/list @@ -141,7 +140,11 @@ fn submit( dpop_key, )) case resp.status >= 200 && resp.status < 300 { - True -> xrpc.parse(resp.body, decoder()) |> result.map_error(describe) + True -> + xrpc.parse(resp.body, decoder()) + |> result.map_error(fn(e) { + "decode token response: " <> xrpc.describe(e) + }) False -> Error("token " <> int.to_string(resp.status) <> ": " <> resp.body) } } @@ -153,12 +156,3 @@ fn decoder() -> decode.Decoder(Tokens) { use expires_in <- decode.optional_field("expires_in", 3600, decode.int) decode.success(Tokens(access_token:, refresh_token:, sub:, expires_in:)) } - -fn describe(e: xrpc.XrpcError) -> String { - case e { - core_xrpc.DecodeFailed(m) -> "decode token response: " <> m - core_xrpc.RequestFailed(te) -> xrpc.transport_error_to_string(te) - core_xrpc.BadStatus(status:, body:, ..) -> - int.to_string(status) <> ": " <> body - } -} diff --git a/server/src/at_record_server/promotion.gleam b/server/src/at_record_server/promotion.gleam index 50cd147..2d47289 100644 --- a/server/src/at_record_server/promotion.gleam +++ b/server/src/at_record_server/promotion.gleam @@ -19,7 +19,6 @@ import atproto/blob.{type Blob} import atproto/constellation import atproto/repo import atproto/xrpc.{type Client} -import atproto_core/xrpc as core_xrpc import gleam/dict.{type Dict} import gleam/dynamic/decode import gleam/int @@ -190,7 +189,7 @@ fn discover( "constellation lookup failed for discogs:" <> id <> ": " - <> xrpc_error(e), + <> xrpc.describe(e), ) None } @@ -342,7 +341,7 @@ fn mint( "release mint failed for discogs:" <> id <> ": " - <> xrpc_error(e), + <> xrpc.describe(e), ) #(entities, None, report, False) } @@ -467,11 +466,3 @@ fn barcodes(values: List(String)) -> Option(List(catalog_release.Identifier)) { ) } } - -fn xrpc_error(e: xrpc.XrpcError) -> String { - case e { - core_xrpc.RequestFailed(te) -> xrpc.transport_error_to_string(te) - core_xrpc.BadStatus(status:, ..) -> "status " <> int.to_string(status) - core_xrpc.DecodeFailed(m) -> m - } -} -- 2.51.2