@mulutime/plugin-types
Version:
TypeScript types for the MuluTime plugin system
181 lines • 5.16 kB
TypeScript
/**
* Core system types for User, Organization, and related entities
* These types are used throughout the MuluTime Plugin System
*/
export interface User {
id: string;
email: string;
username: string;
fullName: string;
timezone?: string;
avatar?: string;
bio?: string;
phoneNumber?: string;
phone?: string;
company?: string;
website?: string;
organizationId?: string;
organizations?: string[];
createdAt: string;
updatedAt: string;
subscriptionPlan: 'FREE' | 'PRO';
subscriptionStatus: 'ACTIVE' | 'PAST_DUE' | 'CANCELED' | 'INCOMPLETE';
subscriptionPeriodStart?: string;
subscriptionPeriodEnd?: string;
billingType?: 'PREPAID' | 'PAY_AS_YOU_GO';
billingCycleStart?: string;
meetingCredits?: number;
meetingsUsed?: number;
googleTokens?: {
accessToken?: string;
refreshToken?: string;
expiresAt?: number;
scope?: string;
tokenType?: string;
} | null;
metadata?: Record<string, unknown>;
settings?: {
theme?: 'light' | 'dark' | 'system';
notifications?: {
email?: boolean;
push?: boolean;
};
billing?: {
autoRecharge?: boolean;
rechargeAmount?: number;
lowCreditAlert?: number;
};
bookingPreferences?: {
defaultDuration?: number;
bufferTimeBefore?: number;
bufferTimeAfter?: number;
maxAdvanceBooking?: number;
minNoticeTime?: number;
allowBackToBackBookings?: boolean;
requireConfirmation?: boolean;
autoConfirmBookings?: boolean;
allowRescheduling?: boolean;
allowCancellation?: boolean;
sendReminders?: boolean;
reminderTime?: number;
};
};
verified?: boolean;
}
export interface Organization {
id: string;
name: string;
slug: string;
type: 'CLINIC' | 'HOSPITAL' | 'PRACTICE' | 'OTHER';
ownerId: string;
logo?: string;
website?: string;
email?: string;
phone?: string;
address?: {
street?: string;
city?: string;
state?: string;
country?: string;
postalCode?: string;
};
settings?: {
branding?: {
primaryColor?: string;
accentColor?: string;
logoUrl?: string;
customCss?: string;
};
features?: {
allowTeams: boolean;
allowGuests: boolean;
requireEmailVerification: boolean;
customEmailDomain?: string;
};
billing?: {
billingEmail?: string;
taxId?: string;
billingAddress?: string;
};
};
subscriptionPlan: 'FREE' | 'PRO' | 'ENTERPRISE';
subscriptionStatus: 'ACTIVE' | 'PAST_DUE' | 'CANCELED' | 'INCOMPLETE';
subscriptionPeriodStart?: string;
subscriptionPeriodEnd?: string;
createdAt: string;
updatedAt: string;
metadata?: Record<string, unknown>;
}
export interface OrganizationMember {
id: string;
organizationId: string;
userId: string;
role: OrganizationRole;
permissions: OrganizationPermission[];
joinedAt: string;
invitedBy?: string;
status: 'PENDING' | 'ACTIVE' | 'SUSPENDED';
teamIds?: string[];
createdAt: string;
updatedAt: string;
}
export interface OrganizationInvitation {
id: string;
organizationId: string;
organizationName: string;
email: string;
role: OrganizationRole;
permissions: OrganizationPermission[];
invitedBy: string;
invitedByName: string;
status: 'PENDING' | 'ACCEPTED' | 'DECLINED' | 'EXPIRED';
message?: string;
expiresAt: string;
createdAt: string;
updatedAt: string;
}
export type OrganizationRole = 'OWNER' | 'ADMIN' | 'MANAGER' | 'MEMBER' | 'GUEST';
export type OrganizationPermission = 'MANAGE_MEMBERS' | 'MANAGE_BILLING' | 'MANAGE_SETTINGS' | 'VIEW_ANALYTICS' | 'MANAGE_BOOKINGS' | 'MANAGE_SCHEDULES' | 'MANAGE_EVENT_TYPES' | 'MANAGE_PLUGINS';
export interface CalendarEventRef {
id: string;
start: string;
end: string;
title: string;
status?: 'confirmed' | 'tentative' | 'cancelled';
isBookingEvent?: boolean;
}
export declare enum EventVisibility {
PUBLIC = "PUBLIC",
PRIVATE = "PRIVATE",
DEFAULT = "DEFAULT"
}
export interface CalendarEvent {
id: string;
calendarId: string;
externalEventId?: string;
title: string;
description?: string;
location?: string;
start: string;
end: string;
allDay: boolean;
organizer?: {
id: string;
name?: string;
email?: string;
};
attendees?: Array<{
id?: string;
name?: string;
email?: string;
responseStatus?: 'accepted' | 'declined' | 'tentative' | 'needsAction';
}>;
recurrence?: string[];
reminders?: number[];
visibility?: EventVisibility;
status?: 'confirmed' | 'tentative' | 'cancelled';
createdAt: string;
updatedAt: string;
lastSyncedAt?: string;
}
//# sourceMappingURL=core-types.d.ts.map