// Arcadia invitations API helpers. // Backed by /api/v1/invitations. import type { ArcadiaClient } from "@crema/arcadia-client" export interface InvitationRole { id: string name: string slug: string } export interface InvitationInviter { id: string email: string name: string } export interface Invitation { id: string email: string role: InvitationRole invited_by: InvitationInviter | null expires_at: string | null accepted_at: string | null revoked_at: string | null revocation_reason: string | null inserted_at: string } export type InvitationStatus = "pending" | "accepted" | "revoked" | "expired" export function invitationStatus(inv: Invitation): InvitationStatus { if (inv.accepted_at) return "accepted" if (inv.revoked_at) return "revoked" if (inv.expires_at && new Date(inv.expires_at).getTime() < Date.now()) return "expired" return "pending" } export interface InvitationInput { email: string role_id: string } export async function listInvitations(arcadia: ArcadiaClient): Promise { const res = await arcadia.GET<{ data: Invitation[] }>("/api/v1/invitations") return res.data } export async function createInvitation( arcadia: ArcadiaClient, input: InvitationInput, ): Promise { const res = await arcadia.POST<{ data: Invitation }>("/api/v1/invitations", { body: { invitation: input }, }) return res.data } export async function revokeInvitation(arcadia: ArcadiaClient, id: string): Promise { await arcadia.DELETE(`/api/v1/invitations/${id}`) } export async function resendInvitation(arcadia: ArcadiaClient, id: string): Promise { await arcadia.POST(`/api/v1/invitations/${id}/resend`) }