Remove payments API routing initialization
[ProtonMail-WebClient.git] / packages / components / containers / payments / features / vpn.ts
bloba936db904f59207760cac12fef1815467c367b10
1 import { c, msgid } from 'ttag';
3 import { PLANS } from '@proton/payments';
4 import {
5     BRAND_NAME,
6     CALENDAR_SHORT_APP_NAME,
7     DRIVE_SHORT_APP_NAME,
8     FREE_VPN_CONNECTIONS,
9     MAIL_SHORT_APP_NAME,
10     VPN_APP_NAME,
11     VPN_CONNECTIONS,
12 } from '@proton/shared/lib/constants';
13 import type { VPNServersCountData } from '@proton/shared/lib/interfaces';
14 import { Audience } from '@proton/shared/lib/interfaces';
15 import { getFreeServers, getPlusServers } from '@proton/shared/lib/vpn/features';
17 import type { PlanCardFeature, PlanCardFeatureDefinition } from './interface';
19 export const getB2BFreeVPNConnectionsText = (n: number) => {
20     return c('Subscription attribute').ngettext(
21         msgid`${n} free VPN connection per user`,
22         `${n} free VPN connections per user`,
23         n
24     );
27 export const getAdvancedVPNFeature = (): PlanCardFeatureDefinition => ({
28     icon: 'checkmark-circle',
29     included: true,
30     text: c('new_plans: Upsell attribute').t`Access advanced VPN features`,
31 });
33 export const getB2BHighSpeedVPNConnectionsText = (n: number) => {
34     return c('Subscription attribute').ngettext(
35         msgid`${n} high-speed VPN connection per user`,
36         `${n} high-speed VPN connections per user`,
37         n
38     );
41 export const getB2BHighSpeedVPNConnectionsFeature = (): PlanCardFeatureDefinition => ({
42     icon: 'brand-proton-vpn',
43     text: getB2BHighSpeedVPNConnectionsText(VPN_CONNECTIONS),
44     included: true,
45 });
47 export const getB2BVPNConnectionsText = (n: number) => {
48     return c('Subscription attribute').ngettext(
49         msgid`${n} VPN connection per user`,
50         `${n} VPN connections per user`,
51         n
52     );
55 export const getHighSpeedVPNConnectionsText = (n: number) => {
56     return c('Subscription attribute').ngettext(
57         msgid`${n} high-speed VPN connection`,
58         `${n} high-speed VPN connections`,
59         n
60     );
63 export const getHighSpeedVPNConnectionsFeature = (n: number = VPN_CONNECTIONS): PlanCardFeatureDefinition => ({
64     icon: 'brand-proton-vpn',
65     text: getHighSpeedVPNConnectionsText(n),
66     included: true,
67 });
69 export const getVPNConnectionsText = (n: number) => {
70     return c('Subscription attribute').ngettext(msgid`${n} VPN connection`, `${n} VPN connections`, n);
73 export const getVPNConnectionsFeature = (n: number = VPN_CONNECTIONS): PlanCardFeatureDefinition => ({
74     icon: 'brand-proton-vpn',
75     text: getVPNConnectionsText(n),
76     included: true,
77 });
79 export const getB2BHighSpeedVPNConnections = (): PlanCardFeatureDefinition => {
80     return {
81         text: getB2BHighSpeedVPNConnectionsText(VPN_CONNECTIONS),
82         included: true,
83         icon: 'brand-proton-vpn',
84     };
87 export const getVPNAppFeature = ({
88     serversCount,
89     family,
90     duo,
91 }: {
92     serversCount: VPNServersCountData;
93     family?: boolean;
94     duo?: boolean;
95 }): PlanCardFeatureDefinition => {
96     const serversAndCountries = getPlusServers(serversCount.paid.servers, serversCount.paid.countries);
97     let tooltip = c('new_plans: tooltip')
98         .t`${VPN_APP_NAME}: Access blocked content and browse privately. Includes ${serversAndCountries}, highest VPN speeds, access to worldwide streaming services, malware and ad-blocker, fast BitTorrent downloads, and more.`;
100     if (duo || family) {
101         tooltip = c('new_plans: tooltip')
102             .t`Protect your family from harmful websites and access our high-speed VPN servers to stream your favorite content`;
103     }
105     return {
106         text: VPN_APP_NAME,
107         tooltip,
108         included: true,
109         icon: 'brand-proton-vpn',
110     };
113 export const getCountries = (text: string, highlight?: boolean): PlanCardFeatureDefinition => {
114     return {
115         text,
116         included: true,
117         highlight,
118         icon: 'earth',
119     };
122 export const getVPNSpeed = (type: 'medium' | 'highest', highlight?: boolean): PlanCardFeatureDefinition => {
123     return {
124         text: type === 'medium' ? c('new_plans').t`Medium VPN speed` : c('new_plans').t`Highest VPN speed`,
125         included: true,
126         highlight,
127         icon: 'chevrons-right',
128     };
131 export const getStreaming = (included: boolean, highlight?: boolean): PlanCardFeatureDefinition => {
132     return {
133         text: c('new_plans: feature').t`High-speed streaming`,
134         tooltip: c('new_plans: tooltip')
135             .t`Access content on streaming services, including Netflix, Disney+, and Prime Video, from anywhere`,
136         included,
137         highlight,
138         icon: 'play',
139     };
142 export const getP2P = (included: boolean, highlight?: boolean): PlanCardFeatureDefinition => {
143     return {
144         text: c('new_plans: feature').t`Fast P2P/BitTorrent downloads`,
145         tooltip: c('new_plans: tooltip').t`Support for file-sharing protocols like BitTorrent`,
146         included,
147         highlight,
148         icon: 'arrows-switch',
149     };
152 export const getAdvancedVPNCustomizations = (included: boolean, highlight?: boolean): PlanCardFeatureDefinition => {
153     return {
154         text: c('vpn_2step: feature').t`Advanced VPN customizations`,
155         tooltip: c('vpn_2step: tooltip')
156             .t`Access to Secure Core servers, fast P2P/BitTorrent downloads, Tor over VPN, and more.`,
157         included,
158         highlight,
159         icon: 'arrows-switch',
160     };
163 export const getDoubleHop = (included: boolean, highlight?: boolean): PlanCardFeatureDefinition => {
164     return {
165         text: c('new_plans: feature').t`Double hop`,
166         tooltip: c('new_plans: tooltip')
167             .t`Defends against the threat to VPN privacy by passing your internet traffic through multiple servers.`,
168         included,
169         highlight,
170         icon: 'arrows-switch',
171     };
174 export const getNetShield = (included: boolean, highlight?: boolean): PlanCardFeatureDefinition => {
175     return {
176         text: c('new_plans: feature').t`Ad-blocker and malware protection`,
177         tooltip: c('new_plans: tooltip')
178             .t`Specially designed NetShield protects your device and speeds up your browsing by blocking ads, trackers, and malware`,
179         included,
180         highlight,
181         icon: 'shield',
182     };
184 export const getSecureCore = (included: boolean, highlight?: boolean): PlanCardFeatureDefinition => {
185     return {
186         text: c('new_plans: feature').t`Secure Core servers`,
187         tooltip: c('new_plans: tooltip')
188             .t`Defends against the threat to VPN privacy by passing your internet traffic through multiple servers`,
189         included,
190         highlight,
191         icon: 'servers',
192     };
194 export const getTor = (included: boolean, highlight?: boolean): PlanCardFeatureDefinition => {
195     return {
196         text: c('new_plans: feature').t`TOR over VPN`,
197         tooltip: c('new_plans: tooltip').t`Route your internet traffic through the Tor network with a single click`,
198         included,
199         highlight,
200         icon: 'brand-tor',
201     };
204 const getVPNConnectionsB2B = (n = 0, highlight?: boolean): PlanCardFeatureDefinition => {
205     return {
206         text: n === 1 ? getB2BFreeVPNConnectionsText(1) : getB2BHighSpeedVPNConnectionsText(n),
207         tooltip: c('new_plans: tooltip')
208             .t`One VPN connection allows one device to connect to ${VPN_APP_NAME} at any given time. For instance, to connect a phone and a laptop to ${VPN_APP_NAME} at the same time, you need two VPN connections.`,
209         included: true,
210         highlight,
211         icon: 'brand-proton-vpn',
212     };
215 export const getVPNConnections = (n = 0, highlight?: boolean): PlanCardFeatureDefinition => {
216     return {
217         text: c('new_plans: feature').ngettext(msgid`${n} VPN connection`, `${n} VPN connections`, n),
218         included: true,
219         highlight,
220         icon: 'brand-proton-vpn',
221     };
223 export const getProtectDevices = (n = 0, highlight?: boolean): PlanCardFeatureDefinition => {
224     return {
225         text: c('new_plans: feature').ngettext(
226             msgid`Protect ${n} device at a time`,
227             `Protect ${n} devices at a time`,
228             n
229         ),
230         included: true,
231         highlight,
232         icon: 'brand-proton-vpn',
233     };
235 export const getNoLogs = (highlight?: boolean): PlanCardFeatureDefinition => {
236     return {
237         text: c('new_plans: feature').t`Strict no-logs policy`,
238         tooltip: c('new_plans: tooltip')
239             .t`We keep no session usage logs of what you do online, and we do not log metadata that can compromise your privacy`,
240         included: true,
241         highlight,
242         icon: 'alias',
243     };
245 export const getBandwidth = (): PlanCardFeatureDefinition => {
246     return {
247         text: c('new_plans: feature').t`Unlimited volume/bandwidth`,
248         included: true,
249     };
252 export const getNoAds = (): PlanCardFeatureDefinition => {
253     return {
254         text: c('vpn_2step: feature').t`No ads`,
255         included: true,
256     };
258 const getDNSLeak = (): PlanCardFeatureDefinition => {
259     return {
260         text: c('new_plans: feature').t`DNS leak prevention`,
261         tooltip: c('new_plans: tooltip')
262             .t`When connected to our VPN, your DNS queries through our encrypted VPN tunnel, adding to your online privacy and security`,
263         included: true,
264     };
266 export const getKillSwitch = (): PlanCardFeatureDefinition => {
267     return {
268         text: c('new_plans: feature').t`Kill switch/always-on VPN`,
269         tooltip: c('new_plans: tooltip')
270             .t`Keeps you protected by blocking all network connections when you are unexpectedly disconnected from our VPN server.`,
271         included: true,
272     };
274 const getEncryption = (): PlanCardFeatureDefinition => {
275     return {
276         text: c('new_plans: feature').t`Encrypted VPN servers`,
277         tooltip: c('new_plans: tooltip')
278             .t`Our servers’ hard disks are fully encrypted with multiple password layers so your data is protected even if our hardware is compromised`,
279         included: true,
280     };
282 const getRouterSupport = (): PlanCardFeatureDefinition => {
283     return {
284         text: c('new_plans: feature').t`Router support`,
285         tooltip: c('new_plans: tooltip')
286             .t`Protect every device connected to your WiFi network. It’s also useful if you have devices that do not support VPN settings directly.`,
287         included: true,
288     };
290 export const getPrioritySupport = (): PlanCardFeatureDefinition => {
291     return {
292         text: c('new_plans: feature').t`Priority support & live chat`,
293         tooltip: '',
294         included: true,
295         icon: 'life-ring',
296     };
298 export const getFreeFeatures = (): PlanCardFeatureDefinition => {
299     return {
300         text: c('new_plans: feature')
301             .t`Free features from ${BRAND_NAME} ${MAIL_SHORT_APP_NAME}, ${CALENDAR_SHORT_APP_NAME}, and ${DRIVE_SHORT_APP_NAME}`,
302         tooltip: '',
303         included: true,
304     };
306 export const getAllPlatforms = (): PlanCardFeatureDefinition => {
307     return {
308         text: c('new_plans: feature').t`Available on all platforms`,
309         tooltip: '',
310         included: true,
311     };
313 export const getRefundable = (): PlanCardFeatureDefinition => {
314     return {
315         text: c('new_plans: feature').t`Fully refundable for 30 days`,
316         tooltip: '',
317         included: true,
318     };
320 const getSplitTunnel = (included: boolean): PlanCardFeatureDefinition => {
321     return {
322         text: c('new_plans: feature').t`Split tunneling (Android and Windows)`,
323         tooltip: c('new_plans: tooltip')
324             .t`Allows you to access more than one network at the same time, e.g., stream a film from another country while still getting local search results`,
325         included: included,
326     };
328 export const getVPNDevices = (n: number): PlanCardFeatureDefinition => {
329     if (n === 1) {
330         return {
331             text: c('new_plans: feature').t`Free VPN on a single device`,
332             tooltip: c('new_plans: tooltip')
333                 .t`Allows you to access more than one network at the same time, e.g., stream a film from another country while still getting local search results`,
334             included: true,
335         };
336     }
337     return {
338         text: c('new_plans: feature').ngettext(
339             msgid`High-speed VPN on ${n} device`,
340             `High-speed VPN on ${n} devices`,
341             n
342         ),
343         included: true,
344     };
347 export const getDedicatedServersVPNFeature = (serversCount?: VPNServersCountData): PlanCardFeatureDefinition => {
348     let text: string;
350     if (serversCount === undefined) {
351         text = c('new_plans: Upsell attribute').t`Dedicated server locations in North America and Europe`;
352     } else {
353         const numberOfCountries = serversCount.paid.countries;
354         text = c('new_plans: Upsell attribute').t`Dedicated server locations in ${numberOfCountries}+ countries`;
355     }
357     return {
358         icon: 'checkmark',
359         included: true,
360         text,
361         tooltip: c('new_plans: tooltip')
362             .t`Dedicated servers with dedicated IP addresses can be added to private gateways to enable fine-tuned access control`,
363     };
366 export const getDedicatedAccountManagerVPNFeature = (): PlanCardFeatureDefinition => ({
367     icon: 'checkmark',
368     included: true,
369     text: c('new_plans: Upsell attribute').t`Dedicated Account manager`,
372 export const getAESEncryptionVPNFeature = (): PlanCardFeatureDefinition => ({
373     icon: 'checkmark',
374     included: true,
375     text: c('new_plans: Upsell attribute').t`AES 256-bit VPN encryption`,
378 export const getCensorshipCircumventionVPNFeature = (): PlanCardFeatureDefinition => ({
379     icon: 'checkmark',
380     included: true,
381     text: c('new_plans: Upsell attribute').t`Censorship circumvention`,
384 export const getCentralControlPanelVPNFeature = (): PlanCardFeatureDefinition => ({
385     icon: 'checkmark',
386     included: true,
387     text: c('new_plans: Upsell attribute').t`Central control panel`,
390 export const getAutoConnectVPNFeature = (): PlanCardFeatureDefinition => ({
391     icon: 'checkmark',
392     included: true,
393     text: c('new_plans: Upsell attribute').t`Auto-connect`,
396 export const getMultiPlatformSupportVPNFeature = (): PlanCardFeatureDefinition => ({
397     icon: 'checkmark',
398     included: true,
399     text: c('new_plans: Upsell attribute').t`Multi-platform support`,
402 export const get24x7SupportVPNFeature = (): PlanCardFeatureDefinition => ({
403     icon: 'checkmark',
404     included: true,
405     text: c('new_plans: Upsell attribute').t`24/7 support`,
408 export const getRequire2FAVPNFeature = (): PlanCardFeatureDefinition => ({
409     icon: 'checkmark',
410     included: true,
411     text: c('new_plans: Upsell attribute').t`Require 2FA`,
414 export const getBrowserExtensionVPNFeature = (): PlanCardFeatureDefinition => ({
415     icon: 'checkmark',
416     included: true,
417     text: c('new_plans: Upsell attribute').t`Browser extension`,
420 export const getPrivateGatewaysVPNFeature = (): PlanCardFeatureDefinition => ({
421     icon: 'checkmark',
422     included: true,
423     text: c('new_plans: Upsell attribute').t`Private gateways`,
424     tooltip: c('new_plans: tooltip')
425         .t`Lock down your company resources from the public internet and make them accessible only via your private gateways`,
428 export const getVPNFeatures = (serversCount: VPNServersCountData): PlanCardFeature[] => {
429     const freeServers = getFreeServers(serversCount.free.servers, serversCount.free.countries);
430     const plusServers = getPlusServers(serversCount.paid.servers, serversCount.paid.countries);
431     return [
432         {
433             name: 'vpn',
434             target: Audience.B2C,
435             plans: {
436                 [PLANS.FREE]: getVPNConnections(FREE_VPN_CONNECTIONS),
437                 [PLANS.BUNDLE]: getVPNConnections(VPN_CONNECTIONS),
438                 [PLANS.MAIL]: getVPNConnections(FREE_VPN_CONNECTIONS),
439                 [PLANS.VPN]: getVPNConnections(VPN_CONNECTIONS),
440                 [PLANS.DRIVE]: getVPNConnections(FREE_VPN_CONNECTIONS),
441                 [PLANS.DRIVE_BUSINESS]: getVPNConnections(FREE_VPN_CONNECTIONS),
442                 [PLANS.PASS]: getVPNConnections(FREE_VPN_CONNECTIONS),
443                 [PLANS.PASS_FAMILY]: getVPNConnections(FREE_VPN_CONNECTIONS),
444                 [PLANS.WALLET]: getVPNConnections(FREE_VPN_CONNECTIONS),
445                 [PLANS.FAMILY]: getVPNConnections(VPN_CONNECTIONS),
446                 [PLANS.DUO]: getVPNConnections(VPN_CONNECTIONS),
447                 [PLANS.MAIL_PRO]: getVPNConnections(FREE_VPN_CONNECTIONS),
448                 [PLANS.MAIL_BUSINESS]: getVPNConnections(FREE_VPN_CONNECTIONS),
449                 [PLANS.BUNDLE_PRO]: getVPNConnections(VPN_CONNECTIONS),
450                 [PLANS.BUNDLE_PRO_2024]: getVPNConnections(VPN_CONNECTIONS),
451                 [PLANS.PASS_PRO]: getVPNConnections(FREE_VPN_CONNECTIONS),
452                 [PLANS.PASS_BUSINESS]: getVPNConnections(FREE_VPN_CONNECTIONS),
453                 [PLANS.VPN_PRO]: getVPNConnections(VPN_CONNECTIONS),
454                 [PLANS.VPN_BUSINESS]: getVPNConnections(VPN_CONNECTIONS),
455             },
456         },
457         {
458             name: 'vpn-connections-per-user',
459             target: Audience.B2B,
460             plans: {
461                 [PLANS.FREE]: getVPNConnections(1),
462                 [PLANS.BUNDLE]: getVPNConnectionsB2B(VPN_CONNECTIONS),
463                 [PLANS.MAIL]: getVPNConnections(1),
464                 [PLANS.VPN]: getVPNConnectionsB2B(VPN_CONNECTIONS),
465                 [PLANS.DRIVE]: getVPNConnections(1),
466                 [PLANS.DRIVE_BUSINESS]: getVPNConnections(1),
467                 [PLANS.PASS]: getVPNConnections(1),
468                 [PLANS.PASS_FAMILY]: getVPNConnections(1),
469                 [PLANS.WALLET]: getVPNConnections(1),
470                 [PLANS.FAMILY]: getVPNConnectionsB2B(1),
471                 [PLANS.DUO]: getVPNConnectionsB2B(1),
472                 [PLANS.MAIL_PRO]: getVPNConnectionsB2B(1),
473                 [PLANS.MAIL_BUSINESS]: getVPNConnectionsB2B(1),
474                 [PLANS.BUNDLE_PRO]: getVPNConnectionsB2B(VPN_CONNECTIONS),
475                 [PLANS.BUNDLE_PRO_2024]: getVPNConnectionsB2B(VPN_CONNECTIONS),
476                 [PLANS.PASS_PRO]: getVPNConnections(1),
477                 [PLANS.PASS_BUSINESS]: getVPNConnections(1),
478                 [PLANS.VPN_PRO]: getVPNConnectionsB2B(VPN_CONNECTIONS),
479                 [PLANS.VPN_BUSINESS]: getVPNConnectionsB2B(VPN_CONNECTIONS),
480             },
481         },
482         {
483             name: 'vpn-connections-per-user-family',
484             target: Audience.FAMILY,
485             plans: {
486                 [PLANS.FREE]: getVPNConnections(1),
487                 [PLANS.BUNDLE]: getVPNConnections(VPN_CONNECTIONS),
488                 [PLANS.MAIL]: getVPNConnections(1),
489                 [PLANS.VPN]: getVPNConnections(VPN_CONNECTIONS),
490                 [PLANS.DRIVE]: getVPNConnections(1),
491                 [PLANS.DRIVE_BUSINESS]: getVPNConnections(1),
492                 [PLANS.PASS]: getVPNConnections(1),
493                 [PLANS.PASS_FAMILY]: getVPNConnections(1),
494                 [PLANS.WALLET]: getVPNConnections(1),
495                 [PLANS.FAMILY]: getVPNConnectionsB2B(VPN_CONNECTIONS),
496                 [PLANS.DUO]: getVPNConnectionsB2B(VPN_CONNECTIONS),
497                 [PLANS.MAIL_PRO]: getVPNConnectionsB2B(1),
498                 [PLANS.MAIL_BUSINESS]: getVPNConnectionsB2B(1),
499                 [PLANS.BUNDLE_PRO]: getVPNConnectionsB2B(VPN_CONNECTIONS),
500                 [PLANS.BUNDLE_PRO_2024]: getVPNConnectionsB2B(VPN_CONNECTIONS),
501                 [PLANS.PASS_PRO]: getVPNConnections(1),
502                 [PLANS.PASS_BUSINESS]: getVPNConnections(1),
503                 [PLANS.VPN_PRO]: getVPNConnectionsB2B(VPN_CONNECTIONS),
504                 [PLANS.VPN_BUSINESS]: getVPNConnectionsB2B(VPN_CONNECTIONS),
505             },
506         },
507         {
508             name: 'countries',
509             plans: {
510                 [PLANS.FREE]: getCountries(freeServers),
511                 [PLANS.BUNDLE]: getCountries(plusServers),
512                 [PLANS.MAIL]: getCountries(freeServers),
513                 [PLANS.VPN]: getCountries(plusServers),
514                 [PLANS.DRIVE]: getCountries(freeServers),
515                 [PLANS.DRIVE_BUSINESS]: getCountries(freeServers),
516                 [PLANS.PASS]: getCountries(freeServers),
517                 [PLANS.PASS_FAMILY]: getCountries(freeServers),
518                 [PLANS.WALLET]: getCountries(freeServers),
519                 [PLANS.FAMILY]: getCountries(plusServers),
520                 [PLANS.DUO]: getCountries(plusServers),
521                 [PLANS.MAIL_PRO]: getCountries(freeServers),
522                 [PLANS.MAIL_BUSINESS]: getCountries(freeServers),
523                 [PLANS.BUNDLE_PRO]: getCountries(plusServers),
524                 [PLANS.BUNDLE_PRO_2024]: getCountries(plusServers),
525                 [PLANS.PASS_PRO]: getCountries(freeServers),
526                 [PLANS.PASS_BUSINESS]: getCountries(freeServers),
527                 [PLANS.VPN_PRO]: getCountries(plusServers),
528                 [PLANS.VPN_BUSINESS]: getCountries(plusServers),
529             },
530         },
531         {
532             name: 'vpn-speed',
533             plans: {
534                 [PLANS.FREE]: getVPNSpeed('medium'),
535                 [PLANS.BUNDLE]: getVPNSpeed('highest'),
536                 [PLANS.MAIL]: getVPNSpeed('medium'),
537                 [PLANS.VPN]: getVPNSpeed('highest'),
538                 [PLANS.DRIVE]: getVPNSpeed('medium'),
539                 [PLANS.DRIVE_BUSINESS]: getVPNSpeed('medium'),
540                 [PLANS.PASS]: getVPNSpeed('medium'),
541                 [PLANS.PASS_FAMILY]: getVPNSpeed('medium'),
542                 [PLANS.WALLET]: getVPNSpeed('medium'),
543                 [PLANS.FAMILY]: getVPNSpeed('highest'),
544                 [PLANS.DUO]: getVPNSpeed('highest'),
545                 [PLANS.MAIL_PRO]: getVPNSpeed('medium'),
546                 [PLANS.MAIL_BUSINESS]: getVPNSpeed('medium'),
547                 [PLANS.BUNDLE_PRO]: getVPNSpeed('highest'),
548                 [PLANS.BUNDLE_PRO_2024]: getVPNSpeed('highest'),
549                 [PLANS.PASS_PRO]: getVPNSpeed('medium'),
550                 [PLANS.PASS_BUSINESS]: getVPNSpeed('medium'),
551                 [PLANS.VPN_PRO]: getVPNSpeed('highest'),
552                 [PLANS.VPN_BUSINESS]: getVPNSpeed('highest'),
553             },
554         },
555         {
556             name: 'netshield',
557             plans: {
558                 [PLANS.FREE]: getNetShield(false),
559                 [PLANS.BUNDLE]: getNetShield(true),
560                 [PLANS.MAIL]: getNetShield(false),
561                 [PLANS.VPN]: getNetShield(true),
562                 [PLANS.DRIVE]: getNetShield(false),
563                 [PLANS.DRIVE_BUSINESS]: getNetShield(false),
564                 [PLANS.PASS]: getNetShield(false),
565                 [PLANS.PASS_FAMILY]: getNetShield(false),
566                 [PLANS.WALLET]: getNetShield(false),
567                 [PLANS.FAMILY]: getNetShield(true),
568                 [PLANS.DUO]: getNetShield(true),
569                 [PLANS.MAIL_PRO]: getNetShield(false),
570                 [PLANS.MAIL_BUSINESS]: getNetShield(false),
571                 [PLANS.PASS_PRO]: getNetShield(false),
572                 [PLANS.PASS_BUSINESS]: getNetShield(false),
573                 [PLANS.BUNDLE_PRO]: getNetShield(true),
574                 [PLANS.BUNDLE_PRO_2024]: getNetShield(true),
575                 [PLANS.VPN_PRO]: getNetShield(true),
576                 [PLANS.VPN_BUSINESS]: getNetShield(true),
577             },
578         },
579         {
580             name: 'streaming',
581             plans: {
582                 [PLANS.FREE]: getStreaming(false),
583                 [PLANS.BUNDLE]: getStreaming(true),
584                 [PLANS.MAIL]: getStreaming(false),
585                 [PLANS.VPN]: getStreaming(true),
586                 [PLANS.DRIVE]: getStreaming(false),
587                 [PLANS.DRIVE_BUSINESS]: getStreaming(false),
588                 [PLANS.PASS]: getStreaming(false),
589                 [PLANS.PASS_FAMILY]: getStreaming(false),
590                 [PLANS.WALLET]: getStreaming(false),
591                 [PLANS.FAMILY]: getStreaming(true),
592                 [PLANS.DUO]: getStreaming(true),
593                 [PLANS.MAIL_PRO]: getStreaming(false),
594                 [PLANS.MAIL_BUSINESS]: getStreaming(false),
595                 [PLANS.BUNDLE_PRO]: getStreaming(true),
596                 [PLANS.BUNDLE_PRO_2024]: getStreaming(true),
597                 [PLANS.PASS_PRO]: getStreaming(false),
598                 [PLANS.PASS_BUSINESS]: getStreaming(false),
599                 [PLANS.VPN_PRO]: getStreaming(true),
600                 [PLANS.VPN_BUSINESS]: getStreaming(true),
601             },
602         },
603         {
604             name: 'p2p',
605             plans: {
606                 [PLANS.FREE]: getP2P(false),
607                 [PLANS.BUNDLE]: getP2P(true),
608                 [PLANS.MAIL]: getP2P(false),
609                 [PLANS.VPN]: getP2P(true),
610                 [PLANS.DRIVE]: getP2P(false),
611                 [PLANS.DRIVE_BUSINESS]: getP2P(false),
612                 [PLANS.PASS]: getP2P(false),
613                 [PLANS.PASS_FAMILY]: getP2P(false),
614                 [PLANS.WALLET]: getP2P(false),
615                 [PLANS.FAMILY]: getP2P(true),
616                 [PLANS.DUO]: getP2P(true),
617                 [PLANS.MAIL_PRO]: getP2P(false),
618                 [PLANS.MAIL_BUSINESS]: getP2P(false),
619                 [PLANS.BUNDLE_PRO]: getP2P(true),
620                 [PLANS.BUNDLE_PRO_2024]: getP2P(true),
621                 [PLANS.PASS_PRO]: getP2P(false),
622                 [PLANS.PASS_BUSINESS]: getP2P(false),
623                 [PLANS.VPN_PRO]: getP2P(true),
624                 [PLANS.VPN_BUSINESS]: getP2P(true),
625             },
626         },
627         {
628             name: 'hop',
629             plans: {
630                 [PLANS.FREE]: getDoubleHop(false),
631                 [PLANS.BUNDLE]: getDoubleHop(true, true),
632                 [PLANS.MAIL]: getDoubleHop(false),
633                 [PLANS.VPN]: getDoubleHop(true, true),
634                 [PLANS.DRIVE]: getDoubleHop(false),
635                 [PLANS.DRIVE_BUSINESS]: getDoubleHop(false),
636                 [PLANS.PASS]: getDoubleHop(false),
637                 [PLANS.PASS_FAMILY]: getDoubleHop(false),
638                 [PLANS.WALLET]: getDoubleHop(false),
639                 [PLANS.FAMILY]: getDoubleHop(true, true),
640                 [PLANS.DUO]: getDoubleHop(true, true),
641                 [PLANS.MAIL_PRO]: getDoubleHop(false),
642                 [PLANS.MAIL_BUSINESS]: getDoubleHop(false),
643                 [PLANS.BUNDLE_PRO]: getDoubleHop(true, true),
644                 [PLANS.BUNDLE_PRO_2024]: getDoubleHop(true, true),
645                 [PLANS.PASS_PRO]: getDoubleHop(false),
646                 [PLANS.PASS_BUSINESS]: getDoubleHop(false),
647                 [PLANS.VPN_PRO]: getDoubleHop(true, true),
648                 [PLANS.VPN_BUSINESS]: getDoubleHop(true, true),
649             },
650         },
651         {
652             name: 'secure',
653             plans: {
654                 [PLANS.FREE]: getSecureCore(false),
655                 [PLANS.BUNDLE]: getSecureCore(true),
656                 [PLANS.MAIL]: getSecureCore(false),
657                 [PLANS.VPN]: getSecureCore(true),
658                 [PLANS.DRIVE]: getSecureCore(false),
659                 [PLANS.DRIVE_BUSINESS]: getSecureCore(false),
660                 [PLANS.PASS]: getSecureCore(false),
661                 [PLANS.PASS_FAMILY]: getSecureCore(false),
662                 [PLANS.WALLET]: getSecureCore(false),
663                 [PLANS.FAMILY]: getSecureCore(true),
664                 [PLANS.DUO]: getSecureCore(true),
665                 [PLANS.MAIL_PRO]: getSecureCore(false),
666                 [PLANS.MAIL_BUSINESS]: getSecureCore(false),
667                 [PLANS.BUNDLE_PRO]: getSecureCore(true),
668                 [PLANS.BUNDLE_PRO_2024]: getSecureCore(true),
669                 [PLANS.PASS_PRO]: getSecureCore(false),
670                 [PLANS.PASS_BUSINESS]: getSecureCore(false),
671                 [PLANS.VPN_PRO]: getSecureCore(true),
672                 [PLANS.VPN_BUSINESS]: getSecureCore(true),
673             },
674         },
675         {
676             name: 'tor',
677             plans: {
678                 [PLANS.FREE]: getTor(false),
679                 [PLANS.BUNDLE]: getTor(true),
680                 [PLANS.MAIL]: getTor(false),
681                 [PLANS.VPN]: getTor(true),
682                 [PLANS.DRIVE]: getTor(false),
683                 [PLANS.DRIVE_BUSINESS]: getTor(false),
684                 [PLANS.PASS]: getTor(false),
685                 [PLANS.PASS_FAMILY]: getTor(false),
686                 [PLANS.WALLET]: getTor(false),
687                 [PLANS.FAMILY]: getTor(true),
688                 [PLANS.DUO]: getTor(true),
689                 [PLANS.MAIL_PRO]: getTor(false),
690                 [PLANS.MAIL_BUSINESS]: getTor(false),
691                 [PLANS.BUNDLE_PRO]: getTor(true),
692                 [PLANS.BUNDLE_PRO_2024]: getTor(true),
693                 [PLANS.PASS_PRO]: getTor(false),
694                 [PLANS.PASS_BUSINESS]: getTor(false),
695                 [PLANS.VPN_PRO]: getTor(true),
696                 [PLANS.VPN_BUSINESS]: getTor(true),
697             },
698         },
699         {
700             name: 'logs',
701             plans: {
702                 [PLANS.FREE]: getNoLogs(),
703                 [PLANS.BUNDLE]: getNoLogs(),
704                 [PLANS.MAIL]: getNoLogs(),
705                 [PLANS.VPN]: getNoLogs(),
706                 [PLANS.DRIVE]: getNoLogs(),
707                 [PLANS.DRIVE_BUSINESS]: getNoLogs(),
708                 [PLANS.PASS]: getNoLogs(),
709                 [PLANS.PASS_FAMILY]: getNoLogs(),
710                 [PLANS.WALLET]: getNoLogs(),
711                 [PLANS.FAMILY]: getNoLogs(),
712                 [PLANS.DUO]: getNoLogs(),
713                 [PLANS.MAIL_PRO]: getNoLogs(),
714                 [PLANS.MAIL_BUSINESS]: getNoLogs(),
715                 [PLANS.BUNDLE_PRO]: getNoLogs(),
716                 [PLANS.BUNDLE_PRO_2024]: getNoLogs(),
717                 [PLANS.PASS_PRO]: getNoLogs(),
718                 [PLANS.PASS_BUSINESS]: getNoLogs(),
719                 [PLANS.VPN_PRO]: getNoLogs(),
720                 [PLANS.VPN_BUSINESS]: getNoLogs(),
721             },
722         },
723         {
724             name: 'bandwidth',
725             plans: {
726                 [PLANS.FREE]: getBandwidth(),
727                 [PLANS.BUNDLE]: getBandwidth(),
728                 [PLANS.MAIL]: getBandwidth(),
729                 [PLANS.VPN]: getBandwidth(),
730                 [PLANS.DRIVE]: getBandwidth(),
731                 [PLANS.DRIVE_BUSINESS]: getBandwidth(),
732                 [PLANS.PASS]: getBandwidth(),
733                 [PLANS.PASS_FAMILY]: getBandwidth(),
734                 [PLANS.WALLET]: getBandwidth(),
735                 [PLANS.FAMILY]: getBandwidth(),
736                 [PLANS.DUO]: getBandwidth(),
737                 [PLANS.MAIL_PRO]: getBandwidth(),
738                 [PLANS.MAIL_BUSINESS]: getBandwidth(),
739                 [PLANS.BUNDLE_PRO]: getBandwidth(),
740                 [PLANS.BUNDLE_PRO_2024]: getBandwidth(),
741                 [PLANS.PASS_PRO]: getBandwidth(),
742                 [PLANS.PASS_BUSINESS]: getBandwidth(),
743                 [PLANS.VPN_PRO]: getBandwidth(),
744                 [PLANS.VPN_BUSINESS]: getBandwidth(),
745             },
746         },
747         {
748             name: 'dns-leak',
749             plans: {
750                 [PLANS.FREE]: getDNSLeak(),
751                 [PLANS.BUNDLE]: getDNSLeak(),
752                 [PLANS.MAIL]: getDNSLeak(),
753                 [PLANS.VPN]: getDNSLeak(),
754                 [PLANS.DRIVE]: getDNSLeak(),
755                 [PLANS.DRIVE_BUSINESS]: getDNSLeak(),
756                 [PLANS.PASS]: getDNSLeak(),
757                 [PLANS.PASS_FAMILY]: getDNSLeak(),
758                 [PLANS.WALLET]: getDNSLeak(),
759                 [PLANS.FAMILY]: getDNSLeak(),
760                 [PLANS.DUO]: getDNSLeak(),
761                 [PLANS.MAIL_PRO]: getDNSLeak(),
762                 [PLANS.MAIL_BUSINESS]: getDNSLeak(),
763                 [PLANS.BUNDLE_PRO]: getDNSLeak(),
764                 [PLANS.BUNDLE_PRO_2024]: getDNSLeak(),
765                 [PLANS.PASS_PRO]: getDNSLeak(),
766                 [PLANS.PASS_BUSINESS]: getDNSLeak(),
767                 [PLANS.VPN_PRO]: getDNSLeak(),
768                 [PLANS.VPN_BUSINESS]: getDNSLeak(),
769             },
770         },
771         {
772             name: 'kill-switch',
773             plans: {
774                 [PLANS.FREE]: getKillSwitch(),
775                 [PLANS.BUNDLE]: getKillSwitch(),
776                 [PLANS.MAIL]: getKillSwitch(),
777                 [PLANS.VPN]: getKillSwitch(),
778                 [PLANS.DRIVE]: getKillSwitch(),
779                 [PLANS.DRIVE_BUSINESS]: getKillSwitch(),
780                 [PLANS.PASS]: getKillSwitch(),
781                 [PLANS.PASS_FAMILY]: getKillSwitch(),
782                 [PLANS.WALLET]: getKillSwitch(),
783                 [PLANS.FAMILY]: getKillSwitch(),
784                 [PLANS.DUO]: getKillSwitch(),
785                 [PLANS.MAIL_PRO]: getKillSwitch(),
786                 [PLANS.MAIL_BUSINESS]: getKillSwitch(),
787                 [PLANS.BUNDLE_PRO]: getKillSwitch(),
788                 [PLANS.BUNDLE_PRO_2024]: getKillSwitch(),
789                 [PLANS.PASS_PRO]: getKillSwitch(),
790                 [PLANS.PASS_BUSINESS]: getKillSwitch(),
791                 [PLANS.VPN_PRO]: getKillSwitch(),
792                 [PLANS.VPN_BUSINESS]: getKillSwitch(),
793             },
794         },
795         {
796             name: 'encryption',
797             plans: {
798                 [PLANS.FREE]: getEncryption(),
799                 [PLANS.BUNDLE]: getEncryption(),
800                 [PLANS.MAIL]: getEncryption(),
801                 [PLANS.VPN]: getEncryption(),
802                 [PLANS.DRIVE]: getEncryption(),
803                 [PLANS.DRIVE_BUSINESS]: getEncryption(),
804                 [PLANS.PASS]: getEncryption(),
805                 [PLANS.PASS_FAMILY]: getEncryption(),
806                 [PLANS.WALLET]: getEncryption(),
807                 [PLANS.FAMILY]: getEncryption(),
808                 [PLANS.DUO]: getEncryption(),
809                 [PLANS.MAIL_PRO]: getEncryption(),
810                 [PLANS.MAIL_BUSINESS]: getEncryption(),
811                 [PLANS.BUNDLE_PRO]: getEncryption(),
812                 [PLANS.BUNDLE_PRO_2024]: getEncryption(),
813                 [PLANS.PASS_PRO]: getEncryption(),
814                 [PLANS.PASS_BUSINESS]: getEncryption(),
815                 [PLANS.VPN_PRO]: getEncryption(),
816                 [PLANS.VPN_BUSINESS]: getEncryption(),
817             },
818         },
819         {
820             name: 'router',
821             plans: {
822                 [PLANS.FREE]: getRouterSupport(),
823                 [PLANS.BUNDLE]: getRouterSupport(),
824                 [PLANS.MAIL]: getRouterSupport(),
825                 [PLANS.VPN]: getRouterSupport(),
826                 [PLANS.DRIVE]: getRouterSupport(),
827                 [PLANS.DRIVE_BUSINESS]: getRouterSupport(),
828                 [PLANS.PASS]: getRouterSupport(),
829                 [PLANS.PASS_FAMILY]: getRouterSupport(),
830                 [PLANS.WALLET]: getRouterSupport(),
831                 [PLANS.FAMILY]: getRouterSupport(),
832                 [PLANS.DUO]: getRouterSupport(),
833                 [PLANS.MAIL_PRO]: getRouterSupport(),
834                 [PLANS.MAIL_BUSINESS]: getRouterSupport(),
835                 [PLANS.BUNDLE_PRO]: getRouterSupport(),
836                 [PLANS.BUNDLE_PRO_2024]: getRouterSupport(),
837                 [PLANS.PASS_PRO]: getRouterSupport(),
838                 [PLANS.PASS_BUSINESS]: getRouterSupport(),
839                 [PLANS.VPN_PRO]: getRouterSupport(),
840                 [PLANS.VPN_BUSINESS]: getRouterSupport(),
841             },
842         },
843         {
844             name: 'split-tunnel',
845             plans: {
846                 [PLANS.FREE]: getSplitTunnel(false),
847                 [PLANS.BUNDLE]: getSplitTunnel(true),
848                 [PLANS.MAIL]: getSplitTunnel(false),
849                 [PLANS.VPN]: getSplitTunnel(true),
850                 [PLANS.DRIVE]: getSplitTunnel(false),
851                 [PLANS.DRIVE_BUSINESS]: getSplitTunnel(false),
852                 [PLANS.PASS]: getSplitTunnel(false),
853                 [PLANS.PASS_FAMILY]: getSplitTunnel(false),
854                 [PLANS.WALLET]: getSplitTunnel(false),
855                 [PLANS.FAMILY]: getSplitTunnel(true),
856                 [PLANS.DUO]: getSplitTunnel(true),
857                 [PLANS.MAIL_PRO]: getSplitTunnel(false),
858                 [PLANS.MAIL_BUSINESS]: getSplitTunnel(false),
859                 [PLANS.BUNDLE_PRO]: getSplitTunnel(true),
860                 [PLANS.BUNDLE_PRO_2024]: getSplitTunnel(true),
861                 [PLANS.PASS_PRO]: getSplitTunnel(false),
862                 [PLANS.PASS_BUSINESS]: getSplitTunnel(false),
863                 [PLANS.VPN_PRO]: getSplitTunnel(true),
864                 [PLANS.VPN_BUSINESS]: getSplitTunnel(true),
865             },
866         },
867     ];