Update selected item color in Pass menu
[ProtonMail-WebClient.git] / packages / pass / lib / bridge / types.ts
blob98c88d70e8cca00459791cfb81349985ef96402f
1 import type { HydratedAccessState } from '@proton/pass/store/reducers';
2 import type {
3     AliasMailbox,
4     AliasOptions,
5     ItemRevision,
6     OrganizationGetResponse,
7     Share,
8     ShareType,
9 } from '@proton/pass/types';
10 import type { OrganizationSettings } from '@proton/pass/types/data/organization';
11 import type { MaxAgeMemoizedFn } from '@proton/pass/utils/fp/memo';
12 import type { AuthenticationStore } from '@proton/shared/lib/authentication/createAuthenticationStore';
13 import type { Address, User } from '@proton/shared/lib/interfaces';
15 export type PassBridgeInitOptions = {
16     addresses: Address[];
17     authStore: AuthenticationStore;
18     user: User;
21 export interface PassBridge {
22     /**
23      * Initialize pass bridge crypto
24      * @param options arguments needed to initialize pass bridge crypto
25      * @returns a promise returning a boolean indicating if the bridge was successfully initialized
26      */
27     init: (options: PassBridgeInitOptions) => Promise<boolean>;
28     user: {
29         /**
30          * Get the user plan which includes aliases limit
31          */
32         getUserAccess: MaxAgeMemoizedFn<() => Promise<HydratedAccessState>>;
33     };
34     vault: {
35         /**
36          * Resolves the default - oldest, active and owned - vault.
37          * If it does not exist, it returns undefined
38          * @param options
39          * @param options.maxAge the time it should be cached in SECONDS
40          */
41         getDefault: MaxAgeMemoizedFn<() => Promise<Share<ShareType.Vault> | undefined>>;
42         /**
43          * Create default vault
44          */
45         createDefaultVault: () => Promise<Share<ShareType.Vault>>;
46     };
47     alias: {
48         /** Creates an alias item. Call `PassBridge.alias.getAliasOptions` in order
49          * to retrieve the available alias options */
50         create: (options: PassBridgeAliasCreate) => Promise<PassBridgeAliasItem>;
51         /** Retrieves the alias options for a given `shareId`. The alias options
52          * will be valid for a limited period of time (10 minutes) */
53         getAliasOptions: (shareId: string) => Promise<AliasOptions>;
54         /** Retrieves and decrypts all alias items for a given shareId and retrieves
55          * the alias details for the underlying items. */
56         getAllByShareId: MaxAgeMemoizedFn<(shareId: string) => Promise<PassBridgeAliasItem[]>>;
57     };
58     organization: {
59         settings: {
60             /** Get organization settings for Pass */
61             get: () => Promise<OrganizationGetResponse>;
62             /** Update an organization setting for Pass */
63             set: <K extends keyof OrganizationSettings>(
64                 setting: K,
65                 value: OrganizationSettings[K]
66             ) => Promise<OrganizationGetResponse>;
67         };
68     };
71 export type PassBridgeAliasItem = {
72     item: ItemRevision<'alias'>;
75 export type PassBridgeAliasCreate = {
76     /** vault shareId to create the alias in */
77     shareId: string;
78     /** Name of the underlying item  */
79     name: string;
80     /** Optional note of the underlying item */
81     note?: string;
82     /** Alias creation options */
83     alias: {
84         /** The full alias email : `prefix` + `unsigned suffix`.
85          * Validate it before submitting using the `validateEmailAddress`
86          * helper from `@proton/shared/lib/helpers/email`. */
87         aliasEmail: string;
88         /** The mailbox to forward emails to. Retrieved from `PassBridge.alias.getAliasOptions` */
89         mailbox: AliasMailbox;
90         /** Prefix for the alias. Should not include trailing `.` - it is
91          * already included in the suffix parameter */
92         prefix: string;
93         /** A signed suffix retrieved from `PassBridge.alias.getAliasOptions` */
94         signedSuffix: string;
95     };