Cleanup - unused files / unused exports / duplicate exports
[ProtonMail-WebClient.git] / packages / shared / lib / interfaces / drive / link.ts
blobc500fc7c683c04455c8727c290bd0d70d50ec7e9
1 import type { SORT_DIRECTION } from '../../constants';
2 import type { FileRevisionState, Thumbnail } from './file';
3 import type { Photo } from './photos';
5 export enum LinkType {
6     FOLDER = 1,
7     FILE = 2,
10 export enum LinkState {
11     DRAFT = 0,
12     ACTIVE = 1,
13     TRASHED = 2,
16 export type SharedUrlInfo = {
17     CreateTime: number;
18     ExpireTime: number | null;
19     ShareUrlID: string;
20     Token: string;
21     NumAccesses?: number;
24 export type SharingDetails = {
25     ShareUrl: SharedUrlInfo | null;
26     ShareID: string;
29 interface FileProperties {
30     ContentKeyPacket: string;
31     ContentKeyPacketSignature: string;
32     ActiveRevision: {
33         ID: string;
34         CreateTime: number;
35         Size: number;
36         ManifestSignature: string;
37         SignatureAddress: string;
38         State: FileRevisionState;
39         Thumbnail: number;
40         ThumbnailURLInfo: {
41             BareURL: string;
42             Token: string;
43             URL: string;
44         };
45         Thumbnails: Thumbnail[];
46         Photo: Photo | null;
47     } | null;
50 interface FolderProperties {
51     NodeHashKey: string;
54 interface DocumentProperties {
55     Size: number;
58 interface DriveLink {
59     LinkID: string;
60     ParentLinkID: string;
61     Type: LinkType;
62     Name: string;
63     NameSignatureEmail: string;
64     EncryptedName: string;
65     Size: number;
66     MIMEType: string;
67     Hash: string;
68     CreateTime: number;
69     // API returns only ModifyTime which represents modification on API, i.e.,
70     // the time when the last revision was uploaded. The real modification time
71     // (set by file system) is available in XAttr and these times are properly
72     // set during decryption of the link.
73     ModifyTime: number;
74     RealModifyTime: number;
75     Trashed: number | null;
76     State: number;
77     NodeKey: string;
78     NodePassphrase: string;
79     NodePassphraseSignature: string;
80     SignatureAddress: string;
81     Attributes: number;
82     Permissions: number;
83     FileProperties: FileProperties | null;
84     FolderProperties: FolderProperties | null;
85     DocumentProperties: DocumentProperties | null;
86     Shared: number;
87     UrlsExpired: boolean;
88     ShareIDs: string[];
89     ShareUrls: SharedUrlInfo[];
90     SharingDetails: SharingDetails | null;
91     // XAttr has following JSON structure encrypted by node key:
92     // {
93     //    Common: {
94     //        ModificationTime: "2021-09-16T07:40:54+0000",
95     //        Size: 13283,
96     //    },
97     // }
98     XAttr: string;
99     // CachedThumbnailURL is computed URL to cached image. This is not part
100     // of any request and not filled automatically. To get this value, use
101     // `loadLinkThumbnail` from `useDrive`.
102     CachedThumbnailURL: string;
103     ThumbnailIsLoading: boolean;
104     VolumeID: string;
107 export interface FileLinkMeta extends DriveLink {
108     Type: LinkType.FILE;
109     FileProperties: FileProperties;
110     FolderProperties: null;
113 export interface FolderLinkMeta extends DriveLink {
114     Type: LinkType.FOLDER;
115     FolderProperties: FolderProperties;
116     FileProperties: null;
119 export type LinkMeta = FileLinkMeta | FolderLinkMeta;
121 export const isFolderLinkMeta = (link: LinkMeta): link is FolderLinkMeta => link.Type === LinkType.FOLDER;
123 export interface LinkMetaResult {
124     Link: LinkMeta;
127 export interface LinkChildrenResult {
128     Links: LinkMeta[];
131 export interface HashCheckResult {
132     AvailableHashes: string[];
133     PendingHashes: {
134         ClientUID: string;
135         Hash: string;
136         LinkID: string;
137         RevisionID: string;
138     }[];
141 export interface MoveLink {
142     Name: string;
143     Hash: string;
144     ParentLinkID: string;
145     NodePassphrase: string;
146     NodePassphraseSignature: string;
147     NameSignatureEmail: string;
148     NewShareID?: string;
149     ContentHash?: string;
152 export type DriveSectionSortKeys = keyof Pick<DriveLink, 'MIMEType' | 'ModifyTime' | 'Size' | 'Name'>;
153 export type SharedLinksSectionSortKeys =
154     | keyof Pick<DriveLink, 'Name'>
155     | keyof Pick<SharedUrlInfo, 'CreateTime' | 'ExpireTime'>;
157 export type AllSortKeys = DriveSectionSortKeys | SharedLinksSectionSortKeys;
159 export type SortParams<T extends AllSortKeys = AllSortKeys> = {
160     sortField: T;
161     sortOrder: SORT_DIRECTION;
164 export interface ShareMapLink {
165     CreateTime: number;
166     Hash: string;
167     Index: number;
168     LinkID: string;
169     MIMEType: string;
170     ModifyTime: number;
171     Name: string;
172     ParentLinkID: string | null;
173     Size: number;
174     State: number;
175     Type: LinkType;
176     // These will be missing for Link.Type !== LinkType.FOLDER
177     NodeKey?: string;
178     NodePassphrase?: string;
179     NodePassphraseSignature?: string;
180     NodePassphraseSignatureEmail?: string;
183 export interface ShareMapPayload {
184     Links: ShareMapLink[];
185     SessionName: string;
186     More: 0 | 1;
187     Total: number;
190 export interface LinkMetaBatchPayload {
191     Links: LinkMeta[];
192     Parents: LinkMeta[];