UNPKG

@mulutime/plugin-types

Version:

TypeScript types for the MuluTime plugin system

181 lines 5.16 kB
/** * 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