From 884b3d9fe9ceb2edb5af9880f32838716aa65114 Mon Sep 17 00:00:00 2001 From: Jannis Braun <151788261+TheZwiss@users.noreply.github.com> Date: Tue, 28 Apr 2026 19:45:25 +0200 Subject: [PATCH] feat(shared): add invite link types + federatedRegistrationOpen --- packages/shared/src/types.ts | 65 ++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) diff --git a/packages/shared/src/types.ts b/packages/shared/src/types.ts index bf7325e1..5be15488 100644 --- a/packages/shared/src/types.ts +++ b/packages/shared/src/types.ts @@ -482,6 +482,7 @@ export interface RegisterRequest { avatarColor?: string; homeInstance?: string; homeUserId?: string; + inviteToken?: string; } export interface LoginRequest { @@ -681,6 +682,7 @@ export interface GifResult { export interface InstanceAdminSettings { instanceName: string; registrationOpen: boolean; + federatedRegistrationOpen: boolean; discoveryEnabled: boolean; gifApiKey?: string; gifEnabled?: boolean; @@ -710,6 +712,7 @@ export interface InstanceInfoResponse { name: string; version: string; registrationOpen: boolean; + federatedRegistrationOpen: boolean; } export interface VerifyPasswordRequest { @@ -1129,3 +1132,65 @@ export interface ApprovalRequest { */ subscribers?: ApprovalRequestSubscriberSummary[]; } + +// ─── Invite Links ────────────────────────────────────────────────────────── + +export type InviteStatus = 'active' | 'expired' | 'exhausted' | 'revoked'; + +export interface InviteLinkSummary { + id: string; + token: string; + name: string; + status: InviteStatus; + maxUses: number | null; + usedCount: number; + expiresAt: number | null; + revokedAt: number | null; + createdBy: string; + createdByUsername: string | null; + createdAt: number; + url: string; +} + +export interface InviteRedemption { + id: string; + userId: string | null; + registrantUsername: string; + currentUsername: string | null; + isDeleted: boolean; + redeemedAt: number; +} + +export interface CreateInviteRequest { + name: string; + maxUses: number | null; + expiresAt: number | null; +} + +export interface PatchInviteRequest { + name?: string; + maxUses?: number | null; + expiresAt?: number | null; +} + +export interface ReinstateInviteRequest { + maxUses?: number | null; + expiresAt?: number | null; +} + +export interface ReinstateInviteResponse { + invite: InviteLinkSummary; + tokenRotated: boolean; +} + +export interface CheckInviteValidResponse { + valid: true; + name: string; +} + +export interface CheckInviteInvalidResponse { + valid: false; + reason: 'expired' | 'exhausted' | 'invalid'; +} + +export type CheckInviteResponse = CheckInviteValidResponse | CheckInviteInvalidResponse;