fiddy/apps/web/lib/client/group-invites.ts
2026-02-11 23:45:15 -08:00

48 lines
1.4 KiB
TypeScript

import { fetchJson } from "@/lib/client/fetch-json";
export type JoinPolicy = "NOT_ACCEPTING" | "AUTO_ACCEPT" | "APPROVAL_REQUIRED";
export type InviteLink = {
id: number;
groupId: number;
token: string;
policy: JoinPolicy;
singleUse: boolean;
expiresAt: string;
usedAt: string | null;
revokedAt: string | null;
createdAt: string;
};
export async function groupInvitesList() {
return fetchJson<{ links: InviteLink[] }>("/api/groups/invites", { method: "GET" });
}
export async function groupInvitesCreate(input: { policy: JoinPolicy; singleUse: boolean; ttlDays: number }) {
return fetchJson<{ link: InviteLink }>("/api/groups/invites", {
method: "POST",
body: JSON.stringify(input)
});
}
export async function groupInvitesRevoke(input: { linkId: number }) {
return fetchJson<{ ok: true }>("/api/groups/invites/revoke", {
method: "POST",
body: JSON.stringify(input)
});
}
export async function groupInvitesRevive(input: { linkId: number; ttlDays: number }) {
return fetchJson<{ ok: true }>("/api/groups/invites/revive", {
method: "POST",
body: JSON.stringify(input)
});
}
export async function groupInvitesDelete(input: { linkId: number }) {
return fetchJson<{ ok: true }>("/api/groups/invites/delete", {
method: "POST",
body: JSON.stringify(input)
});
}