Cleanup - unused files / unused exports / duplicate exports
[ProtonMail-WebClient.git] / packages / shared / lib / interfaces / contacts / VCard.ts
blob00385a70a9cf0fe286cf6f36e1916a91ae5bfe28
1 import type { PGP_SCHEMES } from '../../constants';
2 import type { MimeTypeVcard } from '../EncryptionPreferences';
4 export type VCardKey =
5     | 'fn'
6     | 'n'
7     | 'nickname'
8     | 'email'
9     | 'tel'
10     | 'adr'
11     | 'bday'
12     | 'anniversary'
13     | 'gender'
14     | 'lang'
15     | 'tz'
16     | 'geo'
17     | 'title'
18     | 'role'
19     | 'logo'
20     | 'org'
21     | 'related'
22     | 'member'
23     | 'note'
24     | 'url';
26 export type ParamKey =
27     | 'language'
28     | 'value'
29     | 'pref'
30     | 'altid'
31     | 'pid'
32     | 'type'
33     | 'mediatype'
34     | 'calscale'
35     | 'sort-as'
36     | 'geo'
37     | 'tz';
39 export interface VCardProperty<T = any> {
40     value: T;
41     params?: Partial<Record<ParamKey, string>>;
42     group?: string;
43     /**
44      * Proton specific: outside of RFC's scope
45      */
46     field: string;
47     uid: string;
50 export interface VcardNValue {
51     familyNames: string[];
52     givenNames: string[];
53     additionalNames: string[];
54     honorificPrefixes: string[];
55     honorificSuffixes: string[];
58 export enum VCardGender {
59     Male = 'M',
60     Female = 'F',
61     Other = 'O',
62     None = 'N',
63     Unknown = 'U',
64     Empty = '',
67 export interface VCardOrg {
68     organizationalName?: string;
69     organizationalUnitNames?: string[];
72 export interface VCardGenderValue {
73     gender: VCardGender;
74     text?: string;
77 export interface VCardAddress {
78     postOfficeBox: string;
79     extendedAddress: string;
80     streetAddress: string;
81     locality: string;
82     region: string;
83     postalCode: string;
84     country: string;
87 export type VCardDateOrText =
88     | {
89           /**
90            * Local date
91            */
92           date?: Date;
93       }
94     | {
95           text?: string;
96       };
98 interface BaseVCardContact {
99     fn: VCardProperty<string>[];
100     n?: VCardProperty<VcardNValue>;
101     nickname?: VCardProperty<string>[];
102     photo?: VCardProperty<string>[];
103     bday?: VCardProperty<VCardDateOrText>;
104     anniversary?: VCardProperty<VCardDateOrText>;
105     gender?: VCardProperty<VCardGenderValue>;
106     adr?: VCardProperty<VCardAddress>[];
107     tel?: VCardProperty<string>[];
108     email?: VCardProperty<string>[];
109     impp?: VCardProperty<string>[];
110     lang?: VCardProperty<string>[];
111     tz?: VCardProperty<string>[];
112     geo?: VCardProperty<string>[];
113     title?: VCardProperty<string>[];
114     role?: VCardProperty<string>[];
115     logo?: VCardProperty<string>[];
116     org?: VCardProperty<VCardOrg>[];
117     member?: VCardProperty<string>[];
118     related?: VCardProperty<string>[];
119     note?: VCardProperty<string>[];
120     url?: VCardProperty<string>[];
121     /**
122      * Array-valued categories pose problems to ICAL (even though a vcard with CATEGORIES:ONE,TWO
123      * will be parsed into a value ['ONE', 'TWO'], ICAL.js fails to transform it back).
124      * So we prefer storing array-valued category as several properties
125      */
126     categories?: VCardProperty<string>[];
127     key?: VCardProperty<string>[];
128     version?: VCardProperty<string>;
129     'x-pm-sign'?: VCardProperty<boolean>[];
130     'x-pm-scheme'?: VCardProperty<PGP_SCHEMES>[];
131     'x-pm-mimetype'?: VCardProperty<MimeTypeVcard>[];
134 export type VCardContact = BaseVCardContact &
135     (
136         | {
137               /**
138                * Encryption flag that applies if 'key' field (i.e. pinned keys) is populated
139                */
140               'x-pm-encrypt'?: VCardProperty<boolean>[];
141           }
142         | {
143               /**
144                * Encryption flag that applies to (unpinned) keys from e.g. WKD or other untrusted servers
145                */
146               'x-pm-encrypt-untrusted'?: VCardProperty<boolean>[];
147           }
148     );