Merge branch 'feat/inda-383-daily-stat' into 'main'
[ProtonMail-WebClient.git] / packages / shared / lib / helpers / crossTab.ts
blob2ec00a061dc607ad6f7d2c1f0aca1b244fa1b109
1 import { uint8ArrayToBase64String } from './encoding';
2 import { removeItem, setItem } from './storage';
4 export const PASSWORD_CHANGE_MESSAGE_TYPE = 'password-change';
6 const CROSS_TAB_EVENT_KEY = 'cte';
8 let id: string | undefined;
10 const generateId = () => {
11     return uint8ArrayToBase64String(crypto.getRandomValues(new Uint8Array(6)));
14 export const sendMessageToTabs = (type: string, data: any) => {
15     if (!id) {
16         id = generateId();
17     }
18     setItem(CROSS_TAB_EVENT_KEY, JSON.stringify({ id, type, data }));
19     removeItem(CROSS_TAB_EVENT_KEY);
22 export const getIsSelf = (otherId: string) => otherId === id;
24 export const getMessage = (event: StorageEvent) => {
25     if (event.key !== CROSS_TAB_EVENT_KEY || !event.newValue) {
26         return;
27     }
28     try {
29         const parsedData = JSON.parse(event.newValue);
30         if (!parsedData?.type) {
31             return;
32         }
33         return {
34             id: parsedData.id,
35             type: parsedData.type,
36             data: parsedData.data,
37         };
38     } catch (e: any) {
39         return undefined;
40     }