48 lines
1.4 KiB
TypeScript
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)
|
|
});
|
|
}
|