Merge branch 'feat/inda-383-daily-stat' into 'main'
[ProtonMail-WebClient.git] / packages / features / interface.ts
blob31b3bafa56ba8d3f9a5e4ea14cd76bb28a6ea4ad
1 export type FeatureType = 'boolean' | 'integer' | 'float' | 'string' | 'enumeration' | 'mixed';
3 export interface Feature<V = any> {
4     Code: string;
5     Type: FeatureType;
6     DefaultValue: V;
7     Value: V;
8     Options?: string[];
9     Minimum: number;
10     Maximum: number;
11     Global: boolean;
12     Writable: boolean;
13     ExpirationTime: number;
14     UpdateTime: number;
17 export enum FeatureCode {
18     /*
19      * In the past whether you have a certain early-access (e.g. alpha / beta)
20      * enabled or not was purely based on a client-side cookie and this feature's
21      * value was to indicate not what your env was but rather what options were
22      * available to you (whether you had access to both alpha & beta or only to beta).
23      *
24      * However, now we are persisting the users preference on the backed on their
25      * settings under the same name "EarlyAccess" (either 0 or 1).
26      *
27      * To avoid confusing these two this has been renamed to "EarlyAccessScope".
28      * Ideally we would rename it to that on the server as well (and when that happens
29      * we can remove this comment :)).
30      */
31     AccountSecurityDismissed2FACard = 'AccountSecurityDismissed2FACard',
32     AliasPromotion = 'AliasPromotion',
33     AlmostAllMail = 'AlmostAllMail',
34     AutoAddHolidaysCalendars = 'AutoAddHolidaysCalendars',
35     AutoDelete = 'AutoDelete',
36     AutoDowngradeReminder = 'AutoDowngradeReminder',
37     BlackFridayPromoShown = 'BlackFridayPromoShown',
38     BlockSenderInToolbar = 'BlockSenderInToolbar',
39     BundlePromoShown = 'BundlePromoShown',
40     CollapsibleSidebarSpotlightMail = 'CollapsibleSidebarSpotlightMail',
41     CollapsibleSidebarSpotlightCalendar = 'CollapsibleSidebarSpotlightCalendar',
42     CalendarBusySlotsSpotlight = 'CalendarBusySlotsSpotlight',
43     CalendarFeedbackEnabled = 'CalendarFeedbackEnabled',
44     CalendarEncryptedSearch = 'CalendarEncryptedSearch',
45     CalendarEventColorSpotlight = 'CalendarEventColorSpotlight',
46     CalendarVideoConferenceSpotlight = 'CalendarVideoConferenceSpotlight',
47     CleanUTMTrackers = 'CleanUTMTrackers',
48     ComposerAssistantSpotlight = 'ComposerAssistantSpotlight',
49     ComposerAssistantInitialSetup = 'ComposerAssistantInitialSetup',
50     ComposerAssistantTrialStartDate = 'ComposerAssistantTrialStartDate',
51     DarkStylesInBody = 'DarkStylesInBody',
52     DismissedRecoverDataCard = 'DismissedRecoverDataCard',
53     DriveMyDevices = 'DriveWebMyDevices',
54     DrivePlan = 'DrivePlan',
55     DriveSearchSpotlight = 'DriveSearchSpotlight',
56     ESAutomaticBackgroundIndexing = 'ESAutomaticBackgroundIndexing',
57     ESUserInterface = 'ESUserInterface',
58     EarlyAccessScope = 'EarlyAccess',
59     EasySwitch = 'EasySwitch',
60     ElectronESInboxThreshold = 'ElectronESInboxThreshold',
61     ElectronConvPreloadAmount = 'ElectronConvPreloadAmount',
62     InboxDesktopFreeTrialDates = 'InboxDesktopFreeTrialDates',
63     InboxDesktopFreeTrialReminders = 'InboxDesktopFreeTrialReminders',
64     MailActionsChunkSize = 'MailActionsChunkSize',
65     MailFeedbackEnabled = 'MailFeedbackEnabled',
66     MailServiceWorker = 'MailServiceWorker',
67     NumAttachmentsWithoutEmbedded = 'NumAttachmentsWithoutEmbedded',
68     NumberOfPreloadedConversations = 'NumberOfPreloadedConversations',
69     // This is a different offer than the others, it runs all the time and is used to nudge free users once their accounts is old enough
70     OfferSubscriptionReminder = 'OfferSubscriptionReminder',
71     OfferDuoPlanYearly2024 = 'OfferDuoPlanYearly2024',
72     OfferDuoPlanTwoYears2024 = 'OfferDuoPlanTwoYears2024',
73     OfferFamily2023 = 'OfferFamily2023',
74     OfferGoUnlimited2022 = 'OfferGoUnlimited2022',
75     OfferMailTrial2023 = 'OfferMailTrial2023',
76     OfferMailTrial2024 = 'OfferMailTrial2024',
77     OfferSpecialOffer2022 = 'OfferSpecialOffer2022',
78     OfferSummer2023 = 'OfferSummer2023',
80     OfferPassFamilyPlan2024Yearly = 'OfferPassFamilyPlan2024Yearly',
82     OfferBlackFriday2024InboxFree = 'OfferBlackFriday2024InboxFree',
83     OfferBlackFriday2024PassFree = 'OfferBlackFriday2024PassFree',
84     OfferBlackFriday2024PassPlus = 'OfferBlackFriday2024PassPlus',
85     OfferBlackFriday2024DriveFree = 'OfferBlackFriday2024DriveFree',
86     OfferBlackFriday2024VPNFree = 'OfferBlackFriday2024VPNFree',
87     OfferBlackFriday2024InboxFreeYearly = 'OfferBlackFriday2024InboxFreeYearly',
88     OfferBlackFriday2024DriveFreeYearly = 'OfferBlackFriday2024DriveFreeYearly',
89     OfferBlackFriday2024VPNFreeYearly = 'OfferBlackFriday2024VPNFreeYearly',
90     OfferBlackFriday2024Plus = 'OfferBlackFriday2024Plus',
91     OfferBlackFriday2024VPNMonthly = 'OfferBlackFriday2024VPNMonthly',
92     OfferBlackFriday2024Unlimited = 'OfferBlackFriday2024Unlimited',
93     OfferBlackFriday2024Duo = 'OfferBlackFriday2024Duo',
95     Offers = 'Offers',
96     OrgSpamBlockList = 'OrgSpamBlockList',
97     OrgTwoFactor = 'OrgTwoFactor',
98     PaymentsDisabled = 'PaymentsDisabled',
99     PrivacyDropdownOpened = 'PrivacyDropdownOpened',
100     ProtonBadge = 'ProtonBadge',
101     ProtonSentinel = 'ProtonSentinel',
102     ProtonSentinelUpsell = 'ProtonSentinelUpsell',
103     QuickReply = 'QuickReply',
104     QuickSettingsSpotlight = 'QuickSettingsSpotlight',
105     RebrandingFeedback = 'RebrandingFeedback',
106     RebrandingFeedbackEnabled = 'RebrandingFeedbackEnabled',
107     ReferralExplanationOpened = 'ReferralExplanationOpened',
108     ReferralProgram = 'ReferralProgram',
109     ReferralProgramSpotlight = 'ReferralProgramSpotlight',
110     SLIntegration = 'SLIntegration',
111     ScheduledSendFreemium = 'ScheduledSendFreemium',
112     SeenReferralModal = 'SeenReferralModal',
113     SetExpiration = 'SetExpiration',
114     SmtpToken = 'SmtpToken',
115     SpotlightBreachAlertSecurityCenter = 'SpotlightBreachAlertSecurityCenter',
116     SpotlightGetStartedChecklist = 'SpotlightGetStartedChecklist',
117     SpotlightLoadContent = 'SpotlightLoadContent',
118     SpotlightScheduledSend = 'SpotlightScheduledSend',
119     SpyTrackerProtectionIncorporator = 'SpyTrackerProtectionIncorporator',
120     SubscriptionLastReminderDate = 'SubscriptionLastReminderDate',
121     UnreadFavicon = 'UnreadFavicon',
122     UsedContactsImport = 'UsedContactsImport',
123     UsedMailMobileApp = 'UsedMailMobileApp',
124     WelcomeImportModalShown = 'WelcomeImportModalShown',
125     PassOnboardingSpotlights = 'PassOnboardingSpotlights',
126     ProtonTipsSnoozeTime = 'ProtonTipsSnoozeTime',
127     SeenLightLabellingFeatureModal = 'SeenLightLabellingFeatureModal',
128     PostSubscriptionShortDomainSpotlight = 'PostSubscriptionShortDomainSpotlight',