* initial commit federation * more federation * more federation * more federation * completes follow, accept, undo * add trail create activity * process trail create activity * more trail create activity * adds missing endpoints * adds update and delete activity * adds comment activities * adds activities back * adds summit logs activities * deletes follow counts table * fixes migrations * fixes migrations * fixes migrations * fixes migrations * adds remote profiles * ctd * ctd * we are getting closer... * adds public summit logs * fixes federated trails in lists * adds remote lists * adds list activites * fixes lists * adds notifications * adds iri redirect * fixes comments and summitlogs * fixes follows and profiles * adds asynchronous send * fixes list search * adds encryption key * bug fixes * fixes activity signing * removes custon activity object types * adds html editor * fixes html editor * fixes display issues on mastodon * adds federated sharing * finishes announcements * fixes small summit log issues * adds trail likes * finalizes likes * fixes images for komoot * add disable federation option * adds private profiles * updates docs * adds federated comments * adds trail and comments actvitiypub routes * adds mentions to editor * adds mentions to trails, comments, summit logs * updates theme * updates theme * update docs * update docs * updates docs * fixes various frontend problems * fixes activitypub follows api * updates docs * updates docs --------- Co-authored-by: Christian Beutel <>
83 lines
2.4 KiB
TypeScript
83 lines
2.4 KiB
TypeScript
import type { Actor } from "$lib/models/activitypub/actor";
|
|
import type { Follow } from "$lib/models/follow";
|
|
import { APIError } from "$lib/util/api_util";
|
|
import { type ListResult } from "pocketbase";
|
|
|
|
let follows: Actor[] = [];
|
|
|
|
export async function follows_index(data: { username: string, type: "followers" | "following" }, page: number = 1, perPage: number = 10, f: (url: RequestInfo | URL, config?: RequestInit) => Promise<Response> = fetch) {
|
|
|
|
const r = await f(`/api/v1/follow?` + new URLSearchParams({
|
|
handle: data.username,
|
|
type: data.type,
|
|
page: page.toString(),
|
|
perPage: perPage.toString(),
|
|
}), {
|
|
method: 'GET',
|
|
})
|
|
|
|
if (!r.ok) {
|
|
const response = await r.json();
|
|
throw new APIError(r.status, response.message, response.detail)
|
|
}
|
|
|
|
const fetchedFollows: ListResult<Actor> = await r.json();
|
|
|
|
const result = page > 1 ? [...follows, ...fetchedFollows.items] : fetchedFollows.items
|
|
|
|
follows = result;
|
|
|
|
return { ...fetchedFollows, items: result };
|
|
}
|
|
|
|
export async function follows_a_b(a: string, b: string, f: (url: RequestInfo | URL, config?: RequestInit) => Promise<Response> = fetch) {
|
|
const r = await f('/api/v1/follow?' + new URLSearchParams({
|
|
filter: `follower='${a}'&&followee='${b}'`,
|
|
}), {
|
|
method: 'GET',
|
|
})
|
|
|
|
if (!r.ok) {
|
|
const response = await r.json();
|
|
throw new APIError(r.status, response.message, response.detail)
|
|
}
|
|
|
|
const response: ListResult<Follow> = await r.json();
|
|
|
|
return response.items.at(0);
|
|
}
|
|
|
|
export async function follows_create(followee: string) {
|
|
let r = await fetch('/api/v1/follow', {
|
|
method: 'PUT',
|
|
body: JSON.stringify({ followee }),
|
|
})
|
|
|
|
if (!r.ok) {
|
|
const response = await r.json();
|
|
throw new APIError(r.status, response.message, response.detail)
|
|
}
|
|
}
|
|
|
|
export async function follows_update(follow: Follow) {
|
|
let r = await fetch('/api/v1/follow/' + follow.id, {
|
|
method: 'POST',
|
|
body: JSON.stringify(follow),
|
|
})
|
|
|
|
if (!r.ok) {
|
|
const response = await r.json();
|
|
throw new APIError(r.status, response.message, response.detail)
|
|
}
|
|
}
|
|
|
|
export async function follows_delete(follow: Follow) {
|
|
const r = await fetch('/api/v1/follow/' + follow.id, {
|
|
method: 'DELETE',
|
|
})
|
|
|
|
if (!r.ok) {
|
|
const response = await r.json();
|
|
throw new APIError(r.status, response.message, response.detail)
|
|
}
|
|
} |