chore: upgrade k-ap to 0.4.0
Some checks failed
CI / Check / Test (push) Has been cancelled

Map new fetched_at field in RemoteActor for postgres and sqlite adapters.
This commit is contained in:
2026-05-30 03:00:44 +02:00
parent 7456a18fc9
commit 14066ea469
6 changed files with 26 additions and 14 deletions

6
Cargo.lock generated
View File

@@ -2843,9 +2843,9 @@ dependencies = [
[[package]] [[package]]
name = "k-ap" name = "k-ap"
version = "0.3.1" version = "0.4.0"
source = "sparse+https://git.gabrielkaszewski.dev/api/packages/GKaszewski/cargo/" source = "sparse+https://git.gabrielkaszewski.dev/api/packages/GKaszewski/cargo/"
checksum = "f73de37ac4feab6d7b78e73c60acbb07933c2be58dcbb12e8a34201f66e0480d" checksum = "ccaa914953bfd45ea206e11826da8f61ce1fbe02f8fe0622880527046ad6ae24"
dependencies = [ dependencies = [
"activitypub_federation", "activitypub_federation",
"anyhow", "anyhow",
@@ -6623,7 +6623,7 @@ version = "0.1.11"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22"
dependencies = [ dependencies = [
"windows-sys 0.61.2", "windows-sys 0.48.0",
] ]
[[package]] [[package]]

View File

@@ -4,7 +4,7 @@ version = "0.1.0"
edition = "2024" edition = "2024"
[dependencies] [dependencies]
k-ap = { version = "0.3.1", registry = "gitea" } k-ap = { version = "0.4.0", registry = "gitea" }
domain = { workspace = true } domain = { workspace = true }
axum = { workspace = true } axum = { workspace = true }
serde = { workspace = true } serde = { workspace = true }

View File

@@ -12,7 +12,7 @@ sqlx = { version = "0.8.6", features = [
"chrono", "chrono",
] } ] }
activitypub = { workspace = true } activitypub = { workspace = true }
k-ap = { version = "0.3.1", registry = "gitea" } k-ap = { version = "0.4.0", registry = "gitea" }
domain = { workspace = true } domain = { workspace = true }
uuid = { workspace = true } uuid = { workspace = true }
chrono = { workspace = true } chrono = { workspace = true }

View File

@@ -65,10 +65,11 @@ fn pg_remote_actor(row: &sqlx::postgres::PgRow, url_col: &str) -> RemoteActor {
}) })
}) })
.unwrap_or_default(), .unwrap_or_default(),
fetched_at: row.try_get("fetched_at").ok(),
} }
} }
const PG_ACTOR_COLS: &str = "a.handle, a.inbox_url, a.shared_inbox_url, a.display_name, a.avatar_url, a.outbox_url, a.bio, a.banner_url, a.followers_url, a.following_url, a.also_known_as"; const PG_ACTOR_COLS: &str = "a.handle, a.inbox_url, a.shared_inbox_url, a.display_name, a.avatar_url, a.outbox_url, a.bio, a.banner_url, a.followers_url, a.following_url, a.also_known_as, a.fetched_at";
#[async_trait] #[async_trait]
impl FollowRepository for PostgresFederationRepository { impl FollowRepository for PostgresFederationRepository {

View File

@@ -6,7 +6,7 @@ edition = "2024"
[dependencies] [dependencies]
sqlx = { workspace = true } sqlx = { workspace = true }
activitypub = { workspace = true } activitypub = { workspace = true }
k-ap = { version = "0.3.1", registry = "gitea" } k-ap = { version = "0.4.0", registry = "gitea" }
domain = { workspace = true } domain = { workspace = true }
anyhow = { workspace = true } anyhow = { workspace = true }
serde_json = { workspace = true } serde_json = { workspace = true }

View File

@@ -65,6 +65,16 @@ fn remote_actor_from_row(row: &sqlx::sqlite::SqliteRow, url_col: &str) -> Remote
}) })
}) })
.unwrap_or_default(), .unwrap_or_default(),
fetched_at: row
.try_get::<Option<String>, _>("fetched_at")
.ok()
.flatten()
.and_then(|s| {
chrono::NaiveDateTime::parse_from_str(&s, "%Y-%m-%d %H:%M:%S")
.map(|ndt| ndt.and_utc())
.or_else(|_| chrono::DateTime::parse_from_rfc3339(&s).map(|dt| dt.with_timezone(&chrono::Utc)))
.ok()
}),
} }
} }
@@ -136,7 +146,7 @@ impl FollowRepository for SqliteFederationRepository {
let rows = sqlx::query( let rows = sqlx::query(
"SELECT f.remote_actor_url, f.status, "SELECT f.remote_actor_url, f.status,
a.handle, a.inbox_url, a.shared_inbox_url, a.display_name, a.avatar_url, a.handle, a.inbox_url, a.shared_inbox_url, a.display_name, a.avatar_url,
a.outbox_url, a.bio, a.banner_url, a.followers_url, a.following_url, a.also_known_as a.outbox_url, a.bio, a.banner_url, a.followers_url, a.following_url, a.also_known_as, a.fetched_at
FROM ap_followers f FROM ap_followers f
LEFT JOIN ap_remote_actors a ON a.url = f.remote_actor_url LEFT JOIN ap_remote_actors a ON a.url = f.remote_actor_url
WHERE f.local_user_id = ?", WHERE f.local_user_id = ?",
@@ -170,7 +180,7 @@ impl FollowRepository for SqliteFederationRepository {
let rows = sqlx::query( let rows = sqlx::query(
"SELECT f.remote_actor_url, f.status, "SELECT f.remote_actor_url, f.status,
a.handle, a.inbox_url, a.shared_inbox_url, a.display_name, a.avatar_url, a.handle, a.inbox_url, a.shared_inbox_url, a.display_name, a.avatar_url,
a.outbox_url, a.bio, a.banner_url, a.followers_url, a.following_url, a.also_known_as a.outbox_url, a.bio, a.banner_url, a.followers_url, a.following_url, a.also_known_as, a.fetched_at
FROM ap_followers f FROM ap_followers f
LEFT JOIN ap_remote_actors a ON a.url = f.remote_actor_url LEFT JOIN ap_remote_actors a ON a.url = f.remote_actor_url
WHERE f.local_user_id = ? AND f.status = 'accepted' WHERE f.local_user_id = ? AND f.status = 'accepted'
@@ -237,7 +247,7 @@ impl FollowRepository for SqliteFederationRepository {
let rows = sqlx::query( let rows = sqlx::query(
"SELECT f.remote_actor_url, "SELECT f.remote_actor_url,
a.handle, a.inbox_url, a.shared_inbox_url, a.display_name, a.avatar_url, a.handle, a.inbox_url, a.shared_inbox_url, a.display_name, a.avatar_url,
a.outbox_url, a.bio, a.banner_url, a.followers_url, a.following_url, a.also_known_as a.outbox_url, a.bio, a.banner_url, a.followers_url, a.following_url, a.also_known_as, a.fetched_at
FROM ap_followers f FROM ap_followers f
LEFT JOIN ap_remote_actors a ON a.url = f.remote_actor_url LEFT JOIN ap_remote_actors a ON a.url = f.remote_actor_url
WHERE f.local_user_id = ? AND f.status = 'pending'", WHERE f.local_user_id = ? AND f.status = 'pending'",
@@ -301,7 +311,7 @@ impl FollowRepository for SqliteFederationRepository {
let rows = sqlx::query( let rows = sqlx::query(
"SELECT f.remote_actor_url, "SELECT f.remote_actor_url,
a.handle, a.inbox_url, a.shared_inbox_url, a.display_name, a.avatar_url, a.handle, a.inbox_url, a.shared_inbox_url, a.display_name, a.avatar_url,
a.outbox_url, a.bio, a.banner_url, a.followers_url, a.following_url, a.also_known_as a.outbox_url, a.bio, a.banner_url, a.followers_url, a.following_url, a.also_known_as, a.fetched_at
FROM ap_followers f FROM ap_followers f
LEFT JOIN ap_remote_actors a ON a.url = f.remote_actor_url LEFT JOIN ap_remote_actors a ON a.url = f.remote_actor_url
WHERE f.local_user_id = ? AND f.status = 'accepted' WHERE f.local_user_id = ? AND f.status = 'accepted'
@@ -377,7 +387,7 @@ impl FollowRepository for SqliteFederationRepository {
let rows = sqlx::query( let rows = sqlx::query(
"SELECT a.url, a.handle, a.inbox_url, a.shared_inbox_url, a.display_name, a.avatar_url, "SELECT a.url, a.handle, a.inbox_url, a.shared_inbox_url, a.display_name, a.avatar_url,
a.outbox_url, a.bio, a.banner_url, a.followers_url, a.following_url, a.also_known_as a.outbox_url, a.bio, a.banner_url, a.followers_url, a.following_url, a.also_known_as, a.fetched_at
FROM ap_following f FROM ap_following f
INNER JOIN ap_remote_actors a ON a.url = f.remote_actor_url INNER JOIN ap_remote_actors a ON a.url = f.remote_actor_url
WHERE f.local_user_id = ? AND f.status = 'accepted'", WHERE f.local_user_id = ? AND f.status = 'accepted'",
@@ -415,7 +425,7 @@ impl FollowRepository for SqliteFederationRepository {
let rows = sqlx::query( let rows = sqlx::query(
"SELECT a.url, a.handle, a.inbox_url, a.shared_inbox_url, a.display_name, a.avatar_url, "SELECT a.url, a.handle, a.inbox_url, a.shared_inbox_url, a.display_name, a.avatar_url,
a.outbox_url, a.bio, a.banner_url, a.followers_url, a.following_url, a.also_known_as a.outbox_url, a.bio, a.banner_url, a.followers_url, a.following_url, a.also_known_as, a.fetched_at
FROM ap_following f FROM ap_following f
INNER JOIN ap_remote_actors a ON a.url = f.remote_actor_url INNER JOIN ap_remote_actors a ON a.url = f.remote_actor_url
WHERE f.local_user_id = ? AND f.status = 'accepted' WHERE f.local_user_id = ? AND f.status = 'accepted'
@@ -607,7 +617,7 @@ impl ActorRepository for SqliteFederationRepository {
async fn get_remote_actor(&self, actor_url: &str) -> Result<Option<RemoteActor>> { async fn get_remote_actor(&self, actor_url: &str) -> Result<Option<RemoteActor>> {
let row = sqlx::query( let row = sqlx::query(
"SELECT url, handle, inbox_url, shared_inbox_url, display_name, avatar_url, "SELECT url, handle, inbox_url, shared_inbox_url, display_name, avatar_url,
outbox_url, bio, banner_url, followers_url, following_url, also_known_as outbox_url, bio, banner_url, followers_url, following_url, also_known_as, fetched_at
FROM ap_remote_actors WHERE url = ?", FROM ap_remote_actors WHERE url = ?",
) )
.bind(actor_url) .bind(actor_url)
@@ -1154,6 +1164,7 @@ mod outbox_url_tests {
followers_url: None, followers_url: None,
following_url: None, following_url: None,
also_known_as: vec![], also_known_as: vec![],
fetched_at: None,
}; };
repo.add_following(local_user, actor, "https://local/activities/1") repo.add_following(local_user, actor, "https://local/activities/1")
.await .await